• James Hogan's avatar
    MIPS: KVM: Dynamically choose scratch registers · 1e5217f5
    James Hogan authored
    Scratch cop0 registers are needed by KVM to be able to save/restore all
    the GPRs, including k0/k1, and for storing the VCPU pointer. However no
    registers are universally suitable for these purposes, so the decision
    should be made at runtime.
    
    Until now, we've used DDATA_LO to store the VCPU pointer, and ErrorEPC
    as a temporary. It could be argued that this is abuse of those
    registers, and DDATA_LO is known not to be usable on certain
    implementations (Cavium Octeon). If KScratch registers are present, use
    them instead.
    
    We save & restore the temporary register in addition to the VCPU pointer
    register when using a KScratch register for it, as it may be used for
    normal host TLB handling too.
    Signed-off-by: default avatarJames Hogan <james.hogan@imgtec.com>
    Cc: Paolo Bonzini <pbonzini@redhat.com>
    Cc: Radim KrÄmáŠ<rkrcmar@redhat.com>
    Cc: Ralf Baechle <ralf@linux-mips.org>
    Cc: linux-mips@linux-mips.org
    Cc: kvm@vger.kernel.org
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    1e5217f5
entry.c 18.5 KB