On Sun, Sep 27, 2026 at 10:55:59AM +0200, Francesco Valla wrote:
> Hi Tanmay,
>
> On Thu, Sep 24, 2026 at 01:59:02PM -0700, Tanmay Shah wrote:
> > The virtio device is removed when the remoteproc device is removed. The
> > driver should issue reset on the virtio device so the remote can do
> > corresponding cleanup.
> >
>
> Shouldn't be the driver, and not the transport, the one that calls
> virtio_reset_device()?
Function rproc_remove_virtio_dev() calls unregister_virtio_device(), which calls
device_unregister(), which should end up calling virtio_bus.remove(), in this
case virtio_dev_remove(). virtio_dev_remove() calls drv->remove(). If we take
the RPMSG driver, rpmsg_remove() calls virtio_reset_device(), so explicitly
resetting devices as part of rproc_remove_virtio_dev() is not needed.
Tanmay, have you observed a scenario where the above isn't working?
>
> > Fixes: 7a186941626d ("remoteproc: remove the single rpmsg vdev limitation")
> > Signed-off-by: Tanmay Shah <[email protected]>
> > ---
> > drivers/remoteproc/remoteproc_virtio.c | 2 ++
> > 1 file changed, 2 insertions(+)
> >
> > diff --git a/drivers/remoteproc/remoteproc_virtio.c
> > b/drivers/remoteproc/remoteproc_virtio.c
> > index d5e9ff045a28..1cb0ee0ea656 100644
> > --- a/drivers/remoteproc/remoteproc_virtio.c
> > +++ b/drivers/remoteproc/remoteproc_virtio.c
> > @@ -469,6 +469,8 @@ static int rproc_remove_virtio_dev(struct device *dev,
> > void *data)
> > {
> > struct virtio_device *vdev = dev_to_virtio(dev);
> >
> > + virtio_reset_device(vdev);
> > +
> > unregister_virtio_device(vdev);
> > return 0;
> > }
> >
> > base-commit: 5f639b3018c0026a5341949724b4b921cf3a3d5d
> > --
> > 2.43.0
> >