summaryrefslogtreecommitdiffstats
path: root/drivers/char/hw_random/atmel-rng.c
diff options
context:
space:
mode:
authorAnton Arapov <anton@redhat.com>2012-06-21 08:44:47 +0200
committerAnton Arapov <anton@redhat.com>2012-06-21 08:44:47 +0200
commit35df99f47c4246df74ed7571c692138b83c3c486 (patch)
tree1f14dd15cf001e590e7f7406c8e594a0003fcff0 /drivers/char/hw_random/atmel-rng.c
parent8a6c6e11d3f0dcecf13668e33f5095b1fe9cb613 (diff)
downloadkernel-uprobes-35df99f47c4246df74ed7571c692138b83c3c486.tar.gz
kernel-uprobes-35df99f47c4246df74ed7571c692138b83c3c486.tar.xz
kernel-uprobes-35df99f47c4246df74ed7571c692138b83c3c486.zip
fedora kernel: 3d47c715a4a94b9d700c9e4ec1fc3a786bfde746v3.4.3-3
Signed-off-by: Anton Arapov <anton@redhat.com>
Diffstat (limited to 'drivers/char/hw_random/atmel-rng.c')
-rw-r--r--drivers/char/hw_random/atmel-rng.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/char/hw_random/atmel-rng.c b/drivers/char/hw_random/atmel-rng.c
index f518b99f53f..6289f0eee24 100644
--- a/drivers/char/hw_random/atmel-rng.c
+++ b/drivers/char/hw_random/atmel-rng.c
@@ -36,6 +36,13 @@ static int atmel_trng_read(struct hwrng *rng, void *buf, size_t max,
/* data ready? */
if (readl(trng->base + TRNG_ODATA) & 1) {
*data = readl(trng->base + TRNG_ODATA);
+ /*
+ ensure data ready is only set again AFTER the next data
+ word is ready in case it got set between checking ISR
+ and reading ODATA, so we don't risk re-reading the
+ same word
+ */
+ readl(trng->base + TRNG_ISR);
return 4;
} else
return 0;