• Nicholas Piggin's avatar
    powerpc/64s: Optimize hypercall/syscall entry · acd7d8ce
    Nicholas Piggin authored
    After bc355125 ("powerpc/64: Allow for relocation-on interrupts from
    guest to host"), a getppid() system call goes from 307 cycles to 358
    cycles (+17%) on POWER8. This is due significantly to the scratch SPR
    used by the hypercall check.
    
    It turns out there are a some volatile registers common to both system
    call and hypercall (in particular, r12, cr0, ctr), which can be used to
    avoid the SPR and some other overheads. This brings getppid to 320 cycles
    (+4%).
    
    Testing hcall entry performance by running "sc 1" in guest userspace
    before this patch is 854 cycles, afterwards is 826. Also a small win
    there.
    
    POWER9 syscall is improved by about the same amount, hcall not tested.
    Signed-off-by: default avatarNicholas Piggin <npiggin@gmail.com>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    acd7d8ce
exceptions-64s.S 45.9 KB