Re: [PATCH v2 05/10] iommu/arm-smmu-v3: Flush iotlb in arm_smmu_iotlb_tag_free()

Nicolin Chen
2026-01-27T02:57:00Z

On Mon, Jan 26, 2026 at 05:08:33PM -0400, Jason Gunthorpe wrote:
> On Wed, Jan 21, 2026 at 05:24:23PM -0800, Nicolin Chen wrote:
> > static void arm_smmu_iotlb_tag_free(struct arm_smmu_inv *tag)
> > {
> > + struct arm_smmu_cmdq_ent cmd = {
> > + .opcode = tag->nsize_opcode,
> > + };
> > +
> > + if (tag->type == INV_TYPE_S1_ASID)
> > + cmd.tlbi.asid = tag->id;
> > + else
> > + cmd.tlbi.vmid = tag->id;
> > + arm_smmu_cmdq_issue_cmd_with_sync(tag->smmu, &cmd);
>
> I think in all these places checking the tag->type it is probably a
> good idea to not use a catch all else for vmid? We have many tag types
> and some should never come to this, or other, functions.

Or maybe we can add an assert function?

static inline void arm_smmu_inv_assert_iotlb_tag(struct arm_smmu_inv *inv)
{
WARN_ON(inv != INV_TYPE_S1_ASID && inv != INV_TYPE_S1_VMID &&
inv != INV_TYPE_S1_VMID_VSMMU);
}

Nicolin