Page MenuHomeFreeBSD

D6449.diff
No OneTemporary

D6449.diff

Index: head/sys/dev/hyperv/vmbus/hv_hv.c
===================================================================
--- head/sys/dev/hyperv/vmbus/hv_hv.c
+++ head/sys/dev/hyperv/vmbus/hv_hv.c
@@ -46,6 +46,7 @@
#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 @@
*/
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_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;
Index: head/sys/dev/hyperv/vmbus/hv_vmbus_drv_freebsd.c
===================================================================
--- head/sys/dev/hyperv/vmbus/hv_vmbus_drv_freebsd.c
+++ head/sys/dev/hyperv/vmbus/hv_vmbus_drv_freebsd.c
@@ -385,25 +385,18 @@
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 @@
}
}
- lapic_ipi_free(hv_vmbus_g_context.hv_cb_vector);
+ lapic_ipi_free(sc->vmbus_idtvec);
cleanup:
return (ret);
@@ -553,6 +546,7 @@
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 @@
}
}
- lapic_ipi_free(hv_vmbus_g_context.hv_cb_vector);
+ lapic_ipi_free(sc->vmbus_idtvec);
return (0);
}
Index: head/sys/dev/hyperv/vmbus/hv_vmbus_priv.h
===================================================================
--- head/sys/dev/hyperv/vmbus/hv_vmbus_priv.h
+++ head/sys/dev/hyperv/vmbus/hv_vmbus_priv.h
@@ -216,11 +216,6 @@
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 vmbus_scan(void);
typedef struct {
- unsigned int vector;
void *page_buffers[2 * MAXCPU];
} hv_setup_args;
Index: head/sys/dev/hyperv/vmbus/vmbus_var.h
===================================================================
--- head/sys/dev/hyperv/vmbus/vmbus_var.h
+++ head/sys/dev/hyperv/vmbus/vmbus_var.h
@@ -39,6 +39,7 @@
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;

File Metadata

Mime Type
text/plain
Expires
Wed, Nov 12, 12:19 AM (37 m, 27 s)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
25185902
Default Alt Text
D6449.diff (3 KB)

Event Timeline