[PATCH 2/9] iommu/arm-smmu-v3: Use the HW arm_smmu_cmd in cmdq selection functions
Pranjal Shrivastava
praan at google.com
Fri May 8 09:58:25 PDT 2026
On Fri, May 08, 2026 at 12:54:32PM -0300, Jason Gunthorpe wrote:
> On Fri, May 08, 2026 at 07:47:45AM +0000, Pranjal Shrivastava wrote:
> > On Fri, May 01, 2026 at 11:29:11AM -0300, Jason Gunthorpe wrote:
> > > Start removing the use of struct arm_smmu_cmdq_ent, starting at the
> > > lower levels of the call chain. Change the functions that determine what
> > > cmdq to issue the batch to into using struct arm_smmu_cmd directly.
> > >
> > > Signed-off-by: Jason Gunthorpe <jgg at nvidia.com>
> > > ---
> > > drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c | 47 ++++++++++++-------
> > > drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h | 8 ++--
> > > .../iommu/arm/arm-smmu-v3/tegra241-cmdqv.c | 8 ++--
> > > 3 files changed, 38 insertions(+), 25 deletions(-)
> >
> > [...]
> >
> > > index = cmds->num * CMDQ_ENT_DWORDS;
> > > - if (unlikely(arm_smmu_cmdq_build_cmd(&cmds->cmds[index], cmd))) {
> > > - dev_warn(smmu->dev, "ignoring unknown CMDQ opcode 0x%x\n",
> > > - cmd->opcode);
> > > - return;
> > > - }
> > > -
> > > + memcpy(&cmds->cmds[index], cmd.data, sizeof(cmd.data));
> > > cmds->num++;
> > > }
> >
> > The memcpy is a temporary step and goes way in Patch 4.
>
> To be clear patch 4 still has the memcpy:
>
> - index = cmds->num * CMDQ_ENT_DWORDS;
> - memcpy(&cmds->cmds[index], cmd.data, sizeof(cmd.data));
> - cmds->num++;
> + cmds->cmds[cmds->num++] = cmd;
> ^^^^^^^^^^^
>
> The compiler just builds it.
>
> The flow evolution is:
>
> Now:
> struct arm_smmu_cmdq_ent (stack) -> arm_smmu_cmdq_build_cmd (batch) -> memcpy (queue)
> Here:
> struct arm_smmu_cmdq_ent (stack) -> arm_smmu_cmdq_build_cmd (stack) -> memcpy (batch) -> memcpy (queue)
> Done:
> struct arm_smmu_cmd (stack) -> memcpy (batch) -> memcpy (queue)
>
> So the net result is the same before/after this series, we just carry
> an extra stack copy till the last patch.
Right that makes sense. N
Thanks,
Praan
More information about the linux-arm-kernel
mailing list