Hi Pierrick,

On 8/21/2026 6:29 AM, Pierrick Bouvier wrote:
On 8/13/2026 9:25 AM, Tao Tang wrote:
Refactor CMDQ invalidation paths to carry security state and apply cache
invalidation per sec_sid instead of globally. Add separate helpers for
invalidating all entries and for invalidating entries belonging to one
valid sec_sid.

In smmuv3, propagate the command queue sec_sid and command SSec through
CFGI and TLBI handling, and gate VMID use on the stage-2 capability of
the selected command queue, including SMMU_S_IDR1.SEL2 for a Secure
Command queue.

Keep acceleration and IOMMU notifier propagation Non-secure-only.
Commands targeting a programming interface other than Non-secure do not
reach the accelerated backend or Non-secure notifiers, while Non-secure
stage-1 CMD_TLBI_NH_ALL remains forwarded to the host.

Include the command queue SEC_SID and target SEC_SID in the relevant
invalidation tracepoints.

Signed-off-by: Tao Tang <[email protected]>
---
  hw/arm/smmu-common.c         | 100 ++++++++++++++++++++++++++++-
  hw/arm/smmuv3-accel-stubs.c  |   6 +-
  hw/arm/smmuv3-accel.c        |  30 +++++++--
  hw/arm/smmuv3-accel.h        |   6 +-
  hw/arm/smmuv3.c              | 121 ++++++++++++++++++++++++++---------
  hw/arm/trace-events          |  12 ++--
  include/hw/arm/smmu-common.h |   6 ++
  7 files changed, 231 insertions(+), 50 deletions(-)

Given this patch, would that be simpler to have multiple iotlb hashtable
per sec_sid? This way, invalidation becomes trivial.

It has been long time since last version, so I forgot if there was a
specific reason to keep a single table and add sec_sid to each entry.


I agree that separate IOTLB tables per SEC_SID would simplify the namespace-wide invalidation in the current model. Mostafa made the same suggestion in v4 [1], and I agreed to rework it for v5.

As Eric later pointed out [2], SEC_SID is not itself the architectural TLB tag. It selects the programming interface and Stream table, while cached translations are identified by the effective StreamWorld and the applicable ASID/VMID.

My reason for retaining the single table is therefore patch scope, not an architectural objection to per-SEC_SID tables. This series models one StreamWorld per SEC_SID and uses SEC_SID as a temporary discriminator, as described in the definition of struct SMMUIOTLBKey [3]. I would prefer to keep the cache topology unchanged here and address the layout together with full StreamWorld tagging and invalidation in a follow-up series.

Eric, would you prefer that v6 adopt the per-SEC_SID split suggested by Pierrick and Mostafa, or keep the current layout and defer the topology decision to the StreamWorld work? I am happy to follow the preferred direction.

[1] https://lore.kernel.org/qemu-devel/[email protected]/
[2] https://lore.kernel.org/qemu-devel/[email protected]/ [3] https://lore.kernel.org/qemu-devel/[email protected]/


Regards,
Pierrick


Best regards,

Tao


Reply via email to