• Alexey Kardashevskiy's avatar
    pseries/iommu/ddw: Fix kdump to work in absence of ibm,dma-window · b1fc44ea
    Alexey Kardashevskiy authored
    The pseries platform uses 32bit default DMA window (always 4K pages) and
    optional 64bit DMA window available via DDW ("Dynamic DMA Windows"),
    64K or 2M pages. For ages the default one was not removed and a huge
    window was created in addition. Things changed with SRIOV-enabled
    PowerVM which creates a default-and-bigger DMA window in 64bit space
    (still using 4K pages) for IOV VFs so certain OSes do not need to use
    the DDW API in order to utilize all available TCE budget.
    
    Linux on the other hand removes the default window and creates a bigger
    one (with more TCEs or/and a bigger page size - 64K/2M) in a bid to map
    the entire RAM, and if the new window size is smaller than that - it
    still uses this new bigger window. The result is that the default window
    is removed but the "ibm,dma-window" property is not.
    
    When kdump is invoked, the existing code tries reusing the existing 64bit
    DMA window which location and parameters are stored in the device tree but
    this fails as the new property does not make it to the kdump device tree
    blob. So the code falls back to the default window which does not exist
    anymore although the device tree says that it does. The result of that
    is that PCI devices become unusable and cannot be used for kdumping.
    
    This preserves the DMA64 and DIRECT64 properties in the device tree blob
    for the crash kernel. Since the crash kernel setup is done after device
    drivers are loaded and probed, the proper DMA config is stored at least
    for boot time devices.
    
    Because DDW window is optional and the code configures the default window
    first, the existing code creates an IOMMU table descriptor for
    the non-existing default DMA window. It is harmless for kdump as it does
    not touch the actual window (only reads what is mapped and marks those IO
    pages as used) but it is bad for kexec which clears it thinking it is
    a smaller default window rather than a bigger DDW window.
    
    This removes the "ibm,dma-window" property from the device tree after
    a bigger window is created and the crash kernel setup picks it up.
    
    Fixes: 381ceda8 ("powerpc/pseries/iommu: Make use of DDW for indirect mapping")
    Signed-off-by: default avatarAlexey Kardashevskiy <aik@ozlabs.ru>
    Acked-by: default avatarHari Bathini <hbathini@linux.ibm.com>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    Link: https://lore.kernel.org/r/20220629060614.1680476-1-aik@ozlabs.ru
    b1fc44ea
file_load_64.c 34 KB