On Thu, Jun 08, 2017 at 11:23:55AM +0100, James Morse wrote: > Hi Christoffer, > > On 06/06/17 20:45, Christoffer Dall wrote: > > On Mon, May 15, 2017 at 06:43:51PM +0100, James Morse wrote: > >> KVM calls hyp_panic() when anything unexpected happens. This may occur > >> while a guest owns the EL1 registers. KVM stashes the vcpu pointer in > >> tpidr_el2, which it uses to find the host context in order to restore > >> the host EL1 registers before parachuting into the host's panic(). > >> > >> The host context is a struct kvm_cpu_context allocated in the per-cpu > >> area, and mapped to hyp. Given the per-cpu offset for this CPU, this is > >> easy to find. Change hyp_panic() to take a pointer to the > >> struct kvm_cpu_context. Wrap these calls with an asm function that > >> retrieves the struct kvm_cpu_context from the host's per-cpu area. > >> > >> Copy the per-cpu offset from the hosts tpidr_el1 into tpidr_el2 during > >> kvm init. (Later patches will make this unnecessary for VHE hosts) > >> > >> We print out the vcpu pointer as part of the panic message. Add a back > >> reference to the 'running vcpu' in the host cpu context to preserve this. > > >> diff --git a/arch/arm64/kvm/hyp/hyp-entry.S b/arch/arm64/kvm/hyp/hyp-entry.S > >> index fce7cc507e0a..0f83e7e402ad 100644 > >> --- a/arch/arm64/kvm/hyp/hyp-entry.S > >> +++ b/arch/arm64/kvm/hyp/hyp-entry.S > >> @@ -163,6 +163,13 @@ ENTRY(__hyp_do_panic) > >> eret > >> ENDPROC(__hyp_do_panic) > >> > >> +ENTRY(__hyp_panic) > >> + ldr x0, =kvm_host_cpu_state > > > > Why is this guaranteed to give us a valid EL2 address? > > ... it doesn't. Its a host address from the constant pool which is used by > hyp-panic as __host_ctxt: > > void __hyp_text __noreturn hyp_panic(struct kvm_cpu_context *__host_ctxt); > > and fixed up with: > > host_ctxt = kern_hyp_va(__host_ctxt); > Ah, right, we only dereference the pointer inside the function, I missed that. > to give us the EL2 address before we access it. > For VHE the last step is a nop as the host address can be accessed directly. > > I will add a comment here explaining this. > > Thanks! -Christoffer -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html