DF-1668 / fix.diff
--- a/sys/dev/virtual/hyperv/vmbus/vmbus.c +++ b/sys/dev/virtual/hyperv/vmbus/vmbus.c @@ -1019,6 +1019,15 @@ hdr = (const struct vmbus_chanmsg_hdr *)msg->msg_data; /* TODO */ - if (hdr->chm_type == VMBUS_CHANMSG_TYPE_VERSION_RESP) - vmbus_msghc_wakeup(sc, msg); -} + if (hdr->chm_type == VMBUS_CHANMSG_TYPE_VERSION_RESP) { + struct vmbus_msghc_ctx *mhc = sc->vmbus_msg_hc; + struct vmbus_msghc *mh = NULL; + if (mhc != NULL) { + lwkt_gettoken(&mhc->mhc_active_token); + mh = mhc->mhc_active; + lwkt_reltoken(&mhc->mhc_active_token); + } + if (mh != NULL) + vmbus_msghc_wakeup(sc, msg); + } +} |