From 1faea41722adef211322b8041b7e1539767ec80b Mon Sep 17 00:00:00 2001 From: Dariusz Stojaczyk Date: Tue, 3 Oct 2017 20:58:58 +0200 Subject: [PATCH] bdev_virtio: destruct all vdevs on shutdown This patch also resets each device before destructing it. This is urgently required for virtio_pci, as it notifies the QEMU about our shutdown. This patch fixes running subsequent bdev_virtio instances in PCI mode within the same vhost. Change-Id: I2569251362f2aaf058f6e44f068b280244bd38c1 Signed-off-by: Dariusz Stojaczyk Reviewed-on: https://review.gerrithub.io/381201 Tested-by: SPDK Automated Test System Reviewed-by: Jim Harris Reviewed-by: Daniel Verkamp --- lib/bdev/virtio/bdev_virtio.c | 5 +++++ lib/bdev/virtio/rte_virtio/virtio_dev.c | 1 + 2 files changed, 6 insertions(+) diff --git a/lib/bdev/virtio/bdev_virtio.c b/lib/bdev/virtio/bdev_virtio.c index 21f502e63..b5d2bcc25 100644 --- a/lib/bdev/virtio/bdev_virtio.c +++ b/lib/bdev/virtio/bdev_virtio.c @@ -682,6 +682,11 @@ out: static void bdev_virtio_finish(void) { + struct virtio_dev *vdev, *next; + + TAILQ_FOREACH_SAFE(vdev, &g_virtio_driver.attached_ctrlrs, tailq, next) { + virtio_dev_free(vdev); + } } SPDK_LOG_REGISTER_TRACE_FLAG("virtio", SPDK_TRACE_VIRTIO) diff --git a/lib/bdev/virtio/rte_virtio/virtio_dev.c b/lib/bdev/virtio/rte_virtio/virtio_dev.c index 82dbace53..668d3001e 100644 --- a/lib/bdev/virtio/rte_virtio/virtio_dev.c +++ b/lib/bdev/virtio/rte_virtio/virtio_dev.c @@ -304,6 +304,7 @@ virtio_dev_free(struct virtio_dev *dev) { uint32_t vdev_id = dev->id; + vtpci_reset(dev); virtio_free_queues(dev); vtpci_ops(dev)->free_vdev(dev); vtpci_deinit(vdev_id);