On Mon, Jan 26, 2026 at 05:16:36PM -0400, Jason Gunthorpe wrote:
On Wed, Jan 21, 2026 at 05:24:24PM -0800, Nicolin Chen wrote:
quoted
VMID owned by a vSMMU should be allocated in the viommu_init callback, as
HW like tegra241-cmdqv needs to setup VINTF with the VMID.
Even the architected SMMU needs this, the VMS (not implemented in
Linux) should all share the same VMID for the same VM.
But for standard SMMU, the allocation/sharing could happen at the
device attachment to a nested (maybe bypass proxy) domain, right?
vmid is only needed for STE (attach) and invalidation.
Or do you see some other case where vmid must be allocated during
viommu_init?
quoted
+void arm_vsmmu_destroy(struct iommufd_viommu *viommu)
+{
+ struct arm_vsmmu *vsmmu = container_of(viommu, struct arm_vsmmu, core);
+
+ mutex_lock(&arm_smmu_asid_lock);
+ ida_free(&vsmmu->smmu->vmid_map, vsmmu->vmid);
+ mutex_unlock(&arm_smmu_asid_lock);
Need a comment explaining where the flush is.
Ack.
It looks like arm_smmu_iotlb_tag_free() does the free in the case of
INV_TYPE_S2_VMID_VSMMU?
But this patch doesn't have that code yet. So maybe this should be
merged with the next patch..
Or maybe I should re-order the sequence of the patches. I'll see
what works the best.
Thanks
Nicolin