• Paul Mackerras's avatar
    KVM: PPC: Book3S HV: Synthesize segment fault if SLB lookup fails · cf29b215
    Paul Mackerras authored
    When handling a hypervisor data or instruction storage interrupt (HDSI
    or HISI), we look up the SLB entry for the address being accessed in
    order to translate the effective address to a virtual address which can
    be looked up in the guest HPT.  This lookup can occasionally fail due
    to the guest replacing an SLB entry without invalidating the evicted
    SLB entry.  In this situation an ERAT (effective to real address
    translation cache) entry can persist and be used by the hardware even
    though there is no longer a corresponding SLB entry.
    
    Previously we would just deliver a data or instruction storage interrupt
    (DSI or ISI) to the guest in this case.  However, this is not correct
    and has been observed to cause guests to crash, typically with a
    data storage protection interrupt on a store to the vmemmap area.
    
    Instead, what we do now is to synthesize a data or instruction segment
    interrupt.  That should cause the guest to reload an appropriate entry
    into the SLB and retry the faulting instruction.  If it still faults,
    we should find an appropriate SLB entry next time and be able to handle
    the fault.
    Tested-by: default avatarThomas Huth <thuth@redhat.com>
    Reviewed-by: default avatarDavid Gibson <david@gibson.dropbear.id.au>
    Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
    cf29b215
book3s_hv_rmhandlers.S 63.7 KB