svn commit: r300487 - head/sys/dev/hyperv/vmbus
Sepherosa Ziehau
sephe at FreeBSD.org
Mon May 23 07:32:36 UTC 2016
Author: sephe
Date: Mon May 23 07:32:34 2016
New Revision: 300487
URL: https://svnweb.freebsd.org/changeset/base/300487
Log:
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:
head/sys/dev/hyperv/vmbus/hv_hv.c
head/sys/dev/hyperv/vmbus/hv_vmbus_drv_freebsd.c
head/sys/dev/hyperv/vmbus/hv_vmbus_priv.h
head/sys/dev/hyperv/vmbus/vmbus_var.h
Modified: head/sys/dev/hyperv/vmbus/hv_hv.c
==============================================================================
--- head/sys/dev/hyperv/vmbus/hv_hv.c Mon May 23 07:23:19 2016 (r300486)
+++ head/sys/dev/hyperv/vmbus/hv_hv.c Mon May 23 07:32:34 2016 (r300487)
@@ -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: head/sys/dev/hyperv/vmbus/hv_vmbus_drv_freebsd.c
==============================================================================
--- head/sys/dev/hyperv/vmbus/hv_vmbus_drv_freebsd.c Mon May 23 07:23:19 2016 (r300486)
+++ head/sys/dev/hyperv/vmbus/hv_vmbus_drv_freebsd.c Mon May 23 07:32:34 2016 (r300487)
@@ -385,25 +385,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 = lapic_ipi_alloc(IDTVEC(hv_vmbus_callback));
- 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 = lapic_ipi_alloc(IDTVEC(hv_vmbus_callback));
+ 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);
@@ -493,7 +486,7 @@ vmbus_bus_init(void)
}
}
- lapic_ipi_free(hv_vmbus_g_context.hv_cb_vector);
+ lapic_ipi_free(sc->vmbus_idtvec);
cleanup:
return (ret);
@@ -553,6 +546,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();
@@ -573,7 +567,7 @@ vmbus_detach(device_t dev)
}
}
- lapic_ipi_free(hv_vmbus_g_context.hv_cb_vector);
+ lapic_ipi_free(sc->vmbus_idtvec);
return (0);
}
Modified: head/sys/dev/hyperv/vmbus/hv_vmbus_priv.h
==============================================================================
--- head/sys/dev/hyperv/vmbus/hv_vmbus_priv.h Mon May 23 07:23:19 2016 (r300486)
+++ head/sys/dev/hyperv/vmbus/hv_vmbus_priv.h Mon May 23 07:32:34 2016 (r300487)
@@ -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 interrupt guest for vmbus channel
- * event and msg.
- */
- 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: head/sys/dev/hyperv/vmbus/vmbus_var.h
==============================================================================
--- head/sys/dev/hyperv/vmbus/vmbus_var.h Mon May 23 07:23:19 2016 (r300486)
+++ head/sys/dev/hyperv/vmbus/vmbus_var.h Mon May 23 07:32:34 2016 (r300487)
@@ -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;
More information about the svn-src-head
mailing list