Thread (24 messages) 24 messages, 4 authors, 2014-04-03
STALE4498d

[PATCH v7 10/12] ARM/ARM64: KVM: Fix CPU_ON emulation for PSCI v0.2

From: Anup Patel <hidden>
Date: 2014-04-03 05:06:47

On 2 April 2014 18:42, Rob Herring [off-list ref] wrote:
On Wed, Apr 2, 2014 at 5:42 AM, Anup Patel [off-list ref] wrote:
quoted
As-per PSCI v0.2, the source CPU provides physical address of
"entry point" and "context id" for starting a target CPU. Also,
if target CPU is already running then we should return ALREADY_ON.

Current emulation of CPU_ON function does not consider physical
address of "context id" and returns INVALID_PARAMETERS if target
CPU is already running.

This patch updates kvm_psci_vcpu_on() such that it works for both
PSCI v0.1 and PSCI v0.2.

Signed-off-by: Anup Patel <redacted>
Signed-off-by: Pranavkumar Sawargaonkar <redacted>
Reviewed-by: Christoffer Dall <redacted>
---
 arch/arm/kvm/psci.c |   12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)
diff --git a/arch/arm/kvm/psci.c b/arch/arm/kvm/psci.c
index d8335da..fdbd829 100644
--- a/arch/arm/kvm/psci.c
+++ b/arch/arm/kvm/psci.c
quoted
@@ -101,6 +109,8 @@ static unsigned long kvm_psci_vcpu_on(struct kvm_vcpu *source_vcpu)
                kvm_vcpu_set_be(vcpu);

        *vcpu_pc(vcpu) = target_pc;
+       if (kvm_psci_version(source_vcpu) != KVM_ARM_PSCI_0_1)
+               *vcpu_reg(vcpu, 0) = context_id;
This could be done unconditionally. The register value is undefined
for 0.1, so whatever was in r3/x3 meets that requirement.
I had similar thought when I first updated this but then
I was not sure if PSCI v0.1 assumes this register to be
undefined.

Let me update this unconditionally as-per your suggestion
and put a comment here.
Rob
--
Anup
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help