• Jose Abreu's avatar
    net: stmmac: Sync RX Buffer upon allocation · 3caa61c2
    Jose Abreu authored
    
    
    With recent changes that introduced support for Page Pool in stmmac, Jon
    reported that NFS boot was no longer working on an ARM64 based platform
    that had the IP behind an IOMMU.
    
    As Page Pool API does not guarantee DMA syncing because of the use of
    DMA_ATTR_SKIP_CPU_SYNC flag, we have to explicit sync the whole buffer upon
    re-allocation because we are always re-using same pages.
    
    In fact, ARM64 code invalidates the DMA area upon two situations [1]:
    	- sync_single_for_cpu(): Invalidates if direction != DMA_TO_DEVICE
    	- sync_single_for_device(): Invalidates if direction == DMA_FROM_DEVICE
    
    So, as we must invalidate both the current RX buffer and the newly allocated
    buffer we propose this fix.
    
    [1] arch/arm64/mm/cache.S
    Reported-by: default avatarJon Hunter <jonathanh@nvidia.com>
    Tested-by: default avatarJon Hunter <jonathanh@nvidia.com>
    Fixes: 2af6106a
    
     ("net: stmmac: Introducing support for Page Pool")
    Signed-off-by: default avatarJose Abreu <joabreu@synopsys.com>
    Tested-by: default avatarEzequiel Garcia <ezequiel@collabora.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    3caa61c2
stmmac_main.c 126 KB