Commit 1c04dcd8 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'dma-mapping-7.1-2026-05-22' of...

Merge tag 'dma-mapping-7.1-2026-05-22' of git://git.kernel.org/pub/scm/linux/kernel/git/mszyprowski/linux

Pull dma-mapping fixes from Marek Szyprowski:
 "Two minor updates for the DMA-mapping code, mainly fixing some rare
  corner cases (Petr Tesarik, Jianpeng Chang)"

* tag 'dma-mapping-7.1-2026-05-22' of git://git.kernel.org/pub/scm/linux/kernel/git/mszyprowski/linux:
  dma-mapping: move dma_map_resource() sanity check into debug code
  dma-direct: fix use of max_pfn
parents 23884007 af0c3f05
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -1251,7 +1251,14 @@ void debug_dma_map_phys(struct device *dev, phys_addr_t phys, size_t size,
	entry->direction = direction;
	entry->map_err_type = MAP_ERR_NOT_CHECKED;

	if (!(attrs & DMA_ATTR_MMIO)) {
	if (attrs & DMA_ATTR_MMIO) {
		unsigned long pfn = PHYS_PFN(phys);

		if (pfn_valid(pfn) && !PageReserved(pfn_to_page(pfn)))
			err_printk(dev, entry,
				   "dma_map_resource called for RAM address %pa\n",
				   &phys);
	} else {
		check_for_stack(dev, phys);

		if (!PhysHighMem(phys))
+2 −2
Original line number Diff line number Diff line
@@ -39,7 +39,7 @@ static inline struct page *dma_direct_to_page(struct device *dev,

u64 dma_direct_get_required_mask(struct device *dev)
{
	phys_addr_t phys = (phys_addr_t)(max_pfn - 1) << PAGE_SHIFT;
	phys_addr_t phys = ((phys_addr_t)max_pfn << PAGE_SHIFT) - 1;
	u64 max_dma = phys_to_dma_direct(dev, phys);

	return (1ULL << (fls64(max_dma) - 1)) * 2 - 1;
@@ -553,7 +553,7 @@ int dma_direct_mmap(struct device *dev, struct vm_area_struct *vma,

int dma_direct_supported(struct device *dev, u64 mask)
{
	u64 min_mask = (max_pfn - 1) << PAGE_SHIFT;
	u64 min_mask = ((u64)max_pfn << PAGE_SHIFT) - 1;

	/*
	 * Because 32-bit DMA masks are so common we expect every architecture
+0 −4
Original line number Diff line number Diff line
@@ -365,10 +365,6 @@ EXPORT_SYMBOL(dma_unmap_sg_attrs);
dma_addr_t dma_map_resource(struct device *dev, phys_addr_t phys_addr,
		size_t size, enum dma_data_direction dir, unsigned long attrs)
{
	if (IS_ENABLED(CONFIG_DMA_API_DEBUG) &&
	    WARN_ON_ONCE(pfn_valid(PHYS_PFN(phys_addr))))
		return DMA_MAPPING_ERROR;

	return dma_map_phys(dev, phys_addr, size, dir, attrs | DMA_ATTR_MMIO);
}
EXPORT_SYMBOL(dma_map_resource);