• James Morse's avatar
    KVM: arm64: Change hyp_panic()s dependency on tpidr_el2 · c97e166e
    James Morse authored
    Make tpidr_el2 a cpu-offset for per-cpu variables in the same way the
    host uses tpidr_el1. This lets tpidr_el{1,2} have the same value, and
    on VHE they can be the same register.
    
    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.
    Signed-off-by: default avatarJames Morse <james.morse@arm.com>
    Reviewed-by: default avatarChristoffer Dall <cdall@linaro.org>
    Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
    c97e166e
switch.c 13.3 KB