Re: [PATCH 1/1] virtio/s390: implement PM operations for virtio_ccw

2017-12-07 Thread David Hildenbrand
On 07.12.2017 15:11, Christian Borntraeger wrote:
> 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 
> Signed-off-by: Christian Borntraeger 
> ---
>  drivers/s390/virtio/virtio_ccw.c | 25 +
>  1 file changed, 25 insertions(+)
> 
> diff --git a/drivers/s390/virtio/virtio_ccw.c 
> b/drivers/s390/virtio/virtio_ccw.c
> index b18fe201..330b3fa 100644
> --- a/drivers/s390/virtio/virtio_ccw.c
> +++ b/drivers/s390/virtio/virtio_ccw.c
> @@ -1300,6 +1300,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;
> @@ -1312,6 +1315,25 @@ static struct ccw_device_id virtio_ids[] = {
>   {},
>  };
>  
> +static int virtio_ccw_freeze(struct ccw_device *cdev)
> +{
> + struct virtio_ccw_device *vcdev = dev_get_drvdata(>dev);
> +
> + return virtio_device_freeze(>vdev);
> +}
> +
> +static int virtio_ccw_restore(struct ccw_device *cdev)
> +{
> + struct virtio_ccw_device *vcdev = dev_get_drvdata(>dev);
> + int ret;
> +
> + ret = virtio_ccw_set_transport_rev(vcdev);
> + if (ret)
> + return ret;
> +
> + return virtio_device_restore(>vdev);
> +}
> +
>  static struct ccw_driver virtio_ccw_driver = {
>   .driver = {
>   .owner = THIS_MODULE,
> @@ -1324,6 +1346,9 @@ static struct ccw_driver virtio_ccw_driver = {
>   .set_online = virtio_ccw_online,
>   .notify = virtio_ccw_cio_notify,
>   .int_class = IRQIO_VIR,
> + .freeze = virtio_ccw_freeze,
> + .thaw = virtio_ccw_restore,
> + .restore = virtio_ccw_restore,
>  };
>  
>  static int __init pure_hex(char **cp, unsigned int *val, int min_digit,
> 

Really neat, hope we haven't forgotten to reinitialize anything. (guess
if it works, we should be 99.9% fine)

Reviewed-by: David Hildenbrand 

-- 

Thanks,

David / dhildenb
___
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization


Re: [PATCH 1/1] virtio/s390: implement PM operations for virtio_ccw

2017-12-07 Thread Cornelia Huck
On Thu,  7 Dec 2017 15:11:02 +0100
Christian Borntraeger  wrote:

> 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 
> Signed-off-by: Christian Borntraeger 
> ---
>  drivers/s390/virtio/virtio_ccw.c | 25 +
>  1 file changed, 25 insertions(+)

Less work than I had expected :)

This looks complete: The only thing we do in our online function not
directly triggered by registering the virtio device is setting the
revision.

Will apply, but would not mind some R-bs/acks.
___
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization


[PATCH 1/1] virtio/s390: implement PM operations for virtio_ccw

2017-12-07 Thread Christian Borntraeger
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 
Signed-off-by: Christian Borntraeger 
---
 drivers/s390/virtio/virtio_ccw.c | 25 +
 1 file changed, 25 insertions(+)

diff --git a/drivers/s390/virtio/virtio_ccw.c b/drivers/s390/virtio/virtio_ccw.c
index b18fe201..330b3fa 100644
--- a/drivers/s390/virtio/virtio_ccw.c
+++ b/drivers/s390/virtio/virtio_ccw.c
@@ -1300,6 +1300,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;
@@ -1312,6 +1315,25 @@ static struct ccw_device_id virtio_ids[] = {
{},
 };
 
+static int virtio_ccw_freeze(struct ccw_device *cdev)
+{
+   struct virtio_ccw_device *vcdev = dev_get_drvdata(>dev);
+
+   return virtio_device_freeze(>vdev);
+}
+
+static int virtio_ccw_restore(struct ccw_device *cdev)
+{
+   struct virtio_ccw_device *vcdev = dev_get_drvdata(>dev);
+   int ret;
+
+   ret = virtio_ccw_set_transport_rev(vcdev);
+   if (ret)
+   return ret;
+
+   return virtio_device_restore(>vdev);
+}
+
 static struct ccw_driver virtio_ccw_driver = {
.driver = {
.owner = THIS_MODULE,
@@ -1324,6 +1346,9 @@ static struct ccw_driver virtio_ccw_driver = {
.set_online = virtio_ccw_online,
.notify = virtio_ccw_cio_notify,
.int_class = IRQIO_VIR,
+   .freeze = virtio_ccw_freeze,
+   .thaw = virtio_ccw_restore,
+   .restore = virtio_ccw_restore,
 };
 
 static int __init pure_hex(char **cp, unsigned int *val, int min_digit,
-- 
2.9.4

___
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization