Skip to content

Commit

Permalink
virtio/s390: implement PM operations for virtio_ccw
Browse files Browse the repository at this point in the history
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: Thomas Huth <[email protected]>
Signed-off-by: Christian Borntraeger <[email protected]>
Message-Id: <[email protected]>
Reviewed-by: David Hildenbrand <[email protected]>
[CH: merged <[email protected]> to fix
!CONFIG_PM configs]
Signed-off-by: Cornelia Huck <[email protected]>
Signed-off-by: Michael S. Tsirkin <[email protected]>
  • Loading branch information
borntraeger authored and mstsirkin committed Feb 14, 2018
1 parent 26d9983 commit fa08a3b
Showing 1 changed file with 29 additions and 0 deletions.
29 changes: 29 additions & 0 deletions drivers/s390/virtio/virtio_ccw.c
Original file line number Diff line number Diff line change
Expand Up @@ -1297,6 +1297,9 @@ static int virtio_ccw_cio_notify(struct ccw_device *cdev, int event)
vcdev->device_lost = true;
rc = NOTIFY_DONE;
break;
case CIO_OPER:
rc = NOTIFY_OK;
break;
default:
rc = NOTIFY_DONE;
break;
Expand All @@ -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 = {
.driver = {
.owner = THIS_MODULE,
Expand All @@ -1321,6 +1345,11 @@ static struct ccw_driver virtio_ccw_driver = {
.set_online = virtio_ccw_online,
.notify = virtio_ccw_cio_notify,
.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,
Expand Down

0 comments on commit fa08a3b

Please sign in to comment.