virtio_pmem: Add freeze/restore callbacks

Add basic freeze/restore PM callbacks to support hibernation (S4):
- On freeze, delete vq and quiesce the device to prepare for
  snapshotting.
- On restore, re-init vq and mark DRIVER_OK.

Signed-off-by: Philip Chen <philipchen@chromium.org>
Message-Id: <20240815004617.2325269-1-philipchen@chromium.org>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
Philip Chen 2024-08-15 00:46:17 +00:00 committed by Michael S. Tsirkin
parent 3502596332
commit 76f0d870e7

View File

@ -143,6 +143,28 @@ static void virtio_pmem_remove(struct virtio_device *vdev)
virtio_reset_device(vdev);
}
static int virtio_pmem_freeze(struct virtio_device *vdev)
{
vdev->config->del_vqs(vdev);
virtio_reset_device(vdev);
return 0;
}
static int virtio_pmem_restore(struct virtio_device *vdev)
{
int ret;
ret = init_vq(vdev->priv);
if (ret) {
dev_err(&vdev->dev, "failed to initialize virtio pmem's vq\n");
return ret;
}
virtio_device_ready(vdev);
return 0;
}
static unsigned int features[] = {
VIRTIO_PMEM_F_SHMEM_REGION,
};
@ -155,6 +177,8 @@ static struct virtio_driver virtio_pmem_driver = {
.validate = virtio_pmem_validate,
.probe = virtio_pmem_probe,
.remove = virtio_pmem_remove,
.freeze = virtio_pmem_freeze,
.restore = virtio_pmem_restore,
};
module_virtio_driver(virtio_pmem_driver);