diff options
| author | Warner Losh <imp@FreeBSD.org> | 2021-12-14 23:45:18 +0000 |
|---|---|---|
| committer | Warner Losh <imp@FreeBSD.org> | 2021-12-14 23:53:09 +0000 |
| commit | f581847a7277576dd71e3d4f7de324150799c7f1 (patch) | |
| tree | 4a9d07239a9091d0e2b769cac21707a52dd6ff8b /sys/dev/hyperv | |
| parent | cf3ed8e0cd9505f21f614e8208f7afd9cfa4d621 (diff) | |
Diffstat (limited to 'sys/dev/hyperv')
| -rw-r--r-- | sys/dev/hyperv/vmbus/vmbus.c | 29 |
1 files changed, 14 insertions, 15 deletions
diff --git a/sys/dev/hyperv/vmbus/vmbus.c b/sys/dev/hyperv/vmbus/vmbus.c index 31951cbf4858..f0dea84426eb 100644 --- a/sys/dev/hyperv/vmbus/vmbus.c +++ b/sys/dev/hyperv/vmbus/vmbus.c @@ -520,9 +520,9 @@ vmbus_scan_done_task(void *xsc, int pending __unused) { struct vmbus_softc *sc = xsc; - mtx_lock(&Giant); + bus_topo_lock(); sc->vmbus_scandone = true; - mtx_unlock(&Giant); + bus_topo_unlock(); wakeup(&sc->vmbus_scandone); } @@ -577,9 +577,9 @@ vmbus_scan(struct vmbus_softc *sc) * Wait for all vmbus devices from the initial channel offers to be * attached. */ - GIANT_REQUIRED; + bus_topo_assert(); while (!sc->vmbus_scandone) - mtx_sleep(&sc->vmbus_scandone, &Giant, 0, "vmbusdev", 0); + mtx_sleep(&sc->vmbus_scandone, bus_topo_mtx(), 0, "vmbusdev", 0); if (bootverbose) { device_printf(sc->vmbus_dev, "device scan, probe and attach " @@ -592,17 +592,17 @@ static void vmbus_scan_teardown(struct vmbus_softc *sc) { - GIANT_REQUIRED; + bus_topo_assert(); if (sc->vmbus_devtq != NULL) { - mtx_unlock(&Giant); + bus_topo_unlock(); taskqueue_free(sc->vmbus_devtq); - mtx_lock(&Giant); + bus_topo_lock(); sc->vmbus_devtq = NULL; } if (sc->vmbus_subchtq != NULL) { - mtx_unlock(&Giant); + bus_topo_unlock(); taskqueue_free(sc->vmbus_subchtq); - mtx_lock(&Giant); + bus_topo_lock(); sc->vmbus_subchtq = NULL; } } @@ -1070,19 +1070,18 @@ vmbus_add_child(struct vmbus_channel *chan) struct vmbus_softc *sc = chan->ch_vmbus; device_t parent = sc->vmbus_dev; - mtx_lock(&Giant); - + bus_topo_lock(); chan->ch_dev = device_add_child(parent, NULL, -1); if (chan->ch_dev == NULL) { - mtx_unlock(&Giant); + bus_topo_unlock(); device_printf(parent, "device_add_child for chan%u failed\n", chan->ch_id); return (ENXIO); } device_set_ivars(chan->ch_dev, chan); device_probe_and_attach(chan->ch_dev); + bus_topo_unlock(); - mtx_unlock(&Giant); return (0); } @@ -1091,13 +1090,13 @@ vmbus_delete_child(struct vmbus_channel *chan) { int error = 0; - mtx_lock(&Giant); + bus_topo_lock(); if (chan->ch_dev != NULL) { error = device_delete_child(chan->ch_vmbus->vmbus_dev, chan->ch_dev); chan->ch_dev = NULL; } - mtx_unlock(&Giant); + bus_topo_unlock(); return (error); } |
