X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=libcfs%2Finclude%2Flibcfs%2Fbitmap.h;h=c74726bcc21f77f751206a313212a426b0c6059a;hb=ed2430bd5a8b1b61ce9ae5c4a321598dee728199;hp=5436f3c2b12e8e33eb1dfc39a6d9a8e86b0127c1;hpb=66523bca8a821ebba16f25c3b3a1ce64b906e443;p=fs%2Flustre-release.git diff --git a/libcfs/include/libcfs/bitmap.h b/libcfs/include/libcfs/bitmap.h index 5436f3c..c74726b 100644 --- a/libcfs/include/libcfs/bitmap.h +++ b/libcfs/include/libcfs/bitmap.h @@ -26,6 +26,8 @@ /* * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. + * + * Copyright (c) 2012, Intel Corporation. */ /* * This file is part of Lustre, http://www.lustre.org/ @@ -34,10 +36,17 @@ #ifndef _LIBCFS_BITMAP_H_ #define _LIBCFS_BITMAP_H_ +#if !defined(__linux__) || !defined(__KERNEL__) +#define DIV_ROUND_UP(n, d) (((n) + (d) - 1) / (d)) +#define BITS_TO_LONGS(nr) DIV_ROUND_UP(nr, 8 * sizeof(long)) + +#define DECLARE_BITMAP(name, bits) \ + unsigned long name[BITS_TO_LONGS(bits)] +#endif typedef struct { - int size; - unsigned long data[0]; + unsigned int size; + unsigned long data[0]; } cfs_bitmap_t; #define CFS_BITMAP_SIZE(nbits) \ @@ -46,54 +55,54 @@ typedef struct { static inline cfs_bitmap_t *CFS_ALLOCATE_BITMAP(int size) { - cfs_bitmap_t *ptr; + cfs_bitmap_t *ptr; - OBD_ALLOC(ptr, CFS_BITMAP_SIZE(size)); - if (ptr == NULL) - RETURN(ptr); + LIBCFS_ALLOC(ptr, CFS_BITMAP_SIZE(size)); + if (ptr == NULL) + RETURN(ptr); - ptr->size = size; + ptr->size = size; - RETURN (ptr); + RETURN(ptr); } -#define CFS_FREE_BITMAP(ptr) OBD_FREE(ptr, CFS_BITMAP_SIZE(ptr->size)) +#define CFS_FREE_BITMAP(ptr) LIBCFS_FREE(ptr, CFS_BITMAP_SIZE(ptr->size)) static inline void cfs_bitmap_set(cfs_bitmap_t *bitmap, int nbit) { - cfs_set_bit(nbit, bitmap->data); + set_bit(nbit, bitmap->data); } static inline void cfs_bitmap_clear(cfs_bitmap_t *bitmap, int nbit) { - cfs_test_and_clear_bit(nbit, bitmap->data); + test_and_clear_bit(nbit, bitmap->data); } static inline int cfs_bitmap_check(cfs_bitmap_t *bitmap, int nbit) { - return cfs_test_bit(nbit, bitmap->data); + return test_bit(nbit, bitmap->data); } static inline int cfs_bitmap_test_and_clear(cfs_bitmap_t *bitmap, int nbit) { - return cfs_test_and_clear_bit(nbit, bitmap->data); + return test_and_clear_bit(nbit, bitmap->data); } /* return 0 is bitmap has none set bits */ static inline int cfs_bitmap_check_empty(cfs_bitmap_t *bitmap) { - return cfs_find_first_bit(bitmap->data, bitmap->size) == bitmap->size; + return find_first_bit(bitmap->data, bitmap->size) == bitmap->size; } static inline void cfs_bitmap_copy(cfs_bitmap_t *new, cfs_bitmap_t *old) { - int newsize; + size_t newsize; LASSERT(new->size >= old->size); newsize = new->size; @@ -101,9 +110,9 @@ void cfs_bitmap_copy(cfs_bitmap_t *new, cfs_bitmap_t *old) new->size = newsize; } -#define cfs_foreach_bit(bitmap, pos) \ - for((pos)=cfs_find_first_bit((bitmap)->data, bitmap->size); \ - (pos) < (bitmap)->size; \ - (pos) = cfs_find_next_bit((bitmap)->data, (bitmap)->size, (pos)+1)) +#define cfs_foreach_bit(bitmap, pos) \ + for ((pos) = find_first_bit((bitmap)->data, bitmap->size); \ + (pos) < (bitmap)->size; \ + (pos) = find_next_bit((bitmap)->data, (bitmap)->size, (pos) + 1)) #endif