On Fri, Sep 05, 2025 at 06:21:44PM +0200, Marek Szyprowski wrote: > On 02.09.2025 16:48, Leon Romanovsky wrote: > > From: Leon Romanovsky <leo...@nvidia.com> > > > > Convert the DMA direct mapping functions to accept physical addresses > > directly instead of page+offset parameters. The functions were already > > operating on physical addresses internally, so this change eliminates > > the redundant page-to-physical conversion at the API boundary. > > > > The functions dma_direct_map_page() and dma_direct_unmap_page() are > > renamed to dma_direct_map_phys() and dma_direct_unmap_phys() respectively, > > with their calling convention changed from (struct page *page, > > unsigned long offset) to (phys_addr_t phys). > > > > Architecture-specific functions arch_dma_map_page_direct() and > > arch_dma_unmap_page_direct() are similarly renamed to > > arch_dma_map_phys_direct() and arch_dma_unmap_phys_direct(). > > > > The is_pci_p2pdma_page() checks are replaced with DMA_ATTR_MMIO checks > > to allow integration with dma_direct_map_resource and dma_direct_map_phys() > > is extended to support MMIO path either. > > > > Reviewed-by: Jason Gunthorpe <j...@nvidia.com> > > Signed-off-by: Leon Romanovsky <leo...@nvidia.com> > > --- > > arch/powerpc/kernel/dma-iommu.c | 4 +-- > > include/linux/dma-map-ops.h | 8 ++--- > > kernel/dma/direct.c | 6 ++-- > > kernel/dma/direct.h | 57 +++++++++++++++++++++------------ > > kernel/dma/mapping.c | 8 ++--- > > 5 files changed, 49 insertions(+), 34 deletions(-)
<...> > > - if (unlikely(!dma_capable(dev, dma_addr, size, true)) || > > - dma_kmalloc_needs_bounce(dev, size, dir)) { > > - if (is_pci_p2pdma_page(page)) > > - return DMA_MAPPING_ERROR; > > - if (is_swiotlb_active(dev)) > > - return swiotlb_map(dev, phys, size, dir, attrs); > > - > > - dev_WARN_ONCE(dev, 1, > > - "DMA addr %pad+%zu overflow (mask %llx, bus limit > > %llx).\n", > > - &dma_addr, size, *dev->dma_mask, > > dev->bus_dma_limit); > > - return DMA_MAPPING_ERROR; > > + if (attrs & DMA_ATTR_MMIO) { > > + dma_addr = phys; > > + if (unlikely(dma_capable(dev, dma_addr, size, false))) > > "!dma_capable(dev, dma_addr, size, false)" in the above line. > > It took me a while to find this after noticing that this patchset breaks > booting some of me test systems. Ohh, sorry, I overlooked it. Do you expect from me v6? Thanks