From: Jim Quigley Date: Fri, 27 Oct 2017 11:49:00 +0000 (+0100) Subject: virtio:rng: Virtio RNG devices need to be re-registered after suspend/resume X-Git-Tag: v4.1.12-117.0_27200813_3~118 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=ade05880bb358351c07af3a795b5f8b01db24d38;p=users%2Fjedix%2Flinux-maple.git virtio:rng: Virtio RNG devices need to be re-registered after suspend/resume The patch for commit: 5c06273401f2eb7b290cadbae18ee00f8f65e893 Author: Amit Shah 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() instead. Orabug: 26989940 Reviewed-by: Liam Merwick Signed-off-by: Jim Quigley --- diff --git a/drivers/char/hw_random/virtio-rng.c b/drivers/char/hw_random/virtio-rng.c index 3fa2f8a009b3..b89df66ea1ae 100644 --- a/drivers/char/hw_random/virtio-rng.c +++ b/drivers/char/hw_random/virtio-rng.c @@ -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