diff options
author | Anton Arapov <anton@redhat.com> | 2012-06-21 08:44:47 +0200 |
---|---|---|
committer | Anton Arapov <anton@redhat.com> | 2012-06-21 08:44:47 +0200 |
commit | 35df99f47c4246df74ed7571c692138b83c3c486 (patch) | |
tree | 1f14dd15cf001e590e7f7406c8e594a0003fcff0 /drivers/char/hw_random/atmel-rng.c | |
parent | 8a6c6e11d3f0dcecf13668e33f5095b1fe9cb613 (diff) | |
download | kernel-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.c | 7 |
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; |