[PATCH v9 02/12] iommu/arm-smmu-v3: Add a helper to drain cmd queues
Jason Gunthorpe
jgg at nvidia.com
Tue Aug 25 09:36:11 PDT 2026
> [ ... 36 lines skipped ... ]
> + if (queue_empty(llq))
[Severity: High]
Does polling for an empty CMDQ actually guarantee that commands have completed?
queue_empty() relies on the SMMU consumer register equaling the producer
pointer. However, for CMD_SYNC, the SMMU advances the consumer register
immediately upon consumption, not upon completion. Suspending the SMMU while
commands like ATC_INV are still in-flight could abort them, leaving stale
translations in the device ATC and causing submitters to time out.
This seems broadly wrong, but it doesn't seem explained very well,
maybe put a comment above the function something like
The caller must have ensured that no concurrent command submission
can happen. Thus the entry at the PROD must be a CMD_SYNC due to how
all submitters generate commands. Waiting for PROD==CONS guarentees
completion of the sync and all prior work and thus idle HW.
I don't think the other substantive remarks are valid.
The Werror thing is right, every patch should compile alone without
warnings. Sometimes people add __maybe_unused to accomplish this..
> [ ... 19 lines skipped ... ]
[Severity: High]
Does this logic miss commands routed to secondary queues?
The driver supports routing commands, specifically ATC_INV, to secondary
queues (like the Tegra241 CMDQV virtual queues) via get_secondary_cmdq().
By strictly hardcoding the poll to smmu->cmdq.q, we ignore secondary queues.
If the SMMU suspends while ATC_INV commands are processing there, they could
be dropped.
Yes, I think the ordering is wrong, to keep them as different patches
iommu/tegra241-cmdqv: Add a helper to drain VCMDQs
Should come first, adding the op callback, then this patch would have
the hunk completing the function so the newly introduced function
works completely.
Otherwise the approach looks OK to me
Reviewed-by: Jason Gunthorpe <jgg at nvidia.com>
--
Jason
More information about the linux-arm-kernel
mailing list