is dma_mapping_error() check necessary for dma_alloc_noncoherent()?

Baochen Qiang <[email protected]>
Newsgroups org.infradead.lists.ath11k,dev.linux.lists.iommu,org.kernel.vger.linux-kernel
Message-ID <[email protected]>
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()?
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.