On 15/03/18 05:56, Udit agarwal wrote:
c/src/lib/libbsp/arm/atsam/startup/getentropy-trng.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/c/src/lib/libbsp/arm/atsam/startup/getentropy-trng.c
b/c/src/lib/libbsp/arm/atsam/startup/getentropy-trng.c
index 11e24dc..b26b6a8 100644
--- a/c/src/lib/libbsp/arm/atsam/startup/getentropy-trng.c
+++ b/c/src/lib/libbsp/arm/atsam/startup/getentropy-trng.c
@@ -17,6 +17,8 @@
#include <string.h>
#include <rtems/sysinit.h>
+static rtems_mutex atsam_trng_reg =
RTEMS_MUTEX_INITIALIZER("atsam_trng_reg");
Is this a register or a mutex?
+
static void atsam_trng_enable(void)
{
PMC_EnablePeripheral(ID_TRNG);
@@ -29,9 +31,12 @@ int getentropy(void *ptr, size_t n)
uint32_t random;
size_t copy;
+ rtems_mutex_lock(&atsam_trng_reg);
while ((TRNG_GetStatus() & TRNG_ISR_DATRDY) == 0) {
/* wait */
}
+
+ rtems_mutex_unlock(&atsam_trng_reg);
Now the status register read is protected by a mutex.
random = TRNG_GetRandData();
Can you ensure that this read is correct in a multi-threaded application
(the status register has the right value during the read)?
/*
@@ -51,6 +56,7 @@ int getentropy(void *ptr, size_t n)
ptr += copy;
}
+ rtems_mutex_destroy(&atsam_trng_reg);
Here you destroy the mutex. What happens if you call getentropy() a
second time?
return 0;
}
--
Sebastian Huber, embedded brains GmbH
Address : Dornierstr. 4, D-82178 Puchheim, Germany
Phone : +49 89 189 47 41-16
Fax : +49 89 189 47 41-09
E-Mail : sebastian.hu...@embedded-brains.de
PGP : Public key available on request.
Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.
_______________________________________________
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel