• Will Deacon's avatar
    Partially revert "arm64/mm: drop HAVE_ARCH_PFN_VALID" · 3eb9cdff
    Will Deacon authored
    This partially reverts commit 16c9afc7.
    
    Alex Bee reports a regression in 5.14 on their RK3328 SoC when
    configuring the PL330 DMA controller:
    
     | ------------[ cut here ]------------
     | WARNING: CPU: 2 PID: 373 at kernel/dma/mapping.c:235 dma_map_resource+0x68/0xc0
     | Modules linked in: spi_rockchip(+) fuse
     | CPU: 2 PID: 373 Comm: systemd-udevd Not tainted 5.14.0-rc7 #1
     | Hardware name: Pine64 Rock64 (DT)
     | pstate: 80000005 (Nzcv daif -PAN -UAO -TCO BTYPE=--)
     | pc : dma_map_resource+0x68/0xc0
     | lr : pl330_prep_slave_fifo+0x78/0xd0
    
    This appears to be because dma_map_resource() is being called for a
    physical address which does not correspond to a memory address yet does
    have a valid 'struct page' due to the way in which the vmemmap is
    constructed.
    
    Prior to 16c9afc7 ("arm64/mm: drop HAVE_ARCH_PFN_VALID"), the arm64
    implementation of pfn_valid() called memblock_is_memory() to return
    'false' for such regions and the DMA mapping request would proceed.
    However, now that we are using the generic implementation where only the
    presence of the memory map entry is considered, we return 'true' and
    erroneously fail with DMA_MAPPING_ERROR because we identify the region
    as DRAM.
    
    Although fixing this in the DMA mapping code is arguably the right fix,
    it is a risky, cross-architecture change at this stage in the cycle. So
    just revert arm64 back to its old pfn_valid() implementation for v5.14.
    The change to the generic pfn_valid() code is preserved from the original
    patch, so as to avoid impacting other architectures.
    
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    Cc: Robin Murphy <robin.murphy@arm.com>
    Cc: Mike Rapoport <rppt@kernel.org>
    Cc: Anshuman Khandual <anshuman.khandual@arm.com>
    Cc: Christoph Hellwig <hch@lst.de>
    Reported-by: default avatarAlex Bee <knaerzche@gmail.com>
    Link: https://lore.kernel.org/r/d3a3c828-b777-faf8-e901-904995688437@gmail.comSigned-off-by: default avatarWill Deacon <will@kernel.org>
    3eb9cdff
init.c 15.4 KB