Re: is dma_mapping_error() check necessary for dma_alloc_noncoherent()?

Marek Szyprowski <[email protected]>
Newsgroups org.infradead.lists.ath11k,dev.linux.lists.iommu,org.kernel.vger.linux-kernel
Message-ID <[email protected]>
On 26.08.2025 11:44, Baochen Qiang wrote:
> Hi guys,
>
> I have a driver which allocate noncoherent DMA buffer and get the returned CPU addr tested:
>
> 	vaddr_unaligned = dma_alloc_noncoherent(ab->dev, rx_tid->unaligned_size, &paddr,
> 						DMA_BIDIRECTIONAL, GFP_ATOMIC);
> 	if (!vaddr_unaligned) {
> 		spin_unlock_bh(&ab->base_lock);
> 		return -ENOMEM;
> 	}
>
> while free the buffer
>
> 	dma_free_noncoherent(ab->dev, rx_tid->unaligned_size,
> 			     rx_tid->vaddr_unaligned,
> 			     rx_tid->paddr_unaligned, DMA_BIDIRECTIONAL);
>
> I get below warnings:
>
>   DMA-API: ath11k_pci 0000:03:00.0: device driver failed to check map error[device
> address=0x00000000f3ad7000] [size=639 bytes] [mapped as single]
>   WARNING: CPU: 15 PID: 64303 at kernel/dma/debug.c:1036 check_unmap+0x7e2/0x950
>   RIP: 0010:check_unmap+0x7e2/0x950
>   Call Trace:
>    <TASK>
>    ? free_to_partial_list+0x9d/0x350
>    debug_dma_unmap_page+0xac/0xc0
>    ? debug_smp_processor_id+0x17/0x20
>    ? rcu_is_watching+0x13/0x70
>    dma_free_pages+0x56/0x180
>    [...]
>    </TASK>
>   ---[ end trace 0000000000000000 ]---
>   DMA-API: Mapped at:
>    debug_dma_map_page+0x7c/0x140
>    dma_alloc_pages+0x74/0x220
>    [...]
>
> Checking code gives me the impression that I should do dma_mapping_error() check as well.
> And indeed with below diff the warning is gone:
>
> +       dma_mapping_error(ab->dev, paddr);
>
> However this does not make sense to me since IMO testing the CPU address is good enough, I
> can not imagine a valid case where DMA alloc/map fails while returning a valid CPU
> address, no?
>
> If I was right, should we remove invocation to debug_dma_map_page() in dma_alloc_pages()?

Simply replace "if (!vaddr_unaligned)" with "if 
dma_mapping_error(ab->dev, paddr)" and the debug code will be happy.

Best regards
-- 
Marek Szyprowski, PhD
Samsung R&D Institute Poland
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.