Index: sys/dev/hyperv/vmbus/hv_vmbus_drv_freebsd.c =================================================================== --- sys/dev/hyperv/vmbus/hv_vmbus_drv_freebsd.c +++ sys/dev/hyperv/vmbus/hv_vmbus_drv_freebsd.c @@ -517,7 +517,7 @@ * Setup software interrupt thread and handler for msg handling. */ ret = swi_add(&hv_vmbus_g_context.hv_msg_intr_event[j], - "hv_msg", vmbus_msg_swintr, (void *)(long)j, SWI_CLOCK, 0, + "hv_msg", vmbus_msg_swintr, (void *)(long)j, SWI_NET, INTR_MPSAFE, &hv_vmbus_g_context.msg_swintr[j]); if (ret) { if(bootverbose) @@ -544,7 +544,7 @@ */ ret = swi_add(&hv_vmbus_g_context.hv_event_intr_event[j], "hv_event", hv_vmbus_on_events, (void *)(long)j, - SWI_CLOCK, 0, &hv_vmbus_g_context.event_swintr[j]); + SWI_NET, INTR_MPSAFE, &hv_vmbus_g_context.event_swintr[j]); if (ret) { if(bootverbose) printf("VMBUS: failed to setup event swi for " @@ -552,6 +552,14 @@ goto cleanup1; } + ret = intr_event_bind(hv_vmbus_g_context.hv_event_intr_event[j], + j); + if (ret) { + if(bootverbose) + printf("VMBUS: failed to bind event swi thread " + "to cpu %d\n", j); + goto cleanup1; + } /* * Prepare the per cpu msg and event pages to be called on each cpu. */