drivers/iommu/dma-iommu.c | 2 +- include/linux/dma-direct.h | 10 ++ include/linux/dma-map-ops.h | 2 +- include/linux/swiotlb.h | 7 +- kernel/dma/direct.c | 185 ++++++++++++++++++++++++++++-------- kernel/dma/direct.h | 25 ++--- kernel/dma/mapping.c | 16 +++- kernel/dma/pool.c | 154 +++++++++++++++++++----------- kernel/dma/swiotlb.c | 89 +++++++++++++---- 9 files changed, 355 insertions(+), 135 deletions(-)
This series propagates DMA_ATTR_CC_SHARED through the dma-direct,
dma-pool, and swiotlb paths so that encrypted and decrypted DMA buffers
are handled consistently.
Today, the direct DMA path mostly relies on force_dma_unencrypted() for
shared/decrypted buffer handling. This series consolidates the
force_dma_unencrypted() checks in the top-level functions and ensures
that the remaining DMA interfaces use DMA attributes to make the correct
decisions.
The series:
- moves swiotlb-backed allocations out of __dma_direct_alloc_pages(),
- propagates DMA_ATTR_CC_SHARED through the dma-direct alloc/free
paths,
- teaches the atomic DMA pools to track encrypted versus decrypted
state,
- tracks swiotlb pool encryption state and enforces strict pool
selection,
- centralizes encrypted/decrypted pgprot handling in dma_pgprot() using
DMA attributes,
- makes dma_direct_map_phys() choose the DMA address encoding from
attrs, and
- uses the selected swiotlb pool state to derive the returned DMA
address.
Changes from v1:
* rebased to latest kernel (change from DMA_ATTR_CC_DECRYPTED -> DMA_ATTR_CC_SHARED)
* Update alloc path such that DMA_ATTR_CC_SHARED s not a caller-visible attribute.
Aneesh Kumar K.V (Arm) (8):
dma-direct: swiotlb: handle swiotlb alloc/free outside
__dma_direct_alloc_pages
dma-direct: use DMA_ATTR_CC_SHARED in alloc/free paths
dma-pool: track decrypted atomic pools and select them via attrs
dma: swiotlb: track pool encryption state and honor DMA_ATTR_CC_SHARED
dma-mapping: make dma_pgprot() honor DMA_ATTR_CC_SHARED
dma-direct: make dma_direct_map_phys() honor DMA_ATTR_CC_SHARED
dma-direct: set decrypted flag for remapped DMA allocations
dma-direct: select DMA address encoding from DMA_ATTR_CC_SHARED
drivers/iommu/dma-iommu.c | 2 +-
include/linux/dma-direct.h | 10 ++
include/linux/dma-map-ops.h | 2 +-
include/linux/swiotlb.h | 7 +-
kernel/dma/direct.c | 185 ++++++++++++++++++++++++++++--------
kernel/dma/direct.h | 25 ++---
kernel/dma/mapping.c | 16 +++-
kernel/dma/pool.c | 154 +++++++++++++++++++-----------
kernel/dma/swiotlb.c | 89 +++++++++++++----
9 files changed, 355 insertions(+), 135 deletions(-)
base-commit: c1f49dea2b8f335813d3b348fd39117fb8efb428
--
2.43.0
On Mon, Apr 20, 2026 at 11:44:07AM +0530, Aneesh Kumar K.V (Arm) wrote: > This series propagates DMA_ATTR_CC_SHARED through the dma-direct, > dma-pool, and swiotlb paths so that encrypted and decrypted DMA buffers > are handled consistently. > > Today, the direct DMA path mostly relies on force_dma_unencrypted() for > shared/decrypted buffer handling. This series consolidates the > force_dma_unencrypted() checks in the top-level functions and ensures > that the remaining DMA interfaces use DMA attributes to make the correct > decisions. > > The series: > - moves swiotlb-backed allocations out of __dma_direct_alloc_pages(), > - propagates DMA_ATTR_CC_SHARED through the dma-direct alloc/free > paths, > - teaches the atomic DMA pools to track encrypted versus decrypted > state, > - tracks swiotlb pool encryption state and enforces strict pool > selection, > - centralizes encrypted/decrypted pgprot handling in dma_pgprot() using > DMA attributes, > - makes dma_direct_map_phys() choose the DMA address encoding from > attrs, and > - uses the selected swiotlb pool state to derive the returned DMA > address. I think this is very reasonable looking. Jason
On Mon, Apr 20, 2026 at 11:44:07AM +0530, Aneesh Kumar K.V (Arm) wrote: > This series propagates DMA_ATTR_CC_SHARED through the dma-direct, > dma-pool, and swiotlb paths so that encrypted and decrypted DMA buffers > are handled consistently. > > Today, the direct DMA path mostly relies on force_dma_unencrypted() for > shared/decrypted buffer handling. This series consolidates the > force_dma_unencrypted() checks in the top-level functions and ensures > that the remaining DMA interfaces use DMA attributes to make the correct > decisions. I tested this series on protected KVM and did not see regressions. Tested-by: Mostafa Saleh <smostafa@google.com> Next, I will: - Send the pKVM CC patch separately. - Review this series. Thanks, Mostafa > > The series: > - moves swiotlb-backed allocations out of __dma_direct_alloc_pages(), > - propagates DMA_ATTR_CC_SHARED through the dma-direct alloc/free > paths, > - teaches the atomic DMA pools to track encrypted versus decrypted > state, > - tracks swiotlb pool encryption state and enforces strict pool > selection, > - centralizes encrypted/decrypted pgprot handling in dma_pgprot() using > DMA attributes, > - makes dma_direct_map_phys() choose the DMA address encoding from > attrs, and > - uses the selected swiotlb pool state to derive the returned DMA > address. > > Changes from v1: > * rebased to latest kernel (change from DMA_ATTR_CC_DECRYPTED -> DMA_ATTR_CC_SHARED) > * Update alloc path such that DMA_ATTR_CC_SHARED s not a caller-visible attribute. > > Aneesh Kumar K.V (Arm) (8): > dma-direct: swiotlb: handle swiotlb alloc/free outside > __dma_direct_alloc_pages > dma-direct: use DMA_ATTR_CC_SHARED in alloc/free paths > dma-pool: track decrypted atomic pools and select them via attrs > dma: swiotlb: track pool encryption state and honor DMA_ATTR_CC_SHARED > dma-mapping: make dma_pgprot() honor DMA_ATTR_CC_SHARED > dma-direct: make dma_direct_map_phys() honor DMA_ATTR_CC_SHARED > dma-direct: set decrypted flag for remapped DMA allocations > dma-direct: select DMA address encoding from DMA_ATTR_CC_SHARED > > drivers/iommu/dma-iommu.c | 2 +- > include/linux/dma-direct.h | 10 ++ > include/linux/dma-map-ops.h | 2 +- > include/linux/swiotlb.h | 7 +- > kernel/dma/direct.c | 185 ++++++++++++++++++++++++++++-------- > kernel/dma/direct.h | 25 ++--- > kernel/dma/mapping.c | 16 +++- > kernel/dma/pool.c | 154 +++++++++++++++++++----------- > kernel/dma/swiotlb.c | 89 +++++++++++++---- > 9 files changed, 355 insertions(+), 135 deletions(-) > > > base-commit: c1f49dea2b8f335813d3b348fd39117fb8efb428 > -- > 2.43.0 >
Mostafa Saleh <smostafa@google.com> writes: > On Mon, Apr 20, 2026 at 11:44:07AM +0530, Aneesh Kumar K.V (Arm) wrote: >> This series propagates DMA_ATTR_CC_SHARED through the dma-direct, >> dma-pool, and swiotlb paths so that encrypted and decrypted DMA buffers >> are handled consistently. >> >> Today, the direct DMA path mostly relies on force_dma_unencrypted() for >> shared/decrypted buffer handling. This series consolidates the >> force_dma_unencrypted() checks in the top-level functions and ensures >> that the remaining DMA interfaces use DMA attributes to make the correct >> decisions. > > I tested this series on protected KVM and did not see regressions. > Tested-by: Mostafa Saleh <smostafa@google.com> > Thanks, I will pick the Tested-by: for the v5 series. > > Next, I will: > - Send the pKVM CC patch separately. > - Review this series. > I will send a v6 dropping the pkvm patch -aneesh
On Tue, Jun 2, 2026 at 3:25 PM Mostafa Saleh <smostafa@google.com> wrote: > > On Mon, Apr 20, 2026 at 11:44:07AM +0530, Aneesh Kumar K.V (Arm) wrote: > > This series propagates DMA_ATTR_CC_SHARED through the dma-direct, > > dma-pool, and swiotlb paths so that encrypted and decrypted DMA buffers > > are handled consistently. > > > > Today, the direct DMA path mostly relies on force_dma_unencrypted() for > > shared/decrypted buffer handling. This series consolidates the > > force_dma_unencrypted() checks in the top-level functions and ensures > > that the remaining DMA interfaces use DMA attributes to make the correct > > decisions. > > I tested this series on protected KVM and did not see regressions. > Tested-by: Mostafa Saleh <smostafa@google.com> > Sorry, that was supposed to be for v5: https://lore.kernel.org/all/20260522042815.370873-1-aneesh.kumar@kernel.org/ Thanks, Mostafa > Next, I will: > - Send the pKVM CC patch separately. > - Review this series. > > Thanks, > Mostafa > > > > > The series: > > - moves swiotlb-backed allocations out of __dma_direct_alloc_pages(), > > - propagates DMA_ATTR_CC_SHARED through the dma-direct alloc/free > > paths, > > - teaches the atomic DMA pools to track encrypted versus decrypted > > state, > > - tracks swiotlb pool encryption state and enforces strict pool > > selection, > > - centralizes encrypted/decrypted pgprot handling in dma_pgprot() using > > DMA attributes, > > - makes dma_direct_map_phys() choose the DMA address encoding from > > attrs, and > > - uses the selected swiotlb pool state to derive the returned DMA > > address. > > > > Changes from v1: > > * rebased to latest kernel (change from DMA_ATTR_CC_DECRYPTED -> DMA_ATTR_CC_SHARED) > > * Update alloc path such that DMA_ATTR_CC_SHARED s not a caller-visible attribute. > > > > Aneesh Kumar K.V (Arm) (8): > > dma-direct: swiotlb: handle swiotlb alloc/free outside > > __dma_direct_alloc_pages > > dma-direct: use DMA_ATTR_CC_SHARED in alloc/free paths > > dma-pool: track decrypted atomic pools and select them via attrs > > dma: swiotlb: track pool encryption state and honor DMA_ATTR_CC_SHARED > > dma-mapping: make dma_pgprot() honor DMA_ATTR_CC_SHARED > > dma-direct: make dma_direct_map_phys() honor DMA_ATTR_CC_SHARED > > dma-direct: set decrypted flag for remapped DMA allocations > > dma-direct: select DMA address encoding from DMA_ATTR_CC_SHARED > > > > drivers/iommu/dma-iommu.c | 2 +- > > include/linux/dma-direct.h | 10 ++ > > include/linux/dma-map-ops.h | 2 +- > > include/linux/swiotlb.h | 7 +- > > kernel/dma/direct.c | 185 ++++++++++++++++++++++++++++-------- > > kernel/dma/direct.h | 25 ++--- > > kernel/dma/mapping.c | 16 +++- > > kernel/dma/pool.c | 154 +++++++++++++++++++----------- > > kernel/dma/swiotlb.c | 89 +++++++++++++---- > > 9 files changed, 355 insertions(+), 135 deletions(-) > > > > > > base-commit: c1f49dea2b8f335813d3b348fd39117fb8efb428 > > -- > > 2.43.0 > >
© 2016 - 2026 Red Hat, Inc.