aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexandru Elisei <alexandru.elisei@arm.com>2022-04-12 14:32:25 +0100
committerWill Deacon <will@kernel.org>2022-05-06 14:21:16 +0100
commitb23aed2ae11e8c0a03c53d7e8e63ad1b22e5db1f (patch)
tree029236826f095f4bdff4790f28fa8bb6f11f5bdb
parent412ee1375de8fcfae2feece5db9c859eedb3cdba (diff)
downloadkvmtool-b23aed2ae11e8c0a03c53d7e8e63ad1b22e5db1f.tar.gz
arm: Get rid of the ARM_VCPU_FEATURE_FLAGS() macro
The ARM_VCPU_FEATURE_FLAGS() macro sets a feature bit in a rather convoluted way: if cpu_id is 0, then bit KVM_ARM_VCPU_POWER_OFF is 0, otherwise is set to 1. There's really no need for this indirection, especially considering that the macro has been changed to return the same value for both the arm and arm64 architectures. Replace it with a simple conditional statement in kvm_cpu__arch_init(), which makes it clearer to understand. Signed-off-by: Alexandru Elisei <alexandru.elisei@arm.com> Link: https://lore.kernel.org/r/20220412133231.35355-6-alexandru.elisei@arm.com Signed-off-by: Will Deacon <will@kernel.org>
-rw-r--r--arm/aarch32/include/kvm/kvm-cpu-arch.h4
-rw-r--r--arm/aarch64/include/kvm/kvm-cpu-arch.h4
-rw-r--r--arm/kvm-cpu.c6
3 files changed, 5 insertions, 9 deletions
diff --git a/arm/aarch32/include/kvm/kvm-cpu-arch.h b/arm/aarch32/include/kvm/kvm-cpu-arch.h
index 6fe02068..fd0b387c 100644
--- a/arm/aarch32/include/kvm/kvm-cpu-arch.h
+++ b/arm/aarch32/include/kvm/kvm-cpu-arch.h
@@ -5,10 +5,6 @@
#include "arm-common/kvm-cpu-arch.h"
-#define ARM_VCPU_FEATURE_FLAGS(kvm, cpuid) { \
- [0] = (!!(cpuid) << KVM_ARM_VCPU_POWER_OFF), \
-}
-
#define ARM_MPIDR_HWID_BITMASK 0xFFFFFF
#define ARM_CPU_ID 0, 0, 0
#define ARM_CPU_ID_MPIDR 5
diff --git a/arm/aarch64/include/kvm/kvm-cpu-arch.h b/arm/aarch64/include/kvm/kvm-cpu-arch.h
index 4cbadf91..aeae8c13 100644
--- a/arm/aarch64/include/kvm/kvm-cpu-arch.h
+++ b/arm/aarch64/include/kvm/kvm-cpu-arch.h
@@ -5,10 +5,6 @@
#include "arm-common/kvm-cpu-arch.h"
-#define ARM_VCPU_FEATURE_FLAGS(kvm, cpuid) { \
- [0] = (!!(cpuid) << KVM_ARM_VCPU_POWER_OFF), \
-}
-
#define ARM_MPIDR_HWID_BITMASK 0xFF00FFFFFFUL
#define ARM_CPU_ID 3, 0, 0, 0
#define ARM_CPU_ID_MPIDR 5
diff --git a/arm/kvm-cpu.c b/arm/kvm-cpu.c
index 3a5c8a5a..98bc5fdf 100644
--- a/arm/kvm-cpu.c
+++ b/arm/kvm-cpu.c
@@ -43,7 +43,7 @@ struct kvm_cpu *kvm_cpu__arch_init(struct kvm *kvm, unsigned long cpu_id)
unsigned int i;
struct kvm_vcpu_init preferred_init;
struct kvm_vcpu_init vcpu_init = {
- .features = ARM_VCPU_FEATURE_FLAGS(kvm, cpu_id)
+ .features = {},
};
vcpu = calloc(1, sizeof(struct kvm_cpu));
@@ -63,6 +63,10 @@ struct kvm_cpu *kvm_cpu__arch_init(struct kvm *kvm, unsigned long cpu_id)
if (vcpu->kvm_run == MAP_FAILED)
die("unable to mmap vcpu fd");
+ /* VCPU 0 is the boot CPU, the others start in a poweroff state. */
+ if (cpu_id > 0)
+ vcpu_init.features[0] |= (1UL << KVM_ARM_VCPU_POWER_OFF);
+
/* Set KVM_ARM_VCPU_PSCI_0_2 if available */
if (kvm__supports_extension(kvm, KVM_CAP_ARM_PSCI_0_2)) {
vcpu_init.features[0] |= (1UL << KVM_ARM_VCPU_PSCI_0_2);