• Mihai Caraman's avatar
    KVM: PPC: Bookehv: Get vcpu's last instruction for emulation · f5250471
    Mihai Caraman authored
    On book3e, KVM uses load external pid (lwepx) dedicated instruction to read
    guest last instruction on the exit path. lwepx exceptions (DTLB_MISS, DSI
    and LRAT), generated by loading a guest address, needs to be handled by KVM.
    These exceptions are generated in a substituted guest translation context
    (EPLC[EGS] = 1) from host context (MSR[GS] = 0).
    
    Currently, KVM hooks only interrupts generated from guest context (MSR[GS] = 1),
    doing minimal checks on the fast path to avoid host performance degradation.
    lwepx exceptions originate from host state (MSR[GS] = 0) which implies
    additional checks in DO_KVM macro (beside the current MSR[GS] = 1) by looking
    at the Exception Syndrome Register (ESR[EPID]) and the External PID Load Context
    Register (EPLC[EGS]). Doing this on each Data TLB miss exception is obvious
    too intrusive for the host.
    
    Read guest last instruction from kvmppc_load_last_inst() by searching for the
    physical address and kmap it. This address the TODO for TLB eviction and
    execute-but-not-read entries, and allow us to get rid of lwepx until we are
    able to handle failures.
    
    A simple stress benchmark shows a 1% sys performance degradation compared with
    previous approach (lwepx without failure handling):
    
    time for i in `seq 1 10000`; do /bin/echo > /dev/null; done
    
    real    0m 8.85s
    user    0m 4.34s
    sys     0m 4.48s
    
    vs
    
    real    0m 8.84s
    user    0m 4.36s
    sys     0m 4.44s
    
    A solution to use lwepx and to handle its exceptions in KVM would be to temporary
    highjack the interrupt vector from host. This imposes additional synchronizations
    for cores like FSL e6500 that shares host IVOR registers between hardware threads.
    This optimized solution can be later developed on top of this patch.
    Signed-off-by: default avatarMihai Caraman <mihai.caraman@freescale.com>
    Signed-off-by: default avatarAlexander Graf <agraf@suse.de>
    f5250471
bookehv_interrupts.S 20 KB