On 2024/7/18 13:40, Hongzhen Luo wrote:
Add bitops header for subsequent bloom filter implementation. This is borrowed from a part of the previous patch. See: https://lore.kernel.org/all/20230802091750.74181-3-jeffl...@linux.alibaba.com/. Signed-off-by: Hongzhen Luo <hongz...@linux.alibaba.com> --- include/erofs/bitops.h | 42 ++++++++++++++++++++++++++++++++++++++++++ lib/Makefile.am | 1 + 2 files changed, 43 insertions(+) create mode 100644 include/erofs/bitops.h diff --git a/include/erofs/bitops.h b/include/erofs/bitops.h new file mode 100644 index 0000000..ef60d6e --- /dev/null +++ b/include/erofs/bitops.h @@ -0,0 +1,42 @@ +/* SPDX-License-Identifier: GPL-2.0+ OR Apache-2.0 */ +#ifndef __EROFS_BITOPS_H +#define __EROFS_BITOPS_H + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include "defs.h" + +struct bitmap { + unsigned long size; /* size of bitmap in bits */ + unsigned long *map; +};
What is the meaning of this structure, please just fold it into the original structure.
+ +static inline void set_bit(int nr, volatile unsigned long *addr)
Since it's not atomic, please use __set_bit instead.
+{ + unsigned long mask = BIT_MASK(nr); + unsigned long *p = ((unsigned long *)addr) + BIT_WORD(nr); + + *p |= mask; +} + +static inline void clear_bit(int nr, volatile unsigned long *addr)
please use __clear_bit instead.
+{ + unsigned long mask = BIT_MASK(nr); + unsigned long *p = ((unsigned long *)addr) + BIT_WORD(nr); + + *p &= ~mask; +} + +static inline int test_bit(int nr, const volatile unsigned long *addr)
please call it __test_bit instead, or use READ_ONCE to wrap it up. Thanks, Gao Xiang