Re: [RFC] dma/mapping.c: WARN_ONCE on dma_addressing_limited() being true
From: Christoph Hellwig
Date: Mon Apr 14 2025 - 01:54:34 EST
On Sat, Apr 12, 2025 at 07:41:10PM +1000, Balbir Singh wrote:
> In the debug and resolution of an issue involving forced use of bounce
> buffers, 7170130e4c72 ("x86/mm/init: Handle the special case of device
> private pages in add_pages(), to not increase max_pfn and trigger
> dma_addressing_limited() bounce buffers"). It would have been easier
> to debug the issue if dma_addressing_limited() had a warning about a
> device not being able to address all of memory and thus forcing all
> accesses through a bounce buffer. Please see[2].
>
> A warning would have let the user of the system know that in their
> particular case, use_dma32 is set due to the addressing limitation
> and this would impact performance of the driver in use.
>
> Implement a WARN_ONCE() to point to the potential use of bounce buffers
> when we hit the condition. When swiotlb is used,
> dma_addressing_limited() is used to determine the size of maximum dma
> buffer size in dma_direct_max_mapping_size(). The warning could be
> triggered in that check as well.
dma_addressing_limited is a perfectly expected condition, and returns
true for many devices and still plenty system configuation. A kernel
warning with a stacktrace is not acceptable for that. A simple one-line
dev_info might be ok, but could still be rather spammy on many systems.