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

Reply via email to