All of lore.kernel.org
 help / color / mirror / Atom feed
From: Peng Fan <peng.fan@oss.nxp.com>
To: "Jürgen Groß" <jgross@suse.com>
Cc: Stefano Stabellini <sstabellini@kernel.org>,
	Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>,
	xen-devel@lists.xenproject.org, iommu@lists.linux.dev,
	linux-kernel@vger.kernel.org, Peng Fan <peng.fan@nxp.com>
Subject: Re: [PATCH RFC] xen/swiotlb: avoid arch_sync_dma_* on per-device DMA memory
Date: Fri, 24 Apr 2026 15:03:45 +0800	[thread overview]
Message-ID: <aesV0ai8SM89cb3j@shlinux89> (raw)
In-Reply-To: <f6cf1d46-9d2e-4b52-a6b9-fb45d01b874f@suse.com>

Hi Juergen,

On Mon, Apr 20, 2026 at 02:19:34PM +0200, Jürgen Groß wrote:
>On 15.04.26 17:08, Peng Fan (OSS) wrote:
>> From: Peng Fan <peng.fan@nxp.com>
>> 
>> On ARM64, arch_sync_dma_for_{cpu,device}() assumes that the
>> physical address passed in refers to normal RAM that is part of the
>> kernel linear(direct) mapping, as it unconditionally derives a CPU
>> virtual address via phys_to_virt().
>> 
>> With Xen swiotlb, devices may use per-device coherent DMA memory,
>> such as reserved-memory regions described by 'shared-dma-pool',
>> which are assigned to dev->dma_mem. These regions may be marked
>> no-map in DT and therefore are not part of the kernel linear map.
>> In such cases, pfn_valid() still returns true, but phys_to_virt()
>> is not valid and cache maintenance via arch_sync_dma_* will fault.
>> 
>> Prevent this by excluding devices with a private DMA memory pool
>> (dev->dma_mem) from the arch_sync_dma_* fast path, and always
>> fall back to xen_dma_sync_* for those devices to avoid invalid
>> phys_to_virt() conversions for no-map DMA memory while preserving the
>> existing fast path for normal, linear-mapped RAM.
>> 
>> Signed-off-by: Peng Fan <peng.fan@nxp.com>
>> ---
>>   drivers/xen/swiotlb-xen.c | 17 +++++++++++++----
>>   1 file changed, 13 insertions(+), 4 deletions(-)
>> 
>> diff --git a/drivers/xen/swiotlb-xen.c b/drivers/xen/swiotlb-xen.c
>> index 2cbf2b588f5b20cfbf9e83a8339dc22092c9559a..b1445df99d9a8f1d18a83b8c413bada6e5579209 100644
>> --- a/drivers/xen/swiotlb-xen.c
>> +++ b/drivers/xen/swiotlb-xen.c
>> @@ -195,6 +195,11 @@ xen_swiotlb_free_coherent(struct device *dev, size_t size, void *vaddr,
>>   }
>>   #endif /* CONFIG_X86 */
>> +static inline bool dev_has_private_dma_pool(struct device *dev)
>> +{
>> +	return dev && dev->dma_mem;
>> +}
>> +
>
>I don't think this will compile on x86.

My bad, I only tried the build for ARM64. I use below changes, if it looks
good.

#ifdef CONFIG_ARM64
static inline bool dev_has_private_dma_pool(struct device *dev)
{
	return dev && dev->dma_mem;
}
#else
static inline bool dev_has_private_dma_pool(struct device *dev)
{
	return false;
}
#endif

Thanks,
Peng

>
>
>Juergen






  reply	other threads:[~2026-04-24  7:01 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-04-15 15:08 [PATCH RFC] xen/swiotlb: avoid arch_sync_dma_* on per-device DMA memory Peng Fan (OSS)
2026-04-20 12:19 ` Jürgen Groß
2026-04-24  7:03   ` Peng Fan [this message]
2026-04-24 23:15     ` Stefano Stabellini
2026-04-20 23:01 ` Jason Gunthorpe
2026-04-24  6:57   ` Peng Fan
2026-04-24 13:44     ` Jason Gunthorpe
2026-04-24 23:26 ` Stefano Stabellini
2026-05-02 11:08 ` kernel test robot

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=aesV0ai8SM89cb3j@shlinux89 \
    --to=peng.fan@oss.nxp.com \
    --cc=iommu@lists.linux.dev \
    --cc=jgross@suse.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=oleksandr_tyshchenko@epam.com \
    --cc=peng.fan@nxp.com \
    --cc=sstabellini@kernel.org \
    --cc=xen-devel@lists.xenproject.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.