All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jason Gunthorpe <jgg@ziepe.ca>
To: "Aneesh Kumar K.V" <aneesh.kumar@kernel.org>
Cc: iommu@lists.linux.dev, linux-kernel@vger.kernel.org,
	robin.murphy@arm.com, m.szyprowski@samsung.com, will@kernel.org,
	maz@kernel.org, suzuki.poulose@arm.com, catalin.marinas@arm.com,
	jiri@resnulli.us, Mostafa Saleh <smostafa@google.com>
Subject: Re: [PATCH v2 6/8] dma-direct: make dma_direct_map_phys() honor DMA_ATTR_CC_SHARED
Date: Fri, 24 Apr 2026 19:41:27 -0300	[thread overview]
Message-ID: <20260424224127.GC804026@ziepe.ca> (raw)
In-Reply-To: <yq5apl3rczmj.fsf@kernel.org>

On Wed, Apr 22, 2026 at 11:20:28AM +0530, Aneesh Kumar K.V wrote:
> >> -			if (is_swiotlb_active(dev) &&
> >> -			    !(attrs & DMA_ATTR_REQUIRE_COHERENT))
> >> -				return swiotlb_map(dev, phys, size, dir, attrs);
> >> +		dma_addr = phys_to_dma_encrypted(dev, phys);
> >> +	}
> >>  
> >> -			goto err_overflow;
> >> -		}
> >> +	if (unlikely(!dma_capable(dev, dma_addr, size, true)) ||
> >> +	    dma_kmalloc_needs_bounce(dev, size, dir)) {
> >> +		if (is_swiotlb_active(dev) &&
> >> +		    !(attrs & DMA_ATTR_REQUIRE_COHERENT))
> >> +			return swiotlb_map(dev, phys, size, dir, attrs);
> >> +		goto err_overflow;
> >>  	}
> >
> > Then this movement shouldn't be needed?
> 
> I am still not clear about the use of DMA_ATTR_CC_SHARED here. If the
> resulting DMA address is not dma_capable, I was expecting that we should
> fall back to swiotlb_map().

"resulting" ? From what?

The user provides an address. If the provided address is marked
DMA_ATTR_CC_SHARED, then dma_capable should succeed on a CC
system. Otherwise if !DMA_ATTR_CC_SHARED dma_capable must require T=1,
or fail if T=0.

> That was the intention behind this change.
> However, the other email thread suggests that DMA_ATTR_CC_SHARED is
> always used with swiotlb_force_bounce(). I think we should address that.
> If we do, the goal here would be to check dma_capable for both shared
> and private addresses.

The flow I think should be

 if (force swiotlb)
    then do swiotlb

 if (!dma_capable())
    then do swiotlb

 if (kmalloc_needs_bounce())
    then do swiotlb

 otherwise use the provided phys_addr directly

ie stop using force swiotlb to handle T=0, instead have dma_capable
directly check T together with DMA_ATTR_CC_SHARED.

> For private/protected addresses, swiotlb_map() will currently fail with
> DMA_MAPPING_ERROR because the default io_tlb_mem (dev->dma_io_tlb_mem)
> is decrypted by default

This is a bug in swiotlb. swiotlb must *always* returns something that
is usable by the device, or it is broken. ie the pa it picks must pass
dma_capable:

It must return a buffer that falls within the dma mask

It must return an unprotected buffer if the device is T=0

It must return a protected buffer if the device is T=1 (ie it should
not choose an unprotected buffer just because DMA_ATTR_CC_SHARED, we
might be bouncing because the device dma mask can't reach the
unprotected adress space)

So, when the device is switched to T=1 something also has to go and
fix swiotlb so it is using T=1 memory too, and there should be
defensive WARN_ONs in the swiotlb path that the memory it picked is
suitable.

Jason

  parent reply	other threads:[~2026-04-24 22:41 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-04-20  6:14 [PATCH v2 0/8] dma-mapping: Use DMA_ATTR_CC_SHARED through direct, pool and swiotlb paths Aneesh Kumar K.V (Arm)
2026-04-20  6:14 ` [PATCH v2 1/8] dma-direct: swiotlb: handle swiotlb alloc/free outside __dma_direct_alloc_pages Aneesh Kumar K.V (Arm)
2026-04-20  6:14 ` [PATCH v2 2/8] dma-direct: use DMA_ATTR_CC_SHARED in alloc/free paths Aneesh Kumar K.V (Arm)
2026-04-20  6:14 ` [PATCH v2 3/8] dma-pool: track decrypted atomic pools and select them via attrs Aneesh Kumar K.V (Arm)
2026-04-20  6:14 ` [PATCH v2 4/8] dma: swiotlb: track pool encryption state and honor DMA_ATTR_CC_SHARED Aneesh Kumar K.V (Arm)
2026-04-20  6:14 ` [PATCH v2 5/8] dma-mapping: make dma_pgprot() " Aneesh Kumar K.V (Arm)
2026-04-20  6:14 ` [PATCH v2 6/8] dma-direct: make dma_direct_map_phys() " Aneesh Kumar K.V (Arm)
2026-04-21 12:29   ` Jason Gunthorpe
2026-04-22  5:50     ` Aneesh Kumar K.V
2026-04-22  6:16       ` Aneesh Kumar K.V
2026-04-24 22:45         ` Jason Gunthorpe
2026-04-24 22:41       ` Jason Gunthorpe [this message]
2026-04-20  6:14 ` [PATCH v2 7/8] dma-direct: set decrypted flag for remapped DMA allocations Aneesh Kumar K.V (Arm)
2026-04-21 12:34   ` Jason Gunthorpe
2026-04-21 12:54     ` Suzuki K Poulose
2026-04-21 13:53       ` Jason Gunthorpe
2026-04-22  5:24         ` Aneesh Kumar K.V
2026-04-20  6:14 ` [PATCH v2 8/8] dma-direct: select DMA address encoding from DMA_ATTR_CC_SHARED Aneesh Kumar K.V (Arm)
2026-04-21 12:40 ` [PATCH v2 0/8] dma-mapping: Use DMA_ATTR_CC_SHARED through direct, pool and swiotlb paths Jason Gunthorpe

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=20260424224127.GC804026@ziepe.ca \
    --to=jgg@ziepe.ca \
    --cc=aneesh.kumar@kernel.org \
    --cc=catalin.marinas@arm.com \
    --cc=iommu@lists.linux.dev \
    --cc=jiri@resnulli.us \
    --cc=linux-kernel@vger.kernel.org \
    --cc=m.szyprowski@samsung.com \
    --cc=maz@kernel.org \
    --cc=robin.murphy@arm.com \
    --cc=smostafa@google.com \
    --cc=suzuki.poulose@arm.com \
    --cc=will@kernel.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.