• Paul Mackerras's avatar
    KVM: PPC: Book3S HV: Work around TEXASR bug in fake suspend state · 681c617b
    Paul Mackerras authored
    This works around a hardware bug in "Nimbus" POWER9 DD2.2 processors,
    where the contents of the TEXASR can get corrupted while a thread is
    in fake suspend state.  The workaround is for the instruction emulation
    code to use the value saved at the most recent guest exit in real
    suspend mode.  We achieve this by simply not saving the TEXASR into
    the vcpu struct on an exit in fake suspend state.  We also have to
    take care to set the orig_texasr field only on guest exit in real
    suspend state.
    
    This also means that on guest entry in fake suspend state, TEXASR
    will be restored to the value it had on the last exit in real suspend
    state, effectively counteracting any hardware-caused corruption.  This
    works because TEXASR may not be written in suspend state.
    
    With this, the guest might see the wrong values in TEXASR if it reads
    it while in suspend state, but will see the correct value in
    non-transactional state (e.g. after a treclaim), and treclaim will
    work correctly.
    
    With this workaround, the code will actually run slightly faster, and
    will operate correctly on systems without the TEXASR bug (since TEXASR
    may not be written in suspend state, and is only changed by failure
    recording, which will have already been done before we get into fake
    suspend state).  Therefore these changes are not made subject to a CPU
    feature bit.
    Signed-off-by: default avatarPaul Mackerras <paulus@ozlabs.org>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    681c617b
book3s_hv_rmhandlers.S 87.8 KB