• Alexey Kardashevskiy's avatar
    powerpc/powernv/ioda: Return correct error if TCE level allocation failed · 5f202c1a
    Alexey Kardashevskiy authored
    The iommu_table_ops::xchg_no_kill() callback updates TCE. It is quite
    possible that not entire table is allocated if it is huge and multilevel
    so xchg may also allocate subtables. If failed, it returns H_HARDWARE
    for failed allocation and H_TOO_HARD if it needs it but cannot do because
    the alloc parameter is "false" (set when called with MMU=off to force
    retry with MMU=on).
    
    The problem is that having separate errors only matters in real mode
    (MMU=off) but the only caller with alloc="false" does not check the exact
    error code and simply returns H_TOO_HARD; and for every other mode
    alloc is "true". Also, the function is also called from the ioctl()
    handler of the VFIO SPAPR TCE IOMMU subdriver which does not expect
    hypervisor error codes (H_xxx) and will expose them to the userspace.
    
    This converts wrong error codes to -ENOMEM.
    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/20200617003835.48831-1-aik@ozlabs.ru
    5f202c1a
pci-ioda-tce.c 10.3 KB