hwrng: use reference counts on each struct hwrng.
authorRusty Russell <rusty@rustcorp.com.au>
Mon, 8 Dec 2014 08:50:37 +0000 (16:50 +0800)
committerHerbert Xu <herbert@gondor.apana.org.au>
Mon, 22 Dec 2014 12:02:39 +0000 (23:02 +1100)
commit3a2c0ba5ad00c018c0bef39a2224aca950aa33f2
tree1fbf69fb820c0fa2e6050f8caaecff424c73bd8d
parent1dacb395d68a14825ee48c0843335e3181aea675
hwrng: use reference counts on each struct hwrng.

current_rng holds one reference, and we bump it every time we want
to do a read from it.

This means we only hold the rng_mutex to grab or drop a reference,
so accessing /sys/devices/virtual/misc/hw_random/rng_current doesn't
block on read of /dev/hwrng.

Using a kref is overkill (we're always under the rng_mutex), but
a standard pattern.

This also solves the problem that the hwrng_fillfn thread was
accessing current_rng without a lock, which could change (eg. to NULL)
underneath it.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Signed-off-by: Amos Kong <akong@redhat.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
drivers/char/hw_random/core.c
include/linux/hw_random.h