Re: [PATCH 1/4] NTB: ntb_transport: Handle remapped contiguous region in vmalloc space
From: Koichiro Den
Date: Mon Oct 27 2025 - 21:14:10 EST
On Mon, Oct 27, 2025 at 10:30:52AM -0600, Logan Gunthorpe wrote:
>
>
> On 2025-10-26 18:43, Koichiro Den wrote:
> > The RX buffer virtual address may reside in vmalloc space depending on
> > the allocation path, where virt_to_page() is invalid.
> >
> > Use a helper that chooses vmalloc_to_page() or virt_to_page() as
> > appropriate. This is safe since the buffer is guaranteed to be
> > physically contiguous.
>
> I think this statement needs some explanation.
>
> vmalloc memory is generally not contiguous and using vmalloc_to_page()
> like this seems very questionable.
Yes generally it is, which is why I wrote the last sentence "... since the
buffer is guaranteed to be physically contiguous."
>
> I did a very quick look and found that "offset" may come from
> dma_alloc_attrs() which can also return coherent memory that would be in
> vmalloc space and would be contiguous.
>
> However, in my cursory look, it appears that the kernel address returned
> by dma_alloc_attrs() is eventually passed to dma_map_page() in order to
> obtain the dma address a second time. This is really ugly, and almost
> certainly not expected by the dma layer.
>
> This requires a bit of a change, but it seems to me that if
> dma_alloc_attrs() is used, the dma address it returns should be used
> directly and a second map should be avoided completely. Then we wouldn't
> need the unusual use of vmalloc_to_page().
I agree there's room for improvement around this "double" mapping.
I'll think about a follow-up patch to clean this up.
>
> At the very least, I think these issues need to be mentioned in the
> commit message.
As for the commit message, I think adding one more line like:
"See relevant commit 061a785a114f ("ntb: Force physically contiguous allocation of rx ring buffers")"
should be sufficient. What do you think?
Thanks for reviewing.
-Koichiro
>
> Logan