Jason Wang
2021-Aug-03 08:09 UTC
[PATCH v10 10/17] virtio: Handle device reset failure in register_virtio_device()
? 2021/7/29 ??3:34, Xie Yongji ??:> The device reset may fail in virtio-vdpa case now, so add checks to > its return value and fail the register_virtio_device().So the reset() would be called by the driver during remove as well, or is it sufficient to deal only with the reset during probe? Thanks> > Signed-off-by: Xie Yongji <xieyongji at 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);