Message ID | 20241104132033.14027-7-yi.l.liu@intel.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | Support attaching PASID to the blocked_domain | expand |
On Mon, Nov 04, 2024 at 05:20:32AM -0800, Yi Liu wrote: > The blocked domain can be extended to park PASID of a device to be the > DMA blocking state. By this the remove_dev_pasid() op is dropped. > > Remove PASID from old domain and device GCR3 table. No need to attach > PASID to the blocked domain as clearing PASID from GCR3 table will make > sure all DMAs for that PASID are blocked. > > Suggested-by: Jason Gunthorpe <jgg@nvidia.com> > Signed-off-by: Yi Liu <yi.l.liu@intel.com> > --- > drivers/iommu/amd/iommu.c | 10 +++++++++- > 1 file changed, 9 insertions(+), 1 deletion(-) Reviewed-by: Jason Gunthorpe <jgg@nvidia.com> Jason
On 11/4/2024 6:50 PM, Yi Liu wrote: > The blocked domain can be extended to park PASID of a device to be the > DMA blocking state. By this the remove_dev_pasid() op is dropped. > > Remove PASID from old domain and device GCR3 table. No need to attach > PASID to the blocked domain as clearing PASID from GCR3 table will make > sure all DMAs for that PASID are blocked. > > Suggested-by: Jason Gunthorpe <jgg@nvidia.com> > Signed-off-by: Yi Liu <yi.l.liu@intel.com> Reviewed-by: Vasant Hegde <vasant.hegde@amd.com> -Vasant
> From: Liu, Yi L <yi.l.liu@intel.com> > Sent: Monday, November 4, 2024 9:21 PM > > The blocked domain can be extended to park PASID of a device to be the > DMA blocking state. By this the remove_dev_pasid() op is dropped. > > Remove PASID from old domain and device GCR3 table. No need to attach > PASID to the blocked domain as clearing PASID from GCR3 table will make > sure all DMAs for that PASID are blocked. > > Suggested-by: Jason Gunthorpe <jgg@nvidia.com> > Signed-off-by: Yi Liu <yi.l.liu@intel.com> Reviewed-by: Kevin Tian <kevin.tian@intel.com>
diff --git a/drivers/iommu/amd/iommu.c b/drivers/iommu/amd/iommu.c index 477aaf76b7ad..e513ced1ab53 100644 --- a/drivers/iommu/amd/iommu.c +++ b/drivers/iommu/amd/iommu.c @@ -2472,10 +2472,19 @@ static int blocked_domain_attach_device(struct iommu_domain *domain, return 0; } +static int blocked_domain_set_dev_pasid(struct iommu_domain *domain, + struct device *dev, ioasid_t pasid, + struct iommu_domain *old) +{ + amd_iommu_remove_dev_pasid(dev, pasid, old); + return 0; +} + static struct iommu_domain blocked_domain = { .type = IOMMU_DOMAIN_BLOCKED, .ops = &(const struct iommu_domain_ops) { .attach_dev = blocked_domain_attach_device, + .set_dev_pasid = blocked_domain_set_dev_pasid, } }; @@ -2908,7 +2917,6 @@ const struct iommu_ops amd_iommu_ops = { .def_domain_type = amd_iommu_def_domain_type, .dev_enable_feat = amd_iommu_dev_enable_feature, .dev_disable_feat = amd_iommu_dev_disable_feature, - .remove_dev_pasid = amd_iommu_remove_dev_pasid, .page_response = amd_iommu_page_response, .default_domain_ops = &(const struct iommu_domain_ops) { .attach_dev = amd_iommu_attach_device,
The blocked domain can be extended to park PASID of a device to be the DMA blocking state. By this the remove_dev_pasid() op is dropped. Remove PASID from old domain and device GCR3 table. No need to attach PASID to the blocked domain as clearing PASID from GCR3 table will make sure all DMAs for that PASID are blocked. Suggested-by: Jason Gunthorpe <jgg@nvidia.com> Signed-off-by: Yi Liu <yi.l.liu@intel.com> --- drivers/iommu/amd/iommu.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-)