[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