Message ID | 3-v1-21cc72fcfb22+a7a-iommu_all_defdom_jgg@nvidia.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | iommu: Make default_domain's mandatory | expand |
On Mon, 2023-05-01 at 15:02 -0300, Jason Gunthorpe wrote: > This is temporary until the S390 dma-iommu.c conversion is merged. For anyone wanting to accelerate the conversion. Comments, testing and reviews for the current version of my dma-iommu.c conversion patches is welcome and the single flush queue thing might even give others (virtio-iommu?) performance benefits: https://lore.kernel.org/linux-iommu/20230310-dma_iommu-v8-0-2347dfbed7af@linux.ibm.com/ > > s390 is actually moving the dma_ops over to platform control. > > Signed-off-by: Jason Gunthorpe <jgg@nvidia.com> > --- > drivers/iommu/s390-iommu.c | 21 +++++++++++++++++++-- > 1 file changed, 19 insertions(+), 2 deletions(-) > > diff --git a/drivers/iommu/s390-iommu.c b/drivers/iommu/s390-iommu.c > index fbf59a8db29b11..f0c867c57a5b9b 100644 > --- a/drivers/iommu/s390-iommu.c > +++ b/drivers/iommu/s390-iommu.c > @@ -142,14 +142,31 @@ static int s390_iommu_attach_device(struct iommu_domain *domain, > return 0; > } > > -static void s390_iommu_set_platform_dma(struct device *dev) > +/* > + * Switch control over the IOMMU to S390's internal dma_api ops > + */ > +static int s390_iommu_platform_attach(struct iommu_domain *platform_domain, > + struct device *dev) > { > struct zpci_dev *zdev = to_zpci_dev(dev); > > + if (!zdev->s390_domain) > + return 0; > + > __s390_iommu_detach_device(zdev); > zpci_dma_init_device(zdev); > + return 0; > } > > +static struct iommu_domain_ops s390_iommu_platform_ops = { > + .attach_dev = s390_iommu_platform_attach, > +}; > + > +static struct iommu_domain s390_iommu_platform_domain = { > + .type = IOMMU_DOMAIN_PLATFORM, > + .ops = &s390_iommu_platform_ops, > +}; > + > static void s390_iommu_get_resv_regions(struct device *dev, > struct list_head *list) > { > @@ -428,12 +445,12 @@ void zpci_destroy_iommu(struct zpci_dev *zdev) > } > > static const struct iommu_ops s390_iommu_ops = { > + .default_domain = &s390_iommu_platform_domain, > .capable = s390_iommu_capable, > .domain_alloc = s390_domain_alloc, > .probe_device = s390_iommu_probe_device, > .release_device = s390_iommu_release_device, > .device_group = generic_device_group, > - .set_platform_dma_ops = s390_iommu_set_platform_dma, > .pgsize_bitmap = SZ_4K, > .get_resv_regions = s390_iommu_get_resv_regions, > .default_domain_ops = &(const struct iommu_domain_ops) { Looks good to me and I think semantically this is a good use of an IOMMU domain type. Reviewed-by: Niklas Schnelle <schnelle@linux.ibm.com>
diff --git a/drivers/iommu/s390-iommu.c b/drivers/iommu/s390-iommu.c index fbf59a8db29b11..f0c867c57a5b9b 100644 --- a/drivers/iommu/s390-iommu.c +++ b/drivers/iommu/s390-iommu.c @@ -142,14 +142,31 @@ static int s390_iommu_attach_device(struct iommu_domain *domain, return 0; } -static void s390_iommu_set_platform_dma(struct device *dev) +/* + * Switch control over the IOMMU to S390's internal dma_api ops + */ +static int s390_iommu_platform_attach(struct iommu_domain *platform_domain, + struct device *dev) { struct zpci_dev *zdev = to_zpci_dev(dev); + if (!zdev->s390_domain) + return 0; + __s390_iommu_detach_device(zdev); zpci_dma_init_device(zdev); + return 0; } +static struct iommu_domain_ops s390_iommu_platform_ops = { + .attach_dev = s390_iommu_platform_attach, +}; + +static struct iommu_domain s390_iommu_platform_domain = { + .type = IOMMU_DOMAIN_PLATFORM, + .ops = &s390_iommu_platform_ops, +}; + static void s390_iommu_get_resv_regions(struct device *dev, struct list_head *list) { @@ -428,12 +445,12 @@ void zpci_destroy_iommu(struct zpci_dev *zdev) } static const struct iommu_ops s390_iommu_ops = { + .default_domain = &s390_iommu_platform_domain, .capable = s390_iommu_capable, .domain_alloc = s390_domain_alloc, .probe_device = s390_iommu_probe_device, .release_device = s390_iommu_release_device, .device_group = generic_device_group, - .set_platform_dma_ops = s390_iommu_set_platform_dma, .pgsize_bitmap = SZ_4K, .get_resv_regions = s390_iommu_get_resv_regions, .default_domain_ops = &(const struct iommu_domain_ops) {
This is temporary until the S390 dma-iommu.c conversion is merged. s390 is actually moving the dma_ops over to platform control. Signed-off-by: Jason Gunthorpe <jgg@nvidia.com> --- drivers/iommu/s390-iommu.c | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-)