aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/char/hw_random
diff options
context:
space:
mode:
authorAmit Shah <amit.shah@redhat.com>2012-05-28 02:48:40 -0400
committerRusty Russell <rusty@rustcorp.com.au>2012-07-30 00:00:49 -0400
commitcc8744e12936680478ce82b0f21dbaa272df1447 (patch)
treefd54eea98b57bcf716ac36c9626f5efb4d0e3da6 /drivers/char/hw_random
parentddcc286900732953ac2e950b6ad0f9a4933767fb (diff)
virtio: rng: allow tasks to be killed that are waiting for rng input
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>
Diffstat (limited to 'drivers/char/hw_random')
-rw-r--r--drivers/char/hw_random/virtio-rng.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/char/hw_random/virtio-rng.c b/drivers/char/hw_random/virtio-rng.c
index 723725bbb96b..c8a935034218 100644
--- a/drivers/char/hw_random/virtio-rng.c
+++ b/drivers/char/hw_random/virtio-rng.c
@@ -55,6 +55,7 @@ static void register_buffer(u8 *buf, size_t size)
55 55
56static int virtio_read(struct hwrng *rng, void *buf, size_t size, bool wait) 56static int virtio_read(struct hwrng *rng, void *buf, size_t size, bool wait)
57{ 57{
58 int ret;
58 59
59 if (!busy) { 60 if (!busy) {
60 busy = true; 61 busy = true;
@@ -65,7 +66,9 @@ static int virtio_read(struct hwrng *rng, void *buf, size_t size, bool wait)
65 if (!wait) 66 if (!wait)
66 return 0; 67 return 0;
67 68
68 wait_for_completion(&have_data); 69 ret = wait_for_completion_killable(&have_data);
70 if (ret < 0)
71 return ret;
69 72
70 busy = false; 73 busy = false;
71 74