Message ID | 564eda8dee4bbf4c6e1d1dd9ed6bd40cc1a2df26.1741150594.git.nicolinc@nvidia.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | iommu/arm-smmu-v3: Allocate vmid per vsmmu instead of s2_parent | expand |
> -----Original Message----- > From: Nicolin Chen <nicolinc@nvidia.com> > Sent: Wednesday, March 5, 2025 5:04 AM > To: will@kernel.org; robin.murphy@arm.com; jgg@nvidia.com > Cc: joro@8bytes.org; linux-arm-kernel@lists.infradead.org; > iommu@lists.linux.dev; linux-kernel@vger.kernel.org; Shameerali Kolothum > Thodi <shameerali.kolothum.thodi@huawei.com> > Subject: [PATCH v1 4/4] iommu/arm-smmu-v3-iommufd: Allow a shared > s2_parent to allocate vSMMU > > Now, vmids are stored in vSMMU objects. So all vSMMUs assigned to the > same > VM can share a s2_parent domain. This means a vIOMMU allocation per > device > behind one SMMU can be given with a s2_parent domain that's allocated > per > another device behind another SMMU, i.e. s2_parent->smmu != master- > >smmu. > > Remove the validation line to allow this use case. > > Signed-off-by: Nicolin Chen <nicolinc@nvidia.com> > --- > drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3-iommufd.c | 3 --- > 1 file changed, 3 deletions(-) > > diff --git a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3-iommufd.c > b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3-iommufd.c > index 2c5a9d0abed5..9bfa5fa5bafa 100644 > --- a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3-iommufd.c > +++ b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3-iommufd.c > @@ -378,9 +378,6 @@ struct iommufd_viommu *arm_vsmmu_alloc(struct > device *dev, > if (!(smmu->features & ARM_SMMU_FEAT_NESTING)) > return ERR_PTR(-EOPNOTSUPP); > > - if (s2_parent->smmu != master->smmu) > - return ERR_PTR(-EINVAL); > - Not sure we can just relax this like this. What if the two physical SMMUs are different in functionality/features? Do we need some kind of sanity check here? Thanks, Shameer
On Wed, Mar 05, 2025 at 09:01:40AM +0000, Shameerali Kolothum Thodi wrote: > > if (!(smmu->features & ARM_SMMU_FEAT_NESTING)) > > return ERR_PTR(-EOPNOTSUPP); > > > > - if (s2_parent->smmu != master->smmu) > > - return ERR_PTR(-EINVAL); > > - > > Not sure we can just relax this like this. What if the two physical SMMUs are different in > functionality/features? Do we need some kind of sanity check here? Yes, a function to check if a domain's iopgtbl config is compatible with the instance is required. Jason
On Wed, Mar 05, 2025 at 12:57:43PM -0400, Jason Gunthorpe wrote: > On Wed, Mar 05, 2025 at 09:01:40AM +0000, Shameerali Kolothum Thodi wrote: > > > > if (!(smmu->features & ARM_SMMU_FEAT_NESTING)) > > > return ERR_PTR(-EOPNOTSUPP); > > > > > > - if (s2_parent->smmu != master->smmu) > > > - return ERR_PTR(-EINVAL); > > > - > > > > Not sure we can just relax this like this. What if the two physical SMMUs are different in > > functionality/features? Do we need some kind of sanity check here? > > Yes, a function to check if a domain's iopgtbl config is compatible > with the instance is required. Yea. Will rework. Thanks! Nicolin
diff --git a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3-iommufd.c b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3-iommufd.c index 2c5a9d0abed5..9bfa5fa5bafa 100644 --- a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3-iommufd.c +++ b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3-iommufd.c @@ -378,9 +378,6 @@ struct iommufd_viommu *arm_vsmmu_alloc(struct device *dev, if (!(smmu->features & ARM_SMMU_FEAT_NESTING)) return ERR_PTR(-EOPNOTSUPP); - if (s2_parent->smmu != master->smmu) - return ERR_PTR(-EINVAL); - /* * FORCE_SYNC is not set with FEAT_NESTING. Some study of the exact HW * defect is needed to determine if arm_vsmmu_cache_invalidate() needs
Now, vmids are stored in vSMMU objects. So all vSMMUs assigned to the same VM can share a s2_parent domain. This means a vIOMMU allocation per device behind one SMMU can be given with a s2_parent domain that's allocated per another device behind another SMMU, i.e. s2_parent->smmu != master->smmu. Remove the validation line to allow this use case. Signed-off-by: Nicolin Chen <nicolinc@nvidia.com> --- drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3-iommufd.c | 3 --- 1 file changed, 3 deletions(-)