From: Konstantin Belousov <k...@freebsd.org>

In this case volatile qualifiers enusre that a compiler does not
optimize the accesses out.

Reviewed by:    alc, jhb
Sponsored by:   The FreeBSD Foundation
MFC after:      1 week
Differential revision:  https://reviews.freebsd.org/D13534
---
 cpukit/score/src/kern_tc.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/cpukit/score/src/kern_tc.c b/cpukit/score/src/kern_tc.c
index b17327a2f8..9e6602e478 100644
--- a/cpukit/score/src/kern_tc.c
+++ b/cpukit/score/src/kern_tc.c
@@ -1799,10 +1799,10 @@ pps_fetch(struct pps_fetch_args *fapi, struct pps_state 
*pps)
                        tv.tv_usec = fapi->timeout.tv_nsec / 1000;
                        timo = tvtohz(&tv);
                }
-               aseq = pps->ppsinfo.assert_sequence;
-               cseq = pps->ppsinfo.clear_sequence;
-               while (aseq == pps->ppsinfo.assert_sequence &&
-                   cseq == pps->ppsinfo.clear_sequence) {
+               aseq = atomic_load_int(&pps->ppsinfo.assert_sequence);
+               cseq = atomic_load_int(&pps->ppsinfo.clear_sequence);
+               while (aseq == atomic_load_int(&pps->ppsinfo.assert_sequence) &&
+                   cseq == atomic_load_int(&pps->ppsinfo.clear_sequence)) {
                        if (abi_aware(pps, 1) && pps->driver_mtx != NULL) {
                                if (pps->flags & PPSFLAG_MTX_SPIN) {
                                        err = msleep_spin(pps, pps->driver_mtx,
-- 
2.17.1

_______________________________________________
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

Reply via email to