|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Minios-devel] [UNIKRAFT PATCH 2/4] include/uk: fix test_bit atomicity
ukarch_test_bit_sync does not make sense. A barrier() call is not a
memory barrier as was said in the comment. Even if it it was, it would
not make ukarch_test_bit_sync atomic. In fact this "barrier()" call is
needed in ukarch_test_bit, and does not help ukarch_test_bit_sync to
become a "sync" version.
This commit merges these two function together, and adds a missing
uk_test_bit into bitops.h.
Signed-off-by: Yuri Volchkov <yuri.volchkov@xxxxxxxxx>
---
include/uk/arch/atomic.h | 14 +++-----------
include/uk/bitops.h | 1 +
2 files changed, 4 insertions(+), 11 deletions(-)
diff --git a/include/uk/arch/atomic.h b/include/uk/arch/atomic.h
index 0964e14..e6444c0 100644
--- a/include/uk/arch/atomic.h
+++ b/include/uk/arch/atomic.h
@@ -127,8 +127,10 @@ static inline int ukarch_test_bit(unsigned int nr,
const volatile unsigned long *byte)
{
const volatile __u8 *ptr = (const __u8 *)byte;
+ int ret = ((1 << (nr & 7)) & (ptr[nr >> 3])) != 0;
- return ((1 << (nr & 7)) & (ptr[nr >> 3])) != 0;
+ barrier();
+ return ret;
}
/**
@@ -188,16 +190,6 @@ static inline void ukarch_clr_bit_sync(unsigned int nr,
volatile void *byte)
ukarch_test_and_clr_bit_sync(nr, byte);
}
-/* As test_bit, but with a following memory barrier. */
-static inline int ukarch_test_bit_sync(unsigned int nr, volatile void *byte)
-{
- int result;
-
- result = ukarch_test_bit(nr, byte);
- barrier();
- return result;
-}
-
#ifdef __cplusplus
}
#endif
diff --git a/include/uk/bitops.h b/include/uk/bitops.h
index e004fdf..5a28410 100644
--- a/include/uk/bitops.h
+++ b/include/uk/bitops.h
@@ -250,6 +250,7 @@ uk_find_next_zero_bit(const unsigned long *addr, unsigned
long size,
#define uk_set_bit(i, a) ukarch_set_bit_sync(i, a)
#define __uk_clear_bit(i, a) ukarch_clr_bit(i, a)
#define uk_clear_bit(i, a) ukarch_clr_bit_sync(i, a)
+#define uk_test_bit(i, a) ukarch_test_bit(i, a)
static inline int
uk_test_and_clear_bit(long bit, volatile unsigned long *var)
--
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 |