]> err.no Git - linux-2.6/blobdiff - include/asm-frv/bitops.h
[PATCH] bitops: use non atomic operations for minix_*_bit() and ext2_*_bit()
[linux-2.6] / include / asm-frv / bitops.h
index b664bd5b66635a473abb21691502da08c122e4f6..9c5db5c34c1b341f535d0bd3482888fb1a1801dd 100644 (file)
@@ -209,7 +209,7 @@ static inline int find_next_zero_bit(const void *addr, int size, int offset)
        tmp = *p;
 
 found_first:
-       tmp |= ~0UL >> size;
+       tmp |= ~0UL << size;
 found_middle:
        return result + ffz(tmp);
 }
@@ -228,6 +228,7 @@ found_middle:
                                                        \
        bit ? 33 - bit : bit;                           \
 })
+#define fls64(x)   generic_fls64(x)
 
 /*
  * Every architecture must define this function. It's the fastest
@@ -258,11 +259,11 @@ static inline int sched_find_first_bit(const unsigned long *b)
 #define hweight16(x) generic_hweight16(x)
 #define hweight8(x) generic_hweight8(x)
 
-#define ext2_set_bit(nr, addr)         test_and_set_bit  ((nr) ^ 0x18, (addr))
-#define ext2_clear_bit(nr, addr)       test_and_clear_bit((nr) ^ 0x18, (addr))
+#define ext2_set_bit(nr, addr)         __test_and_set_bit  ((nr) ^ 0x18, (addr))
+#define ext2_clear_bit(nr, addr)       __test_and_clear_bit((nr) ^ 0x18, (addr))
 
-#define ext2_set_bit_atomic(lock,nr,addr)      ext2_set_bit((nr), addr)
-#define ext2_clear_bit_atomic(lock,nr,addr)    ext2_clear_bit((nr), addr)
+#define ext2_set_bit_atomic(lock,nr,addr)      test_and_set_bit  ((nr) ^ 0x18, (addr))
+#define ext2_clear_bit_atomic(lock,nr,addr)    test_and_clear_bit((nr) ^ 0x18, (addr))
 
 static inline int ext2_test_bit(int nr, const volatile void * addr)
 {
@@ -330,9 +331,9 @@ found_middle:
 }
 
 /* Bitmap functions for the minix filesystem.  */
-#define minix_test_and_set_bit(nr,addr)                ext2_set_bit(nr,addr)
-#define minix_set_bit(nr,addr)                 ext2_set_bit(nr,addr)
-#define minix_test_and_clear_bit(nr,addr)      ext2_clear_bit(nr,addr)
+#define minix_test_and_set_bit(nr,addr)                __test_and_set_bit  ((nr) ^ 0x18, (addr))
+#define minix_set_bit(nr,addr)                 __set_bit((nr) ^ 0x18, (addr))
+#define minix_test_and_clear_bit(nr,addr)      __test_and_clear_bit((nr) ^ 0x18, (addr))
 #define minix_test_bit(nr,addr)                        ext2_test_bit(nr,addr)
 #define minix_find_first_zero_bit(addr,size)   ext2_find_first_zero_bit(addr,size)