aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/char/hw_random
diff options
context:
space:
mode:
authorAmos Kong <akong@redhat.com>2014-12-08 03:50:36 -0500
committerHerbert Xu <herbert@gondor.apana.org.au>2014-12-22 07:02:38 -0500
commit1dacb395d68a14825ee48c0843335e3181aea675 (patch)
tree55b22c3c63081c224b168bd09e2dd19eb52d6fa8 /drivers/char/hw_random
parent9372b35e11149c5314f56f939775e67d83057604 (diff)
hwrng: move some code out mutex_lock for avoiding underlying deadlock
In next patch, we use reference counting for each struct hwrng, changing reference count also needs to take mutex_lock. Before releasing the lock, if we try to stop a kthread that waits to take the lock to reduce the referencing count, deadlock will occur. Signed-off-by: Amos Kong <akong@redhat.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'drivers/char/hw_random')
-rw-r--r--drivers/char/hw_random/core.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/drivers/char/hw_random/core.c b/drivers/char/hw_random/core.c
index 2dd3144d69b1..b4c0e873d362 100644
--- a/drivers/char/hw_random/core.c
+++ b/drivers/char/hw_random/core.c
@@ -470,12 +470,12 @@ void hwrng_unregister(struct hwrng *rng)
470 } 470 }
471 } 471 }
472 if (list_empty(&rng_list)) { 472 if (list_empty(&rng_list)) {
473 mutex_unlock(&rng_mutex);
473 unregister_miscdev(); 474 unregister_miscdev();
474 if (hwrng_fill) 475 if (hwrng_fill)
475 kthread_stop(hwrng_fill); 476 kthread_stop(hwrng_fill);
476 } 477 } else
477 478 mutex_unlock(&rng_mutex);
478 mutex_unlock(&rng_mutex);
479} 479}
480EXPORT_SYMBOL_GPL(hwrng_unregister); 480EXPORT_SYMBOL_GPL(hwrng_unregister);
481 481