Re: [PATCH 1/8] iommu: Lift and generalize the STE/CD update code from SMMUv3
From: Baolu Lu
Date: Tue Mar 17 2026 - 23:11:21 EST
On 3/16/26 17:51, Will Deacon wrote:
On Sat, Mar 14, 2026 at 04:13:27PM +0800, Baolu Lu wrote:
On 3/10/26 08:06, Samiullah Khawaja wrote:Shouldn't we move the SMMU driver over to this, rather than copy-pasting
On Mon, Mar 09, 2026 at 11:33:23PM +0000, Samiullah Khawaja wrote:
On Mon, Mar 09, 2026 at 02:06:41PM +0800, Lu Baolu wrote:
From: Jason Gunthorpe<jgg@xxxxxxxxxx>
Many IOMMU implementations store data structures in host memory that can
be quite big. The iommu is able to DMA read the host memory using an
atomic quanta, usually 64 or 128 bits, and will read an entry using
multiple quanta reads.
Updating the host memory datastructure entry while the HW is
concurrently
DMA'ing it is a little bit involved, but if you want to do this
hitlessly,
while never making the entry non-valid, then it becomes quite
complicated.
entry_sync is a library to handle this task. It works on the notion of
"used bits" which reflect which bits the HW is actually sensitive to and
which bits are ignored by hardware. Many hardware specifications say
things like 'if mode is X then bits ABC are ignored'.
Using the ignored bits entry_sync can often compute a series of ordered
writes and flushes that will allow the entry to be updated while keeping
it valid. If such an update is not possible then entry will be made
temporarily non-valid.
A 64 and 128 bit quanta version is provided to support existing iommus.
Co-developed-by: Lu Baolu<baolu.lu@xxxxxxxxxxxxxxx>
Signed-off-by: Lu Baolu<baolu.lu@xxxxxxxxxxxxxxx>
Signed-off-by: Jason Gunthorpe<jgg@xxxxxxxxxx>
---
drivers/iommu/Kconfig | 14 +++
drivers/iommu/Makefile | 1 +
drivers/iommu/entry_sync.h | 66 +++++++++++++
drivers/iommu/entry_sync_template.h | 143 ++++++++++++++++++++++++++++
drivers/iommu/entry_sync.c | 68 +++++++++++++
5 files changed, 292 insertions(+)
create mode 100644 drivers/iommu/entry_sync.h
create mode 100644 drivers/iommu/entry_sync_template.h
create mode 100644 drivers/iommu/entry_sync.c
everything? If not, then why is it in generic IOMMU code?
Yes. I will start to do this from the next version.
Thanks,
baolu