• James Hogan's avatar
    KVM: MIPS/Emulate: Update CP0_Compare emulation for VZ · 5dee99b2
    James Hogan authored
    Update emulation of guest writes to CP0_Compare for VZ. There are two
    main differences compared to trap & emulate:
    
     - Writing to CP0_Compare in the VZ hardware guest context acks any
       pending timer, clearing CP0_Cause.TI. If we don't want an ack to take
       place we must carefully restore the TI bit if it was previously set.
    
     - Even with guest timer access disabled in CP0_GuestCtl0.GT, if the
       guest CP0_Count reaches the guest CP0_Compare the timer interrupt
       will assert. To prevent this we must set CP0_GTOffset to move the
       guest CP0_Count out of the way of the new guest CP0_Compare, either
       before or after depending on whether it is a forwards or backwards
       change.
    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
    5dee99b2
emulate.c 71.9 KB