Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 23 Jun 2016 05:08:18 +0000 (UTC)
From:      Sepherosa Ziehau <sephe@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org
Subject:   svn commit: r302115 - stable/10/sys/dev/hyperv/vmbus
Message-ID:  <201606230508.u5N58Il7071530@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: sephe
Date: Thu Jun 23 05:08:17 2016
New Revision: 302115
URL: https://svnweb.freebsd.org/changeset/base/302115

Log:
  MFC 300487
  
      hyperv/vmbus: Move IDT vector to vmbus_softc
  
      Prepare to get rid of the hv_setup_arg.
  
      MFC after:  1 week
      Sponsored by:       Microsoft OSTC
      Differential Revision:      https://reviews.freebsd.org/D6449

Modified:
  stable/10/sys/dev/hyperv/vmbus/hv_hv.c
  stable/10/sys/dev/hyperv/vmbus/hv_vmbus_drv_freebsd.c
  stable/10/sys/dev/hyperv/vmbus/hv_vmbus_priv.h
  stable/10/sys/dev/hyperv/vmbus/vmbus_var.h
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sys/dev/hyperv/vmbus/hv_hv.c
==============================================================================
--- stable/10/sys/dev/hyperv/vmbus/hv_hv.c	Thu Jun 23 04:40:13 2016	(r302114)
+++ stable/10/sys/dev/hyperv/vmbus/hv_hv.c	Thu Jun 23 05:08:17 2016	(r302115)
@@ -46,6 +46,7 @@ __FBSDID("$FreeBSD$");
 #include <dev/hyperv/include/hyperv_busdma.h>
 #include <dev/hyperv/vmbus/hv_vmbus_priv.h>
 #include <dev/hyperv/vmbus/hyperv_reg.h>
+#include <dev/hyperv/vmbus/vmbus_var.h>
 
 #define HV_NANOSECONDS_PER_SEC		1000000000L
 
@@ -220,8 +221,8 @@ hv_vmbus_signal_event(void *con_id)
  */
 void
 hv_vmbus_synic_init(void *arg)
-
 {
+	struct vmbus_softc *sc = vmbus_get_softc();
 	int			cpu;
 	uint64_t		hv_vcpu_index;
 	hv_vmbus_synic_simp	simp;
@@ -266,7 +267,7 @@ hv_vmbus_synic_init(void *arg)
 
 	/*HV_SHARED_SINT_IDT_VECTOR + 0x20; */
 	shared_sint.as_uint64_t = 0;
-	shared_sint.u.vector = setup_args->vector;
+	shared_sint.u.vector = sc->vmbus_idtvec;
 	shared_sint.u.masked = FALSE;
 	shared_sint.u.auto_eoi = TRUE;
 

Modified: stable/10/sys/dev/hyperv/vmbus/hv_vmbus_drv_freebsd.c
==============================================================================
--- stable/10/sys/dev/hyperv/vmbus/hv_vmbus_drv_freebsd.c	Thu Jun 23 04:40:13 2016	(r302114)
+++ stable/10/sys/dev/hyperv/vmbus/hv_vmbus_drv_freebsd.c	Thu Jun 23 05:08:17 2016	(r302115)
@@ -455,26 +455,18 @@ vmbus_bus_init(void)
 	sc = vmbus_get_softc();
 
 	/*
-	 * Find a free IDT slot for vmbus callback.
+	 * Find a free IDT vector for vmbus messages/events.
 	 */
-	hv_vmbus_g_context.hv_cb_vector = vmbus_vector_alloc();
-
-	if (hv_vmbus_g_context.hv_cb_vector == 0) {
-		if(bootverbose)
-			printf("Error VMBUS: Cannot find free IDT slot for "
-			    "vmbus callback!\n");
+	sc->vmbus_idtvec = vmbus_vector_alloc();
+	if (sc->vmbus_idtvec == 0) {
+		device_printf(sc->vmbus_dev, "cannot find free IDT vector\n");
 		ret = ENXIO;
 		goto cleanup;
 	}
-
-	if(bootverbose)
-		printf("VMBUS: vmbus callback vector %d\n",
-		    hv_vmbus_g_context.hv_cb_vector);
-
-	/*
-	 * Notify the hypervisor of our vector.
-	 */
-	setup_args.vector = hv_vmbus_g_context.hv_cb_vector;
+	if(bootverbose) {
+		device_printf(sc->vmbus_dev, "vmbus IDT vector %d\n",
+		    sc->vmbus_idtvec);
+	}
 
 	CPU_FOREACH(j) {
 		snprintf(buf, sizeof(buf), "cpu%d:hyperv", j);
@@ -574,7 +566,7 @@ vmbus_bus_init(void)
 		}
 	}
 
-	vmbus_vector_free(hv_vmbus_g_context.hv_cb_vector);
+	vmbus_vector_free(sc->vmbus_idtvec);
 
 	cleanup:
 	return (ret);
@@ -630,6 +622,7 @@ vmbus_sysinit(void *arg __unused)
 static int
 vmbus_detach(device_t dev)
 {
+	struct vmbus_softc *sc = device_get_softc(dev);
 	int i;
 
 	hv_vmbus_release_unattached_channels();
@@ -650,7 +643,7 @@ vmbus_detach(device_t dev)
 		}
 	}
 
-	vmbus_vector_free(hv_vmbus_g_context.hv_cb_vector);
+	vmbus_vector_free(sc->vmbus_idtvec);
 
 	return (0);
 }

Modified: stable/10/sys/dev/hyperv/vmbus/hv_vmbus_priv.h
==============================================================================
--- stable/10/sys/dev/hyperv/vmbus/hv_vmbus_priv.h	Thu Jun 23 04:40:13 2016	(r302114)
+++ stable/10/sys/dev/hyperv/vmbus/hv_vmbus_priv.h	Thu Jun 23 05:08:17 2016	(r302115)
@@ -216,11 +216,6 @@ typedef struct {
 	struct taskqueue		*hv_event_queue[MAXCPU];
 	struct taskqueue		*hv_msg_tq[MAXCPU];
 	struct task			hv_msg_task[MAXCPU];
-	/*
-	 * Host use this vector to intrrupt guest for vmbus channel
-	 * event and msg.
-	 */
-	unsigned int			hv_cb_vector;
 } hv_vmbus_context;
 
 /*
@@ -763,7 +758,6 @@ void			hv_et_intr(struct trapframe*);
 void			vmbus_scan(void);
 
 typedef struct {
-	unsigned int	vector;
 	void		*page_buffers[2 * MAXCPU];
 } hv_setup_args;
 

Modified: stable/10/sys/dev/hyperv/vmbus/vmbus_var.h
==============================================================================
--- stable/10/sys/dev/hyperv/vmbus/vmbus_var.h	Thu Jun 23 04:40:13 2016	(r302114)
+++ stable/10/sys/dev/hyperv/vmbus/vmbus_var.h	Thu Jun 23 05:08:17 2016	(r302115)
@@ -39,6 +39,7 @@ struct vmbus_softc {
 	void			(*vmbus_event_proc)(struct vmbus_softc *, int);
 	struct vmbus_pcpu_data	vmbus_pcpu[MAXCPU];
 	device_t		vmbus_dev;
+	int			vmbus_idtvec;
 };
 
 extern struct vmbus_softc	*vmbus_sc;



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