• Gaurav Batra's avatar
    powerpc/pseries/iommu: enable_ddw incorrectly returns direct mapping for SR-IOV device · 3bf983e4
    Gaurav Batra authored
    When a device is initialized, the driver invokes dma_supported() twice -
    first for streaming mappings followed by coherent mappings. For an
    SR-IOV device, default window is deleted and DDW created. With vPMEM
    enabled, TCE mappings are dynamically created for both vPMEM and SR-IOV
    device.  There are no direct mappings.
    
    First time when dma_supported() is called with 64 bit mask, DDW is created
    and marked as dynamic window. The second time dma_supported() is called,
    enable_ddw() finds existing window for the device and incorrectly returns
    it as "direct mapping".
    
    This only happens when size of DDW is big enough to map max LPAR memory.
    
    This results in streaming TCEs to not get dynamically mapped, since code
    incorrently assumes these are already pre-mapped. The adapter initially
    comes up but goes down due to EEH.
    
    Fixes: 381ceda8 ("powerpc/pseries/iommu: Make use of DDW for indirect mapping")
    Cc: stable@vger.kernel.org # v5.15+
    Signed-off-by: default avatarGaurav Batra <gbatra@linux.vnet.ibm.com>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    Link: https://msgid.link/20231003030802.47914-1-gbatra@linux.vnet.ibm.com
    3bf983e4
iommu.c 45.2 KB