The device reset may fail in virtio-vdpa case now, so add checks to
its return value and fail the register_virtio_device().

Signed-off-by: Xie Yongji <xieyon...@bytedance.com>
---
 drivers/virtio/virtio.c | 15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)

diff --git a/drivers/virtio/virtio.c b/drivers/virtio/virtio.c
index a15beb6b593b..8df75425fb43 100644
--- a/drivers/virtio/virtio.c
+++ b/drivers/virtio/virtio.c
@@ -349,7 +349,9 @@ int register_virtio_device(struct virtio_device *dev)
 
        /* We always start by resetting the device, in case a previous
         * driver messed it up.  This also tests that code path a little. */
-       dev->config->reset(dev);
+       err = dev->config->reset(dev);
+       if (err)
+               goto err_reset;
 
        /* Acknowledge that we've seen the device. */
        virtio_add_status(dev, VIRTIO_CONFIG_S_ACKNOWLEDGE);
@@ -362,10 +364,13 @@ int register_virtio_device(struct virtio_device *dev)
         */
        err = device_add(&dev->dev);
        if (err)
-               ida_simple_remove(&virtio_index_ida, dev->index);
-out:
-       if (err)
-               virtio_add_status(dev, VIRTIO_CONFIG_S_FAILED);
+               goto err_add;
+
+       return 0;
+err_add:
+       virtio_add_status(dev, VIRTIO_CONFIG_S_FAILED);
+err_reset:
+       ida_simple_remove(&virtio_index_ida, dev->index);
        return err;
 }
 EXPORT_SYMBOL_GPL(register_virtio_device);
-- 
2.11.0

_______________________________________________
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu

Reply via email to