From 2c78dca69cb2ab53460d42c206ce5f31b695b3f6 Mon Sep 17 00:00:00 2001 From: Christopher Haster Date: Thu, 7 Jul 2016 22:51:31 -0500 Subject: [PATCH 1/3] Fixed typo in incr/decr function Result of last minute change, interestingly only emits a warning in gcc. --- hal/common/critical.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/hal/common/critical.c b/hal/common/critical.c index f4ec8eb2f1d..5a574e4cf5c 100644 --- a/hal/common/critical.c +++ b/hal/common/critical.c @@ -270,7 +270,7 @@ uint32_t core_util_atomic_incr_u32(uint32_t *valuePtr, uint32_t delta) } void *core_util_atomic_incr_ptr(void **valuePtr, ptrdiff_t delta) { - return core_util_atomic_incr((uintptr_t)valuePtr, (uintptr_t)delta); + return core_util_atomic_incr_u32((uintptr_t)valuePtr, (uintptr_t)delta); } @@ -305,8 +305,9 @@ uint32_t core_util_atomic_decr_u32(uint32_t *valuePtr, uint32_t delta) } void *core_util_atomic_decr_ptr(void **valuePtr, ptrdiff_t delta) { - return core_util_atomic_decr((uintptr_t)valuePtr, (uintptr_t)delta); + return core_util_atomic_decr_u32((uintptr_t)valuePtr, (uintptr_t)delta); } + #endif From 70013d03b691d7d9e856c163ea8049f965e9a468 Mon Sep 17 00:00:00 2001 From: Christopher Haster Date: Thu, 7 Jul 2016 23:50:04 -0500 Subject: [PATCH 2/3] Fixed casts around calls to atomic u32 functions - uint32_t -> void * - void ** -> uint32_t * For whatever reason `uintptr_t` and `uint32_t` expand to incompatible types `unsigned int` and `unsigned long int`. This is implicitely casted when passed by value, but causes a warning in gcc and error in iar when passed by pointer. This issue is not present on x86_32 gcc --- hal/common/critical.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/hal/common/critical.c b/hal/common/critical.c index 5a574e4cf5c..fc952f63c9d 100644 --- a/hal/common/critical.c +++ b/hal/common/critical.c @@ -234,9 +234,9 @@ bool core_util_atomic_cas_u32(uint32_t *ptr, uint32_t *expectedCurrentValue, uin bool core_util_atomic_cas_ptr(void **ptr, void **expectedCurrentValue, void *desiredValue) { return core_util_atomic_cas_u32( - (uintptr_t *)ptr, - (uintptr_t *)expectedCurrentValue, - (uintptr_t)desiredValue); + (uint32_t *)ptr, + (uint32_t *)expectedCurrentValue, + (uint32_t)desiredValue); } uint8_t core_util_atomic_incr_u8(uint8_t *valuePtr, uint8_t delta) @@ -270,7 +270,7 @@ uint32_t core_util_atomic_incr_u32(uint32_t *valuePtr, uint32_t delta) } void *core_util_atomic_incr_ptr(void **valuePtr, ptrdiff_t delta) { - return core_util_atomic_incr_u32((uintptr_t)valuePtr, (uintptr_t)delta); + return (void *)core_util_atomic_incr_u32((uint32_t *)valuePtr, (uint32_t)delta); } @@ -305,7 +305,7 @@ uint32_t core_util_atomic_decr_u32(uint32_t *valuePtr, uint32_t delta) } void *core_util_atomic_decr_ptr(void **valuePtr, ptrdiff_t delta) { - return core_util_atomic_decr_u32((uintptr_t)valuePtr, (uintptr_t)delta); + return (void *)core_util_atomic_decr_u32((uint32_t *)valuePtr, (uint32_t)delta); } From 98d55e71d8b81f078b43aa53d76352bc129940a8 Mon Sep 17 00:00:00 2001 From: Christopher Haster Date: Fri, 8 Jul 2016 14:50:03 -0500 Subject: [PATCH 3/3] Moved core_util_atomic_*_ptr functions out of cortex switch --- hal/common/critical.c | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/hal/common/critical.c b/hal/common/critical.c index fc952f63c9d..0afe0d5ad73 100644 --- a/hal/common/critical.c +++ b/hal/common/critical.c @@ -232,12 +232,6 @@ bool core_util_atomic_cas_u32(uint32_t *ptr, uint32_t *expectedCurrentValue, uin return success; } -bool core_util_atomic_cas_ptr(void **ptr, void **expectedCurrentValue, void *desiredValue) { - return core_util_atomic_cas_u32( - (uint32_t *)ptr, - (uint32_t *)expectedCurrentValue, - (uint32_t)desiredValue); -} uint8_t core_util_atomic_incr_u8(uint8_t *valuePtr, uint8_t delta) { @@ -269,10 +263,6 @@ uint32_t core_util_atomic_incr_u32(uint32_t *valuePtr, uint32_t delta) return newValue; } -void *core_util_atomic_incr_ptr(void **valuePtr, ptrdiff_t delta) { - return (void *)core_util_atomic_incr_u32((uint32_t *)valuePtr, (uint32_t)delta); -} - uint8_t core_util_atomic_decr_u8(uint8_t *valuePtr, uint8_t delta) { @@ -304,10 +294,21 @@ uint32_t core_util_atomic_decr_u32(uint32_t *valuePtr, uint32_t delta) return newValue; } -void *core_util_atomic_decr_ptr(void **valuePtr, ptrdiff_t delta) { - return (void *)core_util_atomic_decr_u32((uint32_t *)valuePtr, (uint32_t)delta); +#endif + + +bool core_util_atomic_cas_ptr(void **ptr, void **expectedCurrentValue, void *desiredValue) { + return core_util_atomic_cas_u32( + (uint32_t *)ptr, + (uint32_t *)expectedCurrentValue, + (uint32_t)desiredValue); } +void *core_util_atomic_incr_ptr(void **valuePtr, ptrdiff_t delta) { + return (void *)core_util_atomic_incr_u32((uint32_t *)valuePtr, (uint32_t)delta); +} -#endif +void *core_util_atomic_decr_ptr(void **valuePtr, ptrdiff_t delta) { + return (void *)core_util_atomic_decr_u32((uint32_t *)valuePtr, (uint32_t)delta); +}