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

Reply via email to