Commit 4efd98d4 authored by Jason Gunthorpe's avatar Jason Gunthorpe Committed by Joerg Roedel
Browse files

iommu: Convert remaining simple drivers to domain_alloc_paging()



These drivers don't support IOMMU_DOMAIN_DMA, so this commit effectively
allows them to support that mode.

The prior work to require default_domains makes this safe because every
one of these drivers is either compilation incompatible with dma-iommu.c,
or already establishing a default_domain. In both cases alloc_domain()
will never be called with IOMMU_DOMAIN_DMA for these drivers so it is safe
to drop the test.

Removing these tests clarifies that the domain allocation path is only
about the functionality of a paging domain and has nothing to do with
policy of how the paging domain is used for UNMANAGED/DMA/DMA_FQ.

Tested-by: default avatarNiklas Schnelle <schnelle@linux.ibm.com>
Tested-by: default avatarSteven Price <steven.price@arm.com>
Tested-by: default avatarMarek Szyprowski <m.szyprowski@samsung.com>
Tested-by: default avatarNicolin Chen <nicolinc@nvidia.com>
Reviewed-by: default avatarLu Baolu <baolu.lu@linux.intel.com>
Reviewed-by: default avatarJerry Snitselaar <jsnitsel@redhat.com>
Signed-off-by: default avatarJason Gunthorpe <jgg@nvidia.com>
Link: https://lore.kernel.org/r/24-v8-81230027b2fa+9d-iommu_all_defdom_jgg@nvidia.com


Signed-off-by: default avatarJoerg Roedel <jroedel@suse.de>
parent 3529375e
Loading
Loading
Loading
Loading
+2 −5
Original line number Diff line number Diff line
@@ -302,13 +302,10 @@ static void __program_context(void __iomem *base, int ctx,
	SET_M(base, ctx, 1);
}

static struct iommu_domain *msm_iommu_domain_alloc(unsigned type)
static struct iommu_domain *msm_iommu_domain_alloc_paging(struct device *dev)
{
	struct msm_priv *priv;

	if (type != IOMMU_DOMAIN_UNMANAGED)
		return NULL;

	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
	if (!priv)
		goto fail_nomem;
@@ -691,7 +688,7 @@ irqreturn_t msm_iommu_fault_handler(int irq, void *dev_id)

static struct iommu_ops msm_iommu_ops = {
	.identity_domain = &msm_iommu_identity_domain,
	.domain_alloc = msm_iommu_domain_alloc,
	.domain_alloc_paging = msm_iommu_domain_alloc_paging,
	.probe_device = msm_iommu_probe_device,
	.device_group = generic_device_group,
	.pgsize_bitmap = MSM_IOMMU_PGSIZES,
+2 −5
Original line number Diff line number Diff line
@@ -270,13 +270,10 @@ static int mtk_iommu_v1_domain_finalise(struct mtk_iommu_v1_data *data)
	return 0;
}

static struct iommu_domain *mtk_iommu_v1_domain_alloc(unsigned type)
static struct iommu_domain *mtk_iommu_v1_domain_alloc_paging(struct device *dev)
{
	struct mtk_iommu_v1_domain *dom;

	if (type != IOMMU_DOMAIN_UNMANAGED)
		return NULL;

	dom = kzalloc(sizeof(*dom), GFP_KERNEL);
	if (!dom)
		return NULL;
@@ -585,7 +582,7 @@ static int mtk_iommu_v1_hw_init(const struct mtk_iommu_v1_data *data)

static const struct iommu_ops mtk_iommu_v1_ops = {
	.identity_domain = &mtk_iommu_v1_identity_domain,
	.domain_alloc	= mtk_iommu_v1_domain_alloc,
	.domain_alloc_paging = mtk_iommu_v1_domain_alloc_paging,
	.probe_device	= mtk_iommu_v1_probe_device,
	.probe_finalize = mtk_iommu_v1_probe_finalize,
	.release_device	= mtk_iommu_v1_release_device,
+2 −5
Original line number Diff line number Diff line
@@ -1580,13 +1580,10 @@ static struct iommu_domain omap_iommu_identity_domain = {
	.ops = &omap_iommu_identity_ops,
};

static struct iommu_domain *omap_iommu_domain_alloc(unsigned type)
static struct iommu_domain *omap_iommu_domain_alloc_paging(struct device *dev)
{
	struct omap_iommu_domain *omap_domain;

	if (type != IOMMU_DOMAIN_UNMANAGED)
		return NULL;

	omap_domain = kzalloc(sizeof(*omap_domain), GFP_KERNEL);
	if (!omap_domain)
		return NULL;
@@ -1748,7 +1745,7 @@ static struct iommu_group *omap_iommu_device_group(struct device *dev)

static const struct iommu_ops omap_iommu_ops = {
	.identity_domain = &omap_iommu_identity_domain,
	.domain_alloc	= omap_iommu_domain_alloc,
	.domain_alloc_paging = omap_iommu_domain_alloc_paging,
	.probe_device	= omap_iommu_probe_device,
	.release_device	= omap_iommu_release_device,
	.device_group	= omap_iommu_device_group,
+2 −5
Original line number Diff line number Diff line
@@ -39,13 +39,10 @@ static bool s390_iommu_capable(struct device *dev, enum iommu_cap cap)
	}
}

static struct iommu_domain *s390_domain_alloc(unsigned domain_type)
static struct iommu_domain *s390_domain_alloc_paging(struct device *dev)
{
	struct s390_domain *s390_domain;

	if (domain_type != IOMMU_DOMAIN_UNMANAGED)
		return NULL;

	s390_domain = kzalloc(sizeof(*s390_domain), GFP_KERNEL);
	if (!s390_domain)
		return NULL;
@@ -447,7 +444,7 @@ 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,
	.domain_alloc_paging = s390_domain_alloc_paging,
	.probe_device = s390_iommu_probe_device,
	.release_device = s390_iommu_release_device,
	.device_group = generic_device_group,