Re: [RFC PATCH] virtio: do not reset stateful devices on resume
From: Jason Wang <hidden>
Date: 2021-12-16 02:55:42
Also in:
lkml
On Thu, Dec 16, 2021 at 1:27 AM Mikhail Golubev [off-list ref] wrote:
The 12/14/2021 18:26, Michael S. Tsirkin wrote:quoted
On Tue, Dec 14, 2021 at 05:33:05PM +0100, Mikhail Golubev wrote:quoted
From: Anton Yakovlev <Anton.Yakovlev@opensynergy.com> We assume that stateful devices can maintain their state while suspended. And for this reason they don't have a freeze callback. If such a device is reset during resume, the device state/context will be lost on the device side. And the virtual device will stop working. Signed-off-by: Anton Yakovlev <Anton.Yakovlev@opensynergy.com> Signed-off-by: Mikhail Golubev <redacted>A bit more specific? Which configs does this patch fix?We had encountered an issue related to 'stateful' GPU 3d (virglrenderer) and video (gstreamer) devices.
Adding Gerd and Stefan. I wonder if we suffer from a similar issue with virtio-fs. Thanks
BR, Mikhailquoted
quoted
--- drivers/virtio/virtio.c | 8 ++++++++ 1 file changed, 8 insertions(+)diff --git a/drivers/virtio/virtio.c b/drivers/virtio/virtio.c index 236081afe9a2..defa15b56eb8 100644 --- a/drivers/virtio/virtio.c +++ b/drivers/virtio/virtio.c@@ -472,6 +472,13 @@ int virtio_device_restore(struct virtio_device *dev) struct virtio_driver *drv = drv_to_virtio(dev->dev.driver); int ret; + /* Short path for stateful devices. Here we assume that if the device + * does not have a freeze callback, its state was not changed when + * suspended. + */ + if (drv && !drv->freeze) + goto on_config_enable; + /* We always start by resetting the device, in case a previous * driver messed it up. */ dev->config->reset(dev);@@ -503,6 +510,7 @@ int virtio_device_restore(struct virtio_device *dev) /* Finally, tell the device we're all set */ virtio_add_status(dev, VIRTIO_CONFIG_S_DRIVER_OK); +on_config_enable: virtio_config_enable(dev); return 0; --2.34.1 ----
_______________________________________________ Virtualization mailing list Virtualization@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/virtualization