arm64: KVM: Support Cortex-A57 guest CPU on APM X-Gene host
PATCH 1/1 arm64: KVM: Support Cortex-A57 guest CPU on APM X-Gene host
Update kvm_target_cpu() to allow Cortex-A57 guest CPU on APM X-Gene.
--- arch/arm64/kvm/guest.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-)
arch/arm64/kvm/guest.c +8 -2
@@ -207,8 +207,13 @@ int __attribute_const__ kvm_target_cpu(void)unsigned long implementor =read_cpuid_implementor ();unsigned long part_number =read_cpuid_part_number (); -if (implementor !=ARM_CPU_IMP_ARM ) -return -EINVAL ; +switch (implementor) { +case ARM_CPU_IMP_ARM : +case ARM_CPU_IMP_APM : +break ; +default : +return -EINVAL ; + }switch (part_number) {case ARM_CPU_PART_AEM_V8 :
@@ -216,6 +221,7 @@ int __attribute_const__ kvm_target_cpu(void)case ARM_CPU_PART_FOUNDATION :return KVM_ARM_TARGET_FOUNDATION_V8 ;case ARM_CPU_PART_CORTEX_A57 : +case APM_CPU_PART_POTENZA :/* Currently handled by the generic backend */ return KVM_ARM_TARGET_CORTEX_A57 ;default :
Signature · 1 line
1.7.9.5
PATCH 1/1 arm64: KVM: Support Cortex-A57 guest CPU on APM X-Gene host
Quoted 37 lines · Anup Patel
Update
kvm_target_cpu()to allow Cortex-A57 guest CPU on APM X-Gene.Signed-off-by Anup Patel <[email protected]>Signed-off-by Pranavkumar Sawargaonkar <[email protected]>--- arch/arm64/kvm/guest.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-)arch/arm64/kvm/guest.c +8
-3@@ -207,8 +207,13 @@ int __attribute_const__ kvm_target_cpu(void)unsigned long implementor =read_cpuid_implementor ();unsigned long part_number =read_cpuid_part_number (); -if (implementor !=ARM_CPU_IMP_ARM ) -return -EINVAL ; +switch (implementor) { +case ARM_CPU_IMP_ARM : +case ARM_CPU_IMP_APM : +break ; +default : +return -EINVAL ; + }switch (part_number) {case ARM_CPU_PART_AEM_V8 :@@ -216,6 +221,7 @@ int __attribute_const__ kvm_target_cpu(void)case ARM_CPU_PART_FOUNDATION :return KVM_ARM_TARGET_FOUNDATION_V8 ;case ARM_CPU_PART_CORTEX_A57 : +case APM_CPU_PART_POTENZA :/* Currently handled by the generic backend */ return KVM_ARM_TARGET_CORTEX_A57 ;default : --
Quoted 2 lines
1.7.9.5
Hi Catalin/Marc,
This patch depends on the patch titled "arm64: Add defines for APM ARMv8 implementation" from Vinyak Kale.
Regards,
Anup
PATCH 1/1 arm64: KVM: Support Cortex-A57 guest CPU on APM X-Gene host
In reply to Anup PatelQuoted 15 lines · Anup Patel
Update
kvm_target_cpu()to allow Cortex-A57 guest CPU on APM X-Gene.Signed-off-by Anup Patel <[email protected]>Signed-off-by Pranavkumar Sawargaonkar <[email protected]>--- arch/arm64/kvm/guest.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-)arch/arm64/kvm/guest.c +0
-0@@ -207,8 +207,13 @@ int __attribute_const__ kvm_target_cpu(void)unsigned long implementor =read_cpuid_implementor ();unsigned long part_number =read_cpuid_part_number ();
arch/arm64/kvm/guest.c int __attribute_const__ kvm_target_cpu(void) · line 216
Quoted 10 lines
arch/arm64/kvm/guest.c +7
-2-if (implementor !=ARM_CPU_IMP_ARM ) -return -EINVAL ; +switch (implementor) { +case ARM_CPU_IMP_ARM : +case ARM_CPU_IMP_APM : +break ; +default : +return -EINVAL ; + }
Doesn't this change mean we now accept the below part numbers for all implementors? That doesn't look right.
arch/arm64/kvm/guest.c int __attribute_const__ kvm_target_cpu(void) · line 227
Quoted 10 lines
arch/arm64/kvm/guest.c +1
-0switch (part_number) {case ARM_CPU_PART_AEM_V8 :@@ -216,6 +221,7 @@ int __attribute_const__ kvm_target_cpu(void)case ARM_CPU_PART_FOUNDATION :return KVM_ARM_TARGET_FOUNDATION_V8 ;case ARM_CPU_PART_CORTEX_A57 : +case APM_CPU_PART_POTENZA :/* Currently handled by the generic backend */ return KVM_ARM_TARGET_CORTEX_A57 ;default :
Do we really model all the system registers and so on correctly sufficiently to be able to present the guest with an A57 vcpu on an APM X-Gene host? (ie without accidentally leaking the host ID registers/system registers/impdef registers to the guest).
thanks
-- PMM
PATCH 1/1 arm64: KVM: Support Cortex-A57 guest CPU on APM X-Gene host
Quoted 30 lines · Peter Maydell
Quoted 15 lines · Anup Patel
Update
kvm_target_cpu()to allow Cortex-A57 guest CPU on APM X-Gene.Signed-off-by Anup Patel <[email protected]>Signed-off-by Pranavkumar Sawargaonkar <[email protected]>--- arch/arm64/kvm/guest.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-)arch/arm64/kvm/guest.c +0
-0@@ -207,8 +207,13 @@ int __attribute_const__ kvm_target_cpu(void)unsigned long implementor =read_cpuid_implementor ();unsigned long part_number =read_cpuid_part_number ();arch/arm64/kvm/guest.c int __attribute_const__ kvm_target_cpu(void) · line 216
Quoted 10 lines
arch/arm64/kvm/guest.c +7
-2-if (implementor !=ARM_CPU_IMP_ARM ) -return -EINVAL ; +switch (implementor) { +case ARM_CPU_IMP_ARM : +case ARM_CPU_IMP_APM : +break ; +default : +return -EINVAL ; + }Doesn't this change mean we now accept the below part numbers for all implementors? That doesn't look right.
Quoted 16 lines
arch/arm64/kvm/guest.c int __attribute_const__ kvm_target_cpu(void) · line 227
Quoted 10 lines
arch/arm64/kvm/guest.c +1
-0switch (part_number) {case ARM_CPU_PART_AEM_V8 :@@ -216,6 +221,7 @@ int __attribute_const__ kvm_target_cpu(void)case ARM_CPU_PART_FOUNDATION :return KVM_ARM_TARGET_FOUNDATION_V8 ;case ARM_CPU_PART_CORTEX_A57 : +case APM_CPU_PART_POTENZA :/* Currently handled by the generic backend */ return KVM_ARM_TARGET_CORTEX_A57 ;default :Do we really model all the system registers and so on correctly sufficiently to be able to present the guest with an A57 vcpu on an APM X-Gene host? (ie without accidentally leaking the host ID registers/system registers/impdef registers to the guest).
There is no such thing in the KVM/arm64 code. The guest sees the real host, and I really don't lie the idea of lying to userspace by pretending that we're going to emulate an A57.
Anup: I suggest you rework that patch to present a X-Gene vcpu. You can implement it by declaring a new target and implementing it in terms of the generic backend one if that's convenient. But just pretending this is an A57 is not going to fly, sorry.
Cheers,
M.
Signature · 1 line
Jazz is not dead. It just smells funny...
PATCH 1/1 arm64: KVM: Support Cortex-A57 guest CPU on APM X-Gene host
Quoted 48 lines · Marc Zyngier
Quoted 30 lines · Peter Maydell
Quoted 15 lines · Anup Patel
Update
kvm_target_cpu()to allow Cortex-A57 guest CPU on APM X-Gene.Signed-off-by Anup Patel <[email protected]>Signed-off-by Pranavkumar Sawargaonkar <[email protected]>--- arch/arm64/kvm/guest.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-)arch/arm64/kvm/guest.c +0
-0@@ -207,8 +207,13 @@ int __attribute_const__ kvm_target_cpu(void)unsigned long implementor =read_cpuid_implementor ();unsigned long part_number =read_cpuid_part_number ();arch/arm64/kvm/guest.c int __attribute_const__ kvm_target_cpu(void) · line 216
Quoted 10 lines
arch/arm64/kvm/guest.c +7
-2-if (implementor !=ARM_CPU_IMP_ARM ) -return -EINVAL ; +switch (implementor) { +case ARM_CPU_IMP_ARM : +case ARM_CPU_IMP_APM : +break ; +default : +return -EINVAL ; + }Doesn't this change mean we now accept the below part numbers for all implementors? That doesn't look right.
Quoted 16 lines
arch/arm64/kvm/guest.c int __attribute_const__ kvm_target_cpu(void) · line 227
Quoted 10 lines
arch/arm64/kvm/guest.c +1
-0switch (part_number) {case ARM_CPU_PART_AEM_V8 :@@ -216,6 +221,7 @@ int __attribute_const__ kvm_target_cpu(void)case ARM_CPU_PART_FOUNDATION :return KVM_ARM_TARGET_FOUNDATION_V8 ;case ARM_CPU_PART_CORTEX_A57 : +case APM_CPU_PART_POTENZA :/* Currently handled by the generic backend */ return KVM_ARM_TARGET_CORTEX_A57 ;default :Do we really model all the system registers and so on correctly sufficiently to be able to present the guest with an A57 vcpu on an APM X-Gene host? (ie without accidentally leaking the host ID registers/system registers/impdef registers to the guest).
Quoted 8 lines
There is no such thing in the KVM/arm64 code. The guest sees the real host, and I really don't lie the idea of lying to userspace by pretending that we're going to emulate an A57.
Anup: I suggest you rework that patch to present a X-Gene vcpu. You can implement it by declaring a new target and implementing it in terms of the generic backend one if that's convenient. But just pretending this is an A57 is not going to fly, sorry.
Sure, I will add separate target vcpu for X-Gene and try to re-use your generic backend.
Quoted 4 lines
Cheers,
M.
Quoted 8 lines
--
Jazz is not dead. It just smells funny..._______________________________________________
kvmarm mailing list
kvmarm at lists.cs.columbia.edu
https://lists.cs.columbia.edu/cucslists/listinfo/kvmarm
--Anup
PATCH 1/1 arm64: KVM: Support Cortex-A57 guest CPU on APM X-Gene host
In reply to Peter MaydellQuoted 17 lines · Peter Maydell
Quoted 16 lines · Anup Patel
Update
kvm_target_cpu()to allow Cortex-A57 guest CPU on APM X-Gene.Signed-off-by Anup Patel <[email protected]>Signed-off-by Pranavkumar Sawargaonkar <[email protected]>--- arch/arm64/kvm/guest.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-)arch/arm64/kvm/guest.c +0
-0@@ -207,8 +207,13 @@ int __attribute_const__ kvm_target_cpu(void)unsigned long implementor =read_cpuid_implementor ();unsigned long part_number =read_cpuid_part_number ();
Quoted 12 lines
arch/arm64/kvm/guest.c int __attribute_const__ kvm_target_cpu(void) · line 216
Quoted 9 lines
arch/arm64/kvm/guest.c +7
-2-if (implementor !=ARM_CPU_IMP_ARM ) -return -EINVAL ; +switch (implementor) { +case ARM_CPU_IMP_ARM : +case ARM_CPU_IMP_APM : +break ; +default : +return -EINVAL ; + }Doesn't this change mean we now accept the below part numbers for all implementors? That doesn't look right.
Sure, we can use nested switch case instead of two separate switch cases.
Quoted 17 lines
arch/arm64/kvm/guest.c int __attribute_const__ kvm_target_cpu(void) · line 227
Quoted 11 lines
arch/arm64/kvm/guest.c +1
-0switch (part_number) {case ARM_CPU_PART_AEM_V8 :@@ -216,6 +221,7 @@ int __attribute_const__ kvm_target_cpu(void)case ARM_CPU_PART_FOUNDATION :return KVM_ARM_TARGET_FOUNDATION_V8 ;case ARM_CPU_PART_CORTEX_A57 : +case APM_CPU_PART_POTENZA :/* Currently handled by the generic backend */ return KVM_ARM_TARGET_CORTEX_A57 ;default :Do we really model all the system registers and so on correctly sufficiently to be able to present the guest with an A57 vcpu on an APM X-Gene host? (ie without accidentally leaking the host ID registers/system registers/impdef registers to the guest).
Yes, there are very few APM impdef registers. For now A57 vcpu is not allowed to access these impdef registers.
For rest of the registers, A57 vcpu will see:
1. MIDR and MPIDR as expected on a A57 vcpu.
2. Cache configuration related registers will be same as that of underlying host so that cache operations work fine in guest
Quoted 7 lines
thanks
-- PMM
_______________________________________________
kvmarm mailing list
kvmarm at lists.cs.columbia.edu
https://lists.cs.columbia.edu/cucslists/listinfo/kvmarm
--Anup