Re: [PATCH] remoteproc: remoteproc_virtio: reset vdev before removing it

From: Mathieu Poirier

Date: Fri Oct 02 2026 - 12:44:40 EST


On Thu, 1 Oct 2026 at 11:18, Shah, Tanmay <tanmays@xxxxxxx> wrote:
>
>
>
> On 10/1/2026 11:50 AM, Mathieu Poirier wrote:
> > 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?
> >
>
> Nope. I didn't send the patch based on any practical scenario. This is
> an old patch that I had used at the time to issue reset on shutdown. I
> missed that the driver is already doing it. Probably my assessment was
> incorrect at the time. I think we should remove this patch.
>

I backed it out.

> >>
> >>> Fixes: 7a186941626d ("remoteproc: remove the single rpmsg vdev limitation")
> >>> Signed-off-by: Tanmay Shah <tanmay.shah@xxxxxxx>
> >>> ---
> >>> 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
> >>>
>