]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
hwrng: virtio - Virtio RNG devices need to be re-registered after suspend/resume
authorJim Quigley <Jim.Quigley@oracle.com>
Fri, 3 Nov 2017 09:57:21 +0000 (09:57 +0000)
committerHerbert Xu <herbert@gondor.apana.org.au>
Mon, 6 Nov 2017 06:45:06 +0000 (14:45 +0800)
The patch for

commit: 5c06273401f2eb7b290cadbae18ee00f8f65e893
Author: Amit Shah <amit.shah@redhat.com>
Date:   Sun Jul 27 07:34:01 2014 +0930

    virtio: rng: delay hwrng_register() till driver is ready

moved the call to hwrng_register() out of the probe routine into the scan
routine. We need to call hwrng_register() after a suspend/restore cycle
to re-register the device, but the scan function is not invoked for the
restore. Add the call to hwrng_register() to virtio_restore().

Reviewed-by: Liam Merwick <Liam.Merwick@oracle.com>
Signed-off-by: Jim Quigley <Jim.Quigley@oracle.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
drivers/char/hw_random/virtio-rng.c

index 3fa2f8a009b3787ae3dd59953928dcc7658aa300..b89df66ea1aefd4659c50258ef28bb970eb45db7 100644 (file)
@@ -184,7 +184,26 @@ static int virtrng_freeze(struct virtio_device *vdev)
 
 static int virtrng_restore(struct virtio_device *vdev)
 {
-       return probe_common(vdev);
+       int err;
+
+       err = probe_common(vdev);
+       if (!err) {
+               struct virtrng_info *vi = vdev->priv;
+
+               /*
+                * Set hwrng_removed to ensure that virtio_read()
+                * does not block waiting for data before the
+                * registration is complete.
+                */
+               vi->hwrng_removed = true;
+               err = hwrng_register(&vi->hwrng);
+               if (!err) {
+                       vi->hwrng_register_done = true;
+                       vi->hwrng_removed = false;
+               }
+       }
+
+       return err;
 }
 #endif