Thread (1 message) 1 message, 1 author, 2021-12-16

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,
Mikhail
quoted
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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help