Thread (32 messages) 32 messages, 7 authors, 2021-09-22

Re: [BUG 5.14] arm64/mm: dma memory mapping fails (in some cases)

From: Catalin Marinas <catalin.marinas@arm.com>
Date: 2021-08-25 17:15:59
Also in: linux-mm, lkml

On Wed, Aug 25, 2021 at 01:12:37PM +0200, David Hildenbrand wrote:
On 25.08.21 12:55, Catalin Marinas wrote:
quoted
On Wed, Aug 25, 2021 at 12:38:31PM +0200, David Hildenbrand wrote:
quoted
On 25.08.21 12:20, Catalin Marinas wrote:
quoted
I can see the documentation for pfn_valid() does not claim anything more
than the presence of an memmap entry. But I wonder whether the confusion
is wider-spread than just the DMA code. At a quick grep, try_ram_remap()
assumes __va() can be used on pfn_valid(), though I suspect it relies on
the calling function to check that the resource was RAM. The arm64
kern_addr_valid() returns true based on pfn_valid() and kcore.c uses
standard memcpy on it, which wouldn't work for I/O (should we change
this check to pfn_is_map_memory() for arm64?).
kern_addr_valid() checks that there is a direct map entry, and that the
mapped address has a valid mmap. (copied from x86-64)
It checks that there is a va->pa mapping, not necessarily in the linear
map as it walks the page tables. So for some I/O range that happens to
be mapped but which was in close proximity to RAM so that pfn_valid() is
true, kern_addr_valid() would return true. I don't thin that was the
intention.
quoted
Would you expect to have a direct map for memory holes and similar (IOW,
!System RAM)?
No, but we with the generic pfn_valid(), it may return true for mapped
MMIO (with different attributes than the direct map).
Ah, right. But can we actually run into that via kcore?

kcore builds the RAM list via walk_system_ram_range(), IOW the resource
tree. And we end up calling kern_addr_valid() only on KCORE_RAM,
KCORE_VMEMMAP and KCORE_TEXT.
It's probably fine but I'd rather do some check of the other call sites
before attempting to move arm64 to the generic pfn_valid() again.

-- 
Catalin

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help