Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 16 Nov 2016 09:02:17 +0000 (UTC)
From:      Dexuan Cui <dexuan@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r308723 - head/sys/dev/hyperv/vmbus
Message-ID:  <201611160902.uAG92HIu051971@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: dexuan
Date: Wed Nov 16 09:02:17 2016
New Revision: 308723
URL: https://svnweb.freebsd.org/changeset/base/308723

Log:
  hyperv/vmbus: add a new method to get vcpu_id
  
  vcpu_id is host's representation of guest CPU.
  We get the mapping between vcpu_id and FreeBSD kernel's cpu id when VMBus
  driver is loaded. Later, when a driver, like the coming pcib driver, talks
  to the host and needs to refer to a guest CPU, the driver must use the
  vcpu_id.
  
  Reviewed by:	jhb, sephe
  Approved by:	sephe (mentor)
  MFC after:	1 week
  Sponsored by:	Microsoft
  Differential Revision:	https://reviews.freebsd.org/D8410

Modified:
  head/sys/dev/hyperv/vmbus/vmbus.c
  head/sys/dev/hyperv/vmbus/vmbus_if.m

Modified: head/sys/dev/hyperv/vmbus/vmbus.c
==============================================================================
--- head/sys/dev/hyperv/vmbus/vmbus.c	Wed Nov 16 07:05:42 2016	(r308722)
+++ head/sys/dev/hyperv/vmbus/vmbus.c	Wed Nov 16 09:02:17 2016	(r308723)
@@ -77,6 +77,8 @@ static int			vmbus_child_pnpinfo_str(dev
 static uint32_t			vmbus_get_version_method(device_t, device_t);
 static int			vmbus_probe_guid_method(device_t, device_t,
 				    const struct hyperv_guid *);
+static uint32_t			vmbus_get_vcpu_id_method(device_t bus,
+				    device_t dev, int cpu);
 
 static int			vmbus_init(struct vmbus_softc *);
 static int			vmbus_connect(struct vmbus_softc *, uint32_t);
@@ -135,6 +137,7 @@ static device_method_t vmbus_methods[] =
 	/* Vmbus interface */
 	DEVMETHOD(vmbus_get_version,		vmbus_get_version_method),
 	DEVMETHOD(vmbus_probe_guid,		vmbus_probe_guid_method),
+	DEVMETHOD(vmbus_get_vcpu_id,		vmbus_get_vcpu_id_method),
 
 	DEVMETHOD_END
 };
@@ -991,6 +994,14 @@ vmbus_probe_guid_method(device_t bus, de
 	return ENXIO;
 }
 
+static uint32_t
+vmbus_get_vcpu_id_method(device_t bus, device_t dev, int cpu)
+{
+	const struct vmbus_softc *sc = device_get_softc(bus);
+
+	return (VMBUS_PCPU_GET(sc, vcpuid, cpu));
+}
+
 static int
 vmbus_probe(device_t dev)
 {

Modified: head/sys/dev/hyperv/vmbus/vmbus_if.m
==============================================================================
--- head/sys/dev/hyperv/vmbus/vmbus_if.m	Wed Nov 16 07:05:42 2016	(r308722)
+++ head/sys/dev/hyperv/vmbus/vmbus_if.m	Wed Nov 16 09:02:17 2016	(r308723)
@@ -45,3 +45,9 @@ METHOD int probe_guid {
 	device_t dev;
 	const struct hyperv_guid *guid;
 };
+
+METHOD uint32_t get_vcpu_id {
+	device_t bus;
+	device_t dev;
+	int cpu;
+};



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201611160902.uAG92HIu051971>