• J
    MIPS: KVM: Don't unwind PC when emulating CACHE · cc81e948
    James Hogan 提交于
    When a CACHE instruction is emulated by kvm_mips_emulate_cache(), the PC
    is first updated to point to the next instruction, and afterwards it
    falls through the "dont_update_pc" label, which rewinds the PC back to
    its original address.
    
    This works when dynamic translation of emulated instructions is enabled,
    since the CACHE instruction is replaced with a SYNCI which works without
    trapping, however when dynamic translation is disabled the guest hangs
    on CACHE instructions as they always trap and are never stepped over.
    
    Roughly swap the meanings of the "done" and "dont_update_pc" to match
    kvm_mips_emulate_CP0(), so that "done" will roll back the PC on failure,
    and "dont_update_pc" won't change PC at all (for the sake of exceptions
    that have already modified the PC).
    Signed-off-by: NJames 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: kvm@vger.kernel.org
    Cc: linux-mips@linux-mips.org
    Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
    cc81e948
emulate.c 68.9 KB