[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Minios-devel] [UNIKRAFT PATCH v4 09/16] include/uk: bitopts.h - remove already existing functions



Some of the functions provided by bitopts.h are already implemented in
unikraft. This patch turns these functions into wrappers around
existing ones.

Signed-off-by: Yuri Volchkov <yuri.volchkov@xxxxxxxxx>
Signed-off-by: Costin Lupu <costin.lupu@xxxxxxxxx>
---
 include/uk/bitops.h | 73 +++++++++------------------------------------
 1 file changed, 14 insertions(+), 59 deletions(-)

diff --git a/include/uk/bitops.h b/include/uk/bitops.h
index e003a43..6095004 100644
--- a/include/uk/bitops.h
+++ b/include/uk/bitops.h
@@ -58,11 +58,11 @@
        (((~0ULL) >> (BITS_PER_LONG_LONG - (h) - 1)) & ((~0ULL) << (l)))
 #define BITS_PER_BYTE  8
 
-#define        hweight8(x)     bitcount((uint8_t)(x))
-#define        hweight16(x)    bitcount16(x)
-#define        hweight32(x)    bitcount32(x)
-#define        hweight64(x)    bitcount64(x)
-#define        hweight_long(x) bitcountl(x)
+#define        hweight8(x)     uk_bitcount((uint8_t)(x))
+#define        hweight16(x)    uk_bitcount16(x)
+#define        hweight32(x)    uk_bitcount32(x)
+#define        hweight64(x)    uk_bitcount64(x)
+#define        hweight_long(x) uk_bitcountl(x)
 
 static inline int
 fls64(uint64_t mask)
@@ -236,79 +236,34 @@ find_next_zero_bit(const unsigned long *addr, unsigned 
long size,
        return (bit);
 }
 
-#define        __set_bit(i, a)                                                 
\
-       atomic_set_long(&((volatile unsigned long *)(a))[BIT_WORD(i)], 
BIT_MASK(i))
-
-#define        set_bit(i, a)                                                   
\
-       atomic_set_long(&((volatile unsigned long *)(a))[BIT_WORD(i)], 
BIT_MASK(i))
-
-#define        __clear_bit(i, a)                                               
\
-       atomic_clear_long(&((volatile unsigned long *)(a))[BIT_WORD(i)], 
BIT_MASK(i))
-
-#define        clear_bit(i, a)                                                 
\
-       atomic_clear_long(&((volatile unsigned long *)(a))[BIT_WORD(i)], 
BIT_MASK(i))
-
-#define        test_bit(i, a)                                                  
\
-       !!(READ_ONCE(((volatile unsigned long *)(a))[BIT_WORD(i)]) & 
BIT_MASK(i))
+#define __set_bit(i, a)        ukarch_set_bit(i, a)
+#define set_bit(i, a)          ukarch_set_bit_sync(i, a)
+#define __clear_bit(i, a)      ukarch_clr_bit(i, a)
+#define clear_bit(i, a)        ukarch_clr_bit_sync(i, a)
+#define test_bit(i, a)         ukarch_test_bit(i, a)
 
 static inline int
 test_and_clear_bit(long bit, volatile unsigned long *var)
 {
-       long val;
-
-       var += BIT_WORD(bit);
-       bit %= BITS_PER_LONG;
-       bit = (1UL << bit);
-       do {
-               val = *var;
-       } while (atomic_cmpset_long(var, val, val & ~bit) == 0);
-
-       return !!(val & bit);
+       return ukarch_test_and_clr_bit_sync(bit, (volatile void *) var);
 }
 
 static inline int
 __test_and_clear_bit(long bit, volatile unsigned long *var)
 {
-       long val;
-
-       var += BIT_WORD(bit);
-       bit %= BITS_PER_LONG;
-       bit = (1UL << bit);
-
-       val = *var;
-       *var &= ~bit;
-
-       return !!(val & bit);
+       return ukarch_test_and_clr_bit(bit, (volatile void *) var);
 }
 
 static inline int
 test_and_set_bit(long bit, volatile unsigned long *var)
 {
-       long val;
-
-       var += BIT_WORD(bit);
-       bit %= BITS_PER_LONG;
-       bit = (1UL << bit);
-       do {
-               val = *var;
-       } while (atomic_cmpset_long(var, val, val | bit) == 0);
-
-       return !!(val & bit);
+       return ukarch_test_and_set_bit_sync(bit, (volatile void *) var);
 }
 
 static inline int
 __test_and_set_bit(long bit, volatile unsigned long *var)
 {
-       long val;
-
-       var += BIT_WORD(bit);
-       bit %= BITS_PER_LONG;
-       bit = (1UL << bit);
-
-       val = *var;
-       *var |= bit;
-
-       return !!(val & bit);
+       return ukarch_test_and_set_bit(bit, (volatile void *) var);
 }
 
 enum {
-- 
2.18.0


_______________________________________________
Minios-devel mailing list
Minios-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/minios-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.