sepherosa_gmail.com created this revision. sepherosa_gmail.com added reviewers: adrian, delphij, royger, decui_microsoft.com, honzhan_microsoft.com, howard0su_gmail.com. sepherosa_gmail.com added a subscriber: freebsd-virtualization-list.
REVISION SUMMARY Better and simple solution is to do the same things as XEN'a EVTCHN, but that will require us to have a hyperv specific file always reside in kernel. Inspired by a discussion w/ Dexuan REVISION DETAIL https://reviews.freebsd.org/D5291 AFFECTED FILES sys/dev/hyperv/vmbus/hv_vmbus_drv_freebsd.c CHANGE DETAILS diff --git a/sys/dev/hyperv/vmbus/hv_vmbus_drv_freebsd.c b/sys/dev/hyperv/vmbus/hv_vmbus_drv_freebsd.c --- a/sys/dev/hyperv/vmbus/hv_vmbus_drv_freebsd.c +++ b/sys/dev/hyperv/vmbus/hv_vmbus_drv_freebsd.c @@ -382,8 +382,12 @@ #ifdef HYPERV extern inthand_t IDTVEC(rsvd), IDTVEC(hv_vmbus_callback); +#define VMBUS_IDT_START IDT_DTRACE_RET +#define VMBUS_IDT_END APIC_TIMER_INT + /** * @brief Find a free IDT slot and setup the interrupt handler. + * range: (VMBUS_IDT_START, VMBUS_IDT_END) */ static int vmbus_vector_alloc(void) @@ -397,8 +401,8 @@ * as vmbus channel callback vector. We install 'hv_vmbus_callback' * handler at that vector and use it to interrupt vcpus. */ - vector = APIC_SPURIOUS_INT; - while (--vector >= APIC_IPI_INTS) { + vector = VMBUS_IDT_END; + while (--vector > VMBUS_IDT_START) { ip = &idt[vector]; func = ((long)ip->gd_hioffset << 16 | ip->gd_looffset); if (func == (uintptr_t)&IDTVEC(rsvd)) { @@ -428,7 +432,7 @@ if (vector == 0) return; - KASSERT(vector >= APIC_IPI_INTS && vector < APIC_SPURIOUS_INT, + KASSERT(vector > VMBUS_IDT_START && vector < VMBUS_IDT_END, ("invalid vector %d", vector)); ip = &idt[vector]; EMAIL PREFERENCES https://reviews.freebsd.org/settings/panel/emailpreferences/ To: sepherosa_gmail.com, adrian, delphij, royger, decui_microsoft.com, honzhan_microsoft.com, howard0su_gmail.com Cc: freebsd-virtualization-list
diff --git a/sys/dev/hyperv/vmbus/hv_vmbus_drv_freebsd.c b/sys/dev/hyperv/vmbus/hv_vmbus_drv_freebsd.c --- a/sys/dev/hyperv/vmbus/hv_vmbus_drv_freebsd.c +++ b/sys/dev/hyperv/vmbus/hv_vmbus_drv_freebsd.c @@ -382,8 +382,12 @@ #ifdef HYPERV extern inthand_t IDTVEC(rsvd), IDTVEC(hv_vmbus_callback); +#define VMBUS_IDT_START IDT_DTRACE_RET +#define VMBUS_IDT_END APIC_TIMER_INT + /** * @brief Find a free IDT slot and setup the interrupt handler. + * range: (VMBUS_IDT_START, VMBUS_IDT_END) */ static int vmbus_vector_alloc(void) @@ -397,8 +401,8 @@ * as vmbus channel callback vector. We install 'hv_vmbus_callback' * handler at that vector and use it to interrupt vcpus. */ - vector = APIC_SPURIOUS_INT; - while (--vector >= APIC_IPI_INTS) { + vector = VMBUS_IDT_END; + while (--vector > VMBUS_IDT_START) { ip = &idt[vector]; func = ((long)ip->gd_hioffset << 16 | ip->gd_looffset); if (func == (uintptr_t)&IDTVEC(rsvd)) { @@ -428,7 +432,7 @@ if (vector == 0) return; - KASSERT(vector >= APIC_IPI_INTS && vector < APIC_SPURIOUS_INT, + KASSERT(vector > VMBUS_IDT_START && vector < VMBUS_IDT_END, ("invalid vector %d", vector)); ip = &idt[vector];
_______________________________________________ freebsd-virtualization@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/freebsd-virtualization To unsubscribe, send any mail to "freebsd-virtualization-unsubscr...@freebsd.org"