]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
virtio: rng: allow tasks to be killed that are waiting for rng input
authorAmit Shah <amit.shah@redhat.com>
Mon, 28 May 2012 06:48:40 +0000 (12:18 +0530)
committerStephen Rothwell <sfr@canb.auug.org.au>
Sat, 21 Jul 2012 22:28:12 +0000 (08:28 +1000)
Use wait_for_completion_killable() instead of wait_for_completion() when
waiting for the host to send us entropy.  Without this,

  # cat /dev/hwrng
  ^C

just hangs.

Signed-off-by: Amit Shah <amit.shah@redhat.com>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
drivers/char/hw_random/virtio-rng.c

index 723725bbb96b774036f9fee05562b207d1cecfc0..c8a935034218e4a77695accda05c9ab771ff0ca0 100644 (file)
@@ -55,6 +55,7 @@ static void register_buffer(u8 *buf, size_t size)
 
 static int virtio_read(struct hwrng *rng, void *buf, size_t size, bool wait)
 {
+       int ret;
 
        if (!busy) {
                busy = true;
@@ -65,7 +66,9 @@ static int virtio_read(struct hwrng *rng, void *buf, size_t size, bool wait)
        if (!wait)
                return 0;
 
-       wait_for_completion(&have_data);
+       ret = wait_for_completion_killable(&have_data);
+       if (ret < 0)
+               return ret;
 
        busy = false;