Commit 76f0d870 authored by Philip Chen's avatar Philip Chen Committed by Michael S. Tsirkin
Browse files

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: default avatarPhilip Chen <philipchen@chromium.org>
Message-Id: <20240815004617.2325269-1-philipchen@chromium.org>
Signed-off-by: default avatarMichael S. Tsirkin <mst@redhat.com>
parent 35025963
Loading
Loading
Loading
Loading
+24 −0
Original line number Diff line number Diff line
@@ -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);