Commit fa08a3b4 authored by Christian Borntraeger's avatar Christian Borntraeger Committed by Michael S. Tsirkin

virtio/s390: implement PM operations for virtio_ccw

Suspend/Resume to/from disk currently fails. Let us wire
up the necessary callbacks. This is mostly just forwarding
the requests to the virtio drivers. The only thing that
has to be done in virtio_ccw itself is to re-set the
virtio revision.
Suggested-by: default avatarThomas Huth <thuth@redhat.com>
Signed-off-by: default avatarChristian Borntraeger <borntraeger@de.ibm.com>
Message-Id: <20171207141102.70190-2-borntraeger@de.ibm.com>
Reviewed-by: default avatarDavid Hildenbrand <david@redhat.com>
[CH: merged <20171218083706.223836-1-borntraeger@de.ibm.com> to fix
!CONFIG_PM configs]
Signed-off-by: default avatarCornelia Huck <cohuck@redhat.com>
Signed-off-by: default avatarMichael S. Tsirkin <mst@redhat.com>
parent 26d99834
...@@ -1297,6 +1297,9 @@ static int virtio_ccw_cio_notify(struct ccw_device *cdev, int event) ...@@ -1297,6 +1297,9 @@ static int virtio_ccw_cio_notify(struct ccw_device *cdev, int event)
vcdev->device_lost = true; vcdev->device_lost = true;
rc = NOTIFY_DONE; rc = NOTIFY_DONE;
break; break;
case CIO_OPER:
rc = NOTIFY_OK;
break;
default: default:
rc = NOTIFY_DONE; rc = NOTIFY_DONE;
break; break;
...@@ -1309,6 +1312,27 @@ static struct ccw_device_id virtio_ids[] = { ...@@ -1309,6 +1312,27 @@ static struct ccw_device_id virtio_ids[] = {
{}, {},
}; };
#ifdef CONFIG_PM_SLEEP
static int virtio_ccw_freeze(struct ccw_device *cdev)
{
struct virtio_ccw_device *vcdev = dev_get_drvdata(&cdev->dev);
return virtio_device_freeze(&vcdev->vdev);
}
static int virtio_ccw_restore(struct ccw_device *cdev)
{
struct virtio_ccw_device *vcdev = dev_get_drvdata(&cdev->dev);
int ret;
ret = virtio_ccw_set_transport_rev(vcdev);
if (ret)
return ret;
return virtio_device_restore(&vcdev->vdev);
}
#endif
static struct ccw_driver virtio_ccw_driver = { static struct ccw_driver virtio_ccw_driver = {
.driver = { .driver = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
...@@ -1321,6 +1345,11 @@ static struct ccw_driver virtio_ccw_driver = { ...@@ -1321,6 +1345,11 @@ static struct ccw_driver virtio_ccw_driver = {
.set_online = virtio_ccw_online, .set_online = virtio_ccw_online,
.notify = virtio_ccw_cio_notify, .notify = virtio_ccw_cio_notify,
.int_class = IRQIO_VIR, .int_class = IRQIO_VIR,
#ifdef CONFIG_PM_SLEEP
.freeze = virtio_ccw_freeze,
.thaw = virtio_ccw_restore,
.restore = virtio_ccw_restore,
#endif
}; };
static int __init pure_hex(char **cp, unsigned int *val, int min_digit, static int __init pure_hex(char **cp, unsigned int *val, int min_digit,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment