• Alexey Kardashevskiy's avatar
    KVM: PPC: Book3s: Retire H_PUT_TCE/etc real mode handlers · cad32d9d
    Alexey Kardashevskiy authored
    LoPAPR defines guest visible IOMMU with hypercalls to use it -
    H_PUT_TCE/etc. Implemented first on POWER7 where hypercalls would trap
    in the KVM in the real mode (with MMU off). The problem with the real mode
    is some memory is not available and some API usage crashed the host but
    enabling MMU was an expensive operation.
    
    The problems with the real mode handlers are:
    1. Occasionally these cannot complete the request so the code is
    copied+modified to work in the virtual mode, very little is shared;
    2. The real mode handlers have to be linked into vmlinux to work;
    3. An exception in real mode immediately reboots the machine.
    
    If the small DMA window is used, the real mode handlers bring better
    performance. However since POWER8, there has always been a bigger DMA
    window which VMs use to map the entire VM memory to avoid calling
    H_PUT_TCE. Such 1:1 mapping happens once and uses H_PUT_TCE_INDIRECT
    (a bulk version of H_PUT_TCE) which virtual mode handler is even closer
    to its real mode version.
    
    On POWER9 hypercalls trap straight to the virtual mode so the real mode
    handlers never execute on POWER9 and later CPUs.
    
    So with the current use of the DMA windows and MMU improvements in
    POWER9 and later, there is no point in duplicating the code.
    The 32bit passed through devices may slow down but we do not have many
    of these in practice. For example, with this applied, a 1Gbit ethernet
    adapter still demostrates above 800Mbit/s of actual throughput.
    
    This removes the real mode handlers from KVM and related code from
    the powernv platform.
    
    This updates the list of implemented hcalls in KVM-HV as the realmode
    handlers are removed.
    
    This changes ABI - kvmppc_h_get_tce() moves to the KVM module and
    kvmppc_find_table() is static now.
    Signed-off-by: default avatarAlexey Kardashevskiy <aik@ozlabs.ru>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    Link: https://lore.kernel.org/r/20220506053755.3820702-1-aik@ozlabs.ru
    cad32d9d
iommu.h 9.92 KB