[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Minios-devel] [UNIKRAFT PATCH 1/4] include/uk: do not cast away volatile in atomic.h
Many functions in include/uk/arch/atomic.h accept a volatile argument and then cast it to something like "__u8 *". In many cases it is ok, __atomic_*() is called inside the function. But in other cases, this memory access is a subject to compiler optimization, and may lead to an unexpected behavior. Signed-off-by: Yuri Volchkov <yuri.volchkov@xxxxxxxxx> --- include/uk/arch/atomic.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/include/uk/arch/atomic.h b/include/uk/arch/atomic.h index d4abeb7..0964e14 100644 --- a/include/uk/arch/atomic.h +++ b/include/uk/arch/atomic.h @@ -96,7 +96,7 @@ extern "C" { */ static inline int ukarch_test_and_clr_bit(unsigned int nr, volatile void *byte) { - __u8 *addr = ((__u8 *)byte) + (nr >> 3); + volatile __u8 *addr = ((__u8 *)byte) + (nr >> 3); __u8 bit = 1 << (nr & 7); __u8 orig; @@ -111,7 +111,7 @@ static inline int ukarch_test_and_clr_bit(unsigned int nr, volatile void *byte) */ static inline int ukarch_test_and_set_bit(unsigned int nr, volatile void *byte) { - __u8 *addr = ((__u8 *)byte) + (nr >> 3); + volatile __u8 *addr = ((__u8 *)byte) + (nr >> 3); __u8 bit = 1 << (nr & 7); __u8 orig; @@ -126,7 +126,7 @@ static inline int ukarch_test_and_set_bit(unsigned int nr, volatile void *byte) static inline int ukarch_test_bit(unsigned int nr, const volatile unsigned long *byte) { - const __u8 *ptr = (const __u8 *)byte; + const volatile __u8 *ptr = (const __u8 *)byte; return ((1 << (nr & 7)) & (ptr[nr >> 3])) != 0; } @@ -154,7 +154,7 @@ static inline void ukarch_clr_bit(unsigned int nr, static inline int ukarch_test_and_clr_bit_sync(unsigned int nr, volatile void *byte) { - __u8 *addr = ((__u8 *)byte) + (nr >> 3); + volatile __u8 *addr = ((__u8 *)byte) + (nr >> 3); __u8 bit = 1 << (nr & 7); __u8 orig; @@ -167,7 +167,7 @@ static inline int ukarch_test_and_clr_bit_sync(unsigned int nr, static inline int ukarch_test_and_set_bit_sync(unsigned int nr, volatile void *byte) { - __u8 *addr = ((__u8 *)byte) + (nr >> 3); + volatile __u8 *addr = ((__u8 *)byte) + (nr >> 3); __u8 bit = 1 << (nr & 7); __u8 orig; -- 2.19.0 _______________________________________________ Minios-devel mailing list Minios-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/minios-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |