[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-arm] [PATCH 06/13] target/arm/kvm: max cpu: Enable SVE when availa
From: |
Andrew Jones |
Subject: |
[Qemu-arm] [PATCH 06/13] target/arm/kvm: max cpu: Enable SVE when available |
Date: |
Sun, 12 May 2019 10:36:17 +0200 |
Enable SVE in the KVM guest when the 'max' cpu type is configured
and KVM supports it. KVM SVE requires use of the new finalize
vcpu ioctl, so we add that now too.
Signed-off-by: Andrew Jones <address@hidden>
---
target/arm/cpu64.c | 1 +
target/arm/kvm.c | 5 +++++
target/arm/kvm64.c | 16 +++++++++++++++-
target/arm/kvm_arm.h | 12 ++++++++++++
4 files changed, 33 insertions(+), 1 deletion(-)
diff --git a/target/arm/cpu64.c b/target/arm/cpu64.c
index 228906f26786..6c19ef6837d5 100644
--- a/target/arm/cpu64.c
+++ b/target/arm/cpu64.c
@@ -292,6 +292,7 @@ static void aarch64_max_initfn(Object *obj)
if (kvm_enabled()) {
kvm_arm_set_cpu_features_from_host(cpu);
+ cpu->sve_max_vq = ARM_MAX_VQ;
} else {
uint64_t t;
uint32_t u;
diff --git a/target/arm/kvm.c b/target/arm/kvm.c
index 599563461264..c51db4229d0f 100644
--- a/target/arm/kvm.c
+++ b/target/arm/kvm.c
@@ -50,6 +50,11 @@ int kvm_arm_vcpu_init(CPUState *cs)
return kvm_vcpu_ioctl(cs, KVM_ARM_VCPU_INIT, &init);
}
+int kvm_arm_vcpu_finalize(CPUState *cs, int feature)
+{
+ return kvm_vcpu_ioctl(cs, KVM_ARM_VCPU_FINALIZE, &feature);
+}
+
void kvm_arm_init_serror_injection(CPUState *cs)
{
cap_has_inject_serror_esr = kvm_check_extension(cs->kvm_state,
diff --git a/target/arm/kvm64.c b/target/arm/kvm64.c
index 86362f4cd7d0..c2d92df75353 100644
--- a/target/arm/kvm64.c
+++ b/target/arm/kvm64.c
@@ -622,13 +622,20 @@ int kvm_arch_init_vcpu(CPUState *cs)
cpu->kvm_init_features[0] |= 1 << KVM_ARM_VCPU_EL1_32BIT;
}
if (!kvm_check_extension(cs->kvm_state, KVM_CAP_ARM_PMU_V3)) {
- cpu->has_pmu = false;
+ cpu->has_pmu = false;
}
if (cpu->has_pmu) {
cpu->kvm_init_features[0] |= 1 << KVM_ARM_VCPU_PMU_V3;
} else {
unset_feature(&env->features, ARM_FEATURE_PMU);
}
+ if (cpu->sve_max_vq) {
+ if (!kvm_check_extension(cs->kvm_state, KVM_CAP_ARM_SVE)) {
+ cpu->sve_max_vq = 0;
+ } else {
+ cpu->kvm_init_features[0] |= 1 << KVM_ARM_VCPU_SVE;
+ }
+ }
/* Do KVM_ARM_VCPU_INIT ioctl */
ret = kvm_arm_vcpu_init(cs);
@@ -636,6 +643,13 @@ int kvm_arch_init_vcpu(CPUState *cs)
return ret;
}
+ if (cpu->sve_max_vq) {
+ ret = kvm_arm_vcpu_finalize(cs, KVM_ARM_VCPU_SVE);
+ if (ret) {
+ return ret;
+ }
+ }
+
/*
* When KVM is in use, PSCI is emulated in-kernel and not by qemu.
* Currently KVM has its own idea about MPIDR assignment, so we
diff --git a/target/arm/kvm_arm.h b/target/arm/kvm_arm.h
index 2a07333c615f..c488ec3ab410 100644
--- a/target/arm/kvm_arm.h
+++ b/target/arm/kvm_arm.h
@@ -27,6 +27,18 @@
*/
int kvm_arm_vcpu_init(CPUState *cs);
+/**
+ * kvm_arm_vcpu_finalize
+ * @cs: CPUState
+ * @feature: int
+ *
+ * Finalizes the configuration of the specified VCPU feature
+ * by invoking the KVM_ARM_VCPU_FINALIZE ioctl.
+ *
+ * Returns: 0 if success else < 0 error code
+ */
+int kvm_arm_vcpu_finalize(CPUState *cs, int feature);
+
/**
* kvm_arm_register_device:
* @mr: memory region for this device
--
2.20.1
- [Qemu-arm] [PATCH 10/13] target/arm/monitor: kvm: only return valid sve vector sets, (continued)
- [Qemu-arm] [PATCH 10/13] target/arm/monitor: kvm: only return valid sve vector sets, Andrew Jones, 2019/05/12
- [Qemu-arm] [PATCH 02/13] update-linux-headers: Add sve_context.h to asm-arm64, Andrew Jones, 2019/05/12
- [Qemu-arm] [PATCH 09/13] target/arm/kvm: Export kvm_arm_get_sve_vls, Andrew Jones, 2019/05/12
- [Qemu-arm] [PATCH 13/13] target/arm/kvm: host cpu: Add support for sve-vls-map, Andrew Jones, 2019/05/12
- [Qemu-arm] [PATCH 07/13] target/arm/kvm: max cpu: Allow sve max vector length setting, Andrew Jones, 2019/05/12
- [Qemu-arm] [PATCH 04/13] target/arm/kvm: Move the get/put of fpsimd registers out, Andrew Jones, 2019/05/12
- [Qemu-arm] [PATCH 06/13] target/arm/kvm: max cpu: Enable SVE when available,
Andrew Jones <=
- [Qemu-arm] [PATCH 12/13] target/arm/kvm: max cpu: Add support for sve-vls-map, Andrew Jones, 2019/05/12
- [Qemu-arm] [PATCH 05/13] target/arm/kvm: Add kvm_arch_get/put_sve, Andrew Jones, 2019/05/12
- Re: [Qemu-arm] [PATCH 05/13] target/arm/kvm: Add kvm_arch_get/put_sve, Richard Henderson, 2019/05/13
- Re: [Qemu-arm] [PATCH 05/13] target/arm/kvm: Add kvm_arch_get/put_sve, Andrew Jones, 2019/05/13
- Re: [Qemu-arm] [PATCH 05/13] target/arm/kvm: Add kvm_arch_get/put_sve, Richard Henderson, 2019/05/13