]> Pileus Git - ~andy/linux/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)
committerRusty Russell <rusty@rustcorp.com.au>
Mon, 30 Jul 2012 04:00:49 +0000 (13:30 +0930)
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;