mirror of
https://git.FreeBSD.org/src.git
synced 2025-01-12 14:29:28 +00:00
virtio: Start taskqueues threads after attach cannot fail
If virtio_setup_intr() failed during boot, we would hang in taskqueue_free() -> taskqueue_terminate() for all the taskq threads to terminate. This will never happen since the scheduler is not running by this point. Reported by: neel, grehan Approved by: grehan (mentor)
This commit is contained in:
parent
da178c777f
commit
ac4b6bcd17
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=244200
@ -338,8 +338,6 @@ vtblk_attach(device_t dev)
|
||||
device_printf(dev, "cannot allocate taskqueue\n");
|
||||
goto fail;
|
||||
}
|
||||
taskqueue_start_threads(&sc->vtblk_tq, 1, PI_DISK, "%s taskq",
|
||||
device_get_nameunit(dev));
|
||||
|
||||
error = virtio_setup_intr(dev, INTR_TYPE_BIO | INTR_ENTROPY);
|
||||
if (error) {
|
||||
@ -347,6 +345,9 @@ vtblk_attach(device_t dev)
|
||||
goto fail;
|
||||
}
|
||||
|
||||
taskqueue_start_threads(&sc->vtblk_tq, 1, PI_DISK, "%s taskq",
|
||||
device_get_nameunit(dev));
|
||||
|
||||
vtblk_create_disk(sc);
|
||||
|
||||
virtqueue_enable_intr(sc->vtblk_vq);
|
||||
|
@ -439,18 +439,17 @@ vtnet_attach(device_t dev)
|
||||
ether_ifdetach(ifp);
|
||||
goto fail;
|
||||
}
|
||||
taskqueue_start_threads(&sc->vtnet_tq, 1, PI_NET, "%s taskq",
|
||||
device_get_nameunit(dev));
|
||||
|
||||
error = virtio_setup_intr(dev, INTR_TYPE_NET);
|
||||
if (error) {
|
||||
device_printf(dev, "cannot setup virtqueue interrupts\n");
|
||||
taskqueue_free(sc->vtnet_tq);
|
||||
sc->vtnet_tq = NULL;
|
||||
ether_ifdetach(ifp);
|
||||
goto fail;
|
||||
}
|
||||
|
||||
taskqueue_start_threads(&sc->vtnet_tq, 1, PI_NET, "%s taskq",
|
||||
device_get_nameunit(dev));
|
||||
|
||||
/*
|
||||
* Device defaults to promiscuous mode for backwards
|
||||
* compatibility. Turn it off if possible.
|
||||
|
@ -347,12 +347,6 @@ vtscsi_attach(device_t dev)
|
||||
device_printf(dev, "cannot allocate taskqueue\n");
|
||||
goto fail;
|
||||
}
|
||||
error = taskqueue_start_threads(&sc->vtscsi_tq, 1, PI_DISK, "%s taskq",
|
||||
device_get_nameunit(dev));
|
||||
if (error) {
|
||||
device_printf(dev, "cannot start taskqueue threads\n");
|
||||
goto fail;
|
||||
}
|
||||
|
||||
error = virtio_setup_intr(dev, INTR_TYPE_CAM);
|
||||
if (error) {
|
||||
@ -360,6 +354,9 @@ vtscsi_attach(device_t dev)
|
||||
goto fail;
|
||||
}
|
||||
|
||||
taskqueue_start_threads(&sc->vtscsi_tq, 1, PI_DISK, "%s taskq",
|
||||
device_get_nameunit(dev));
|
||||
|
||||
vtscsi_enable_vqs_intr(sc);
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user