[PATCH kvmtool 6/9] util: Add basic cpumask functions
Alexandru Elisei
alexandru.elisei at arm.com
Mon Nov 15 08:57:02 PST 2021
Add a handful of basic cpumask functions, some of which will be used when
dealing with different PMUs on heterogeneous systems.
Signed-off-by: Alexandru Elisei <alexandru.elisei at arm.com>
---
arm/aarch32/include/asm/kernel.h | 8 ++++++++
arm/aarch64/include/asm/kernel.h | 8 ++++++++
include/linux/bitmap.h | 20 +++++++++++++++++++
include/linux/cpumask.h | 33 ++++++++++++++++++++++++++++++++
include/linux/kernel.h | 2 ++
mips/include/asm/kernel.h | 8 ++++++++
powerpc/include/asm/kernel.h | 8 ++++++++
x86/include/asm/kernel.h | 8 ++++++++
8 files changed, 95 insertions(+)
create mode 100644 arm/aarch32/include/asm/kernel.h
create mode 100644 arm/aarch64/include/asm/kernel.h
create mode 100644 include/linux/bitmap.h
create mode 100644 include/linux/cpumask.h
create mode 100644 mips/include/asm/kernel.h
create mode 100644 powerpc/include/asm/kernel.h
create mode 100644 x86/include/asm/kernel.h
diff --git a/arm/aarch32/include/asm/kernel.h b/arm/aarch32/include/asm/kernel.h
new file mode 100644
index 000000000000..61296094deb1
--- /dev/null
+++ b/arm/aarch32/include/asm/kernel.h
@@ -0,0 +1,8 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+
+#ifndef __ASM_KERNEL_H
+#define __ASM_KERNEL_H
+
+#define NR_CPUS 32
+
+#endif /* __ASM_KERNEL_H */
diff --git a/arm/aarch64/include/asm/kernel.h b/arm/aarch64/include/asm/kernel.h
new file mode 100644
index 000000000000..4ab195fcb89d
--- /dev/null
+++ b/arm/aarch64/include/asm/kernel.h
@@ -0,0 +1,8 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+
+#ifndef __ASM_KERNEL_H
+#define __ASM_KERNEL_H
+
+#define NR_CPUS 512
+
+#endif /* __ASM_KERNEL_H */
diff --git a/include/linux/bitmap.h b/include/linux/bitmap.h
new file mode 100644
index 000000000000..33b24520a576
--- /dev/null
+++ b/include/linux/bitmap.h
@@ -0,0 +1,20 @@
+#ifndef KVM__BITMAP_H
+#define KVM__BITMAP_H
+
+#include <string.h>
+
+#include <linux/bitops.h>
+
+#define DECLARE_BITMAP(name,bits) \
+ unsigned long name[BITS_TO_LONGS(bits)]
+
+#define BITMAP_FIRST_WORD_MASK(start) (~0UL << ((start) & (BITS_PER_LONG - 1)))
+#define BITMAP_LAST_WORD_MASK(nbits) (~0UL >> (-(nbits) & (BITS_PER_LONG - 1)))
+
+static inline void bitmap_zero(unsigned long *dst, unsigned int nbits)
+{
+ unsigned int len = BITS_TO_LONGS(nbits) * sizeof(unsigned long);
+ memset(dst, 0, len);
+}
+
+#endif /* KVM__BITMAP_H */
diff --git a/include/linux/cpumask.h b/include/linux/cpumask.h
new file mode 100644
index 000000000000..36959885aeff
--- /dev/null
+++ b/include/linux/cpumask.h
@@ -0,0 +1,33 @@
+#ifndef KVM__CPUMASK_H
+#define KVM__CPUMASK_H
+
+#include <stdbool.h>
+
+#include <linux/bitmap.h>
+#include <linux/kernel.h>
+
+typedef struct cpumask { DECLARE_BITMAP(bits, NR_CPUS); } cpumask_t;
+
+#define cpumask_bits(maskp) ((maskp)->bits)
+
+static inline void cpumask_set_cpu(int cpu, cpumask_t *dstp)
+{
+ set_bit(cpu, cpumask_bits(dstp));
+}
+
+static inline void cpumask_clear_cpu(int cpu, cpumask_t *dstp)
+{
+ clear_bit(cpu, cpumask_bits(dstp));
+}
+
+static inline int cpumask_test_cpu(int cpu, const cpumask_t *cpumask)
+{
+ return test_bit(cpu, cpumask_bits((cpumask)));
+}
+
+static inline void cpumask_clear(cpumask_t *dstp)
+{
+ bitmap_zero(cpumask_bits(dstp), NR_CPUS);
+}
+
+#endif /* KVM__CPUMASK_H */
diff --git a/include/linux/kernel.h b/include/linux/kernel.h
index f2bff5f12b61..f3240e09a321 100644
--- a/include/linux/kernel.h
+++ b/include/linux/kernel.h
@@ -2,6 +2,8 @@
#ifndef KVM__LINUX_KERNEL_H_
#define KVM__LINUX_KERNEL_H_
+#include <asm/kernel.h>
+
#define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d))
#define ALIGN(x,a) __ALIGN_MASK(x,(typeof(x))(a)-1)
diff --git a/mips/include/asm/kernel.h b/mips/include/asm/kernel.h
new file mode 100644
index 000000000000..cbceffd02acd
--- /dev/null
+++ b/mips/include/asm/kernel.h
@@ -0,0 +1,8 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+
+#ifndef __ASM_KERNEL_H
+#define __ASM_KERNEL_H
+
+#define NR_CPUS 256
+
+#endif /* __ASM_KERNEL_H */
diff --git a/powerpc/include/asm/kernel.h b/powerpc/include/asm/kernel.h
new file mode 100644
index 000000000000..7b4fe88efd65
--- /dev/null
+++ b/powerpc/include/asm/kernel.h
@@ -0,0 +1,8 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+
+#ifndef __ASM_KERNEL_H
+#define __ASM_KERNEL_H
+
+#define NR_CPUS 2048
+
+#endif /* __ASM_KERNEL_H */
diff --git a/x86/include/asm/kernel.h b/x86/include/asm/kernel.h
new file mode 100644
index 000000000000..87fad2a0300a
--- /dev/null
+++ b/x86/include/asm/kernel.h
@@ -0,0 +1,8 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+
+#ifndef _ASM_KERNEL_H
+#define _ASM_KERNEL_H
+
+#define NR_CPUS 8196
+
+#endif /* _ASM_KERNEL_H */
--
2.31.1
More information about the linux-arm-kernel
mailing list