[PATCH kvmtool 2/7] arm64: Consistently treat vcpu_affinity_cpuset as dynamically allocated

Alexandru Elisei alexandru.elisei at arm.com
Thu Sep 17 08:49:27 PDT 2026


man 3 CPU_ALLOC says that for dynamically allocated cpusets, one should use
the *_S macros to manipulate the cpuset, and the example program also
demonstrates this. Use CPU_SET_S and CPU_ISSET_S to comply.

Fixes: 4639b72f61a3 ("arm64: Add --vcpu-affinity command line argument")
Signed-off-by: Alexandru Elisei <alexandru.elisei at arm.com>
---
 arm64/kvm.c | 6 ++++--
 arm64/pmu.c | 6 ++++--
 2 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/arm64/kvm.c b/arm64/kvm.c
index cdd673542aea..5f3ed9f6d201 100644
--- a/arm64/kvm.c
+++ b/arm64/kvm.c
@@ -450,6 +450,7 @@ int vcpu_affinity_parser(const struct option *opt, const char *arg, int unset)
 	struct kvm *kvm = opt->ptr;
 	const char *cpulist = arg;
 	cpumask_t *cpumask;
+	size_t setsize;
 	int cpu, ret;
 
 	kvm->cfg.arch.vcpu_affinity = cpulist;
@@ -467,10 +468,11 @@ int vcpu_affinity_parser(const struct option *opt, const char *arg, int unset)
 	kvm->arch.vcpu_affinity_cpuset = CPU_ALLOC(NR_CPUS);
 	if (!kvm->arch.vcpu_affinity_cpuset)
 		die_perror("CPU_ALLOC");
-	CPU_ZERO_S(CPU_ALLOC_SIZE(NR_CPUS), kvm->arch.vcpu_affinity_cpuset);
 
+	setsize = CPU_ALLOC_SIZE(NR_CPUS);
+	CPU_ZERO_S(setsize, kvm->arch.vcpu_affinity_cpuset);
 	for_each_cpu(cpu, cpumask)
-		CPU_SET(cpu, kvm->arch.vcpu_affinity_cpuset);
+		CPU_SET_S(cpu, setsize, kvm->arch.vcpu_affinity_cpuset);
 
 	return 0;
 }
diff --git a/arm64/pmu.c b/arm64/pmu.c
index 49d58ddd529b..e5a07abcd317 100644
--- a/arm64/pmu.c
+++ b/arm64/pmu.c
@@ -191,6 +191,7 @@ static int find_pmu(struct kvm *kvm)
 {
 	cpumask_t *cpumask;
 	int i, this_cpu;
+	size_t setsize;
 
 	cpumask = calloc(cpumask_size(), 1);
 	if (!cpumask)
@@ -202,8 +203,9 @@ static int find_pmu(struct kvm *kvm)
 			return -errno;
 		cpumask_set_cpu(this_cpu, cpumask);
 	} else {
-		for (i = 0; i < CPU_SETSIZE; i ++) {
-			if (CPU_ISSET(i, kvm->arch.vcpu_affinity_cpuset))
+		setsize = CPU_ALLOC_SIZE(NR_CPUS);
+		for (i = 0; i < NR_CPUS; i ++) {
+			if (CPU_ISSET_S(i, setsize, kvm->arch.vcpu_affinity_cpuset))
 				cpumask_set_cpu(i, cpumask);
 		}
 	}
-- 
2.55.0




More information about the linux-arm-kernel mailing list