iommu.lists.linux-foundation.org archive mirror
 help / color / mirror / Atom feed
From: Robin Murphy <robin.murphy@arm.com>
To: Jason Gunthorpe <jgg@nvidia.com>, Andy Gross <agross@kernel.org>,
	Alim Akhtar <alim.akhtar@samsung.com>,
	Bjorn Andersson <andersson@kernel.org>,
	AngeloGioacchino Del Regno
	<angelogioacchino.delregno@collabora.com>,
	Baolin Wang <baolin.wang@linux.alibaba.com>,
	Christophe Leroy <christophe.leroy@csgroup.eu>,
	Gerald Schaefer <gerald.schaefer@linux.ibm.com>,
	Heiko Stuebner <heiko@sntech.de>,
	iommu@lists.linux.dev, Jernej Skrabec <jernej.skrabec@gmail.com>,
	Jonathan Hunter <jonathanh@nvidia.com>,
	Joerg Roedel <joro@8bytes.org>, Kevin Tian <kevin.tian@intel.com>,
	Konrad Dybcio <konrad.dybcio@linaro.org>,
	Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>,
	linux-arm-kernel@lists.infradead.org,
	linux-arm-msm@vger.kernel.org,
	linux-mediatek@lists.infradead.org,
	linux-rockchip@lists.infradead.org, linux-s390@vger.kernel.org,
	linux-samsung-soc@vger.kernel.org, linux-sunxi@lists.linux.dev,
	linux-tegra@vger.kernel.org, Russell King <linux@armlinux.org.uk>,
	linuxppc-dev@lists.ozlabs.org,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Matthias Brugger <matthias.bgg@gmail.com>,
	Matthew Rosato <mjrosato@linux.ibm.com>,
	Michael Ellerman <mpe@ellerman.id.au>,
	Nicholas Piggin <npiggin@gmail.com>,
	Orson Zhai <orsonzhai@gmail.com>, Rob Clark <robdclark@gmail.com>,
	Samuel Holland <samuel@sholland.org>,
	Thierry Reding <thierry.reding@gmail.com>,
	Krishna Reddy <vdumpa@nvidia.com>, Chen-Yu Tsai <wens@csie.org>,
	Will Deacon <will@kernel.org>, Yong Wu <yong.wu@mediatek.com>,
	Chunyan Zhang <zhang.lyra@gmail.com>
Cc: Lu Baolu <baolu.lu@linux.intel.com>,
	Dmitry Osipenko <digetx@gmail.com>,
	Nicolin Chen <nicolinc@nvidia.com>,
	Niklas Schnelle <schnelle@linux.ibm.com>,
	Steven Price <steven.price@arm.com>,
	Thierry Reding <treding@nvidia.com>
Subject: Re: [PATCH v2 23/25] iommu: Add ops->domain_alloc_paging()
Date: Thu, 1 Jun 2023 20:17:56 +0100	[thread overview]
Message-ID: <13fb6807-d8b9-9808-c528-6df6ae9ca78a@arm.com> (raw)
In-Reply-To: <23-v2-8d1dc464eac9+10f-iommu_all_defdom_jgg@nvidia.com>

On 2023-05-16 01:00, Jason Gunthorpe wrote:
> This callback requests the driver to create only a __IOMMU_DOMAIN_PAGING
> domain, so it saves a few lines in a lot of drivers needlessly checking
> the type.
> 
> More critically, this allows us to sweep out all the
> IOMMU_DOMAIN_UNMANAGED and IOMMU_DOMAIN_DMA checks from a lot of the
> drivers, simplifying what is going on in the code and ultimately removing
> the now-unused special cases in drivers where they did not support
> IOMMU_DOMAIN_DMA.
> 
> domain_alloc_paging() should return a struct iommu_domain that is
> functionally compatible with ARM_DMA_USE_IOMMU, dma-iommu.c and iommufd.
> 
> Be forwards looking and pass in a 'struct device *' argument. We can
> provide this when allocating the default_domain. No drivers will look at
> this.

As mentioned before, we already know we're going to need additional 
flags (and possibly data) to cover the existing set_pgtable_quirks 
use-case plus new stuff like the proposed dirty-tracking enable, so I'd 
be inclined to either add an extensible structure argument now to avoid 
future churn, or just not bother adding the device argument either until 
drivers can actually use it.

> Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
> ---
>   drivers/iommu/iommu.c | 18 +++++++++++++++---
>   include/linux/iommu.h |  3 +++
>   2 files changed, 18 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c
> index c4cac1dcf80610..15aa51c356bd74 100644
> --- a/drivers/iommu/iommu.c
> +++ b/drivers/iommu/iommu.c
> @@ -1995,14 +1995,25 @@ void iommu_set_fault_handler(struct iommu_domain *domain,
>   EXPORT_SYMBOL_GPL(iommu_set_fault_handler);
>   
>   static struct iommu_domain *__iommu_domain_alloc(const struct iommu_ops *ops,
> +						 struct device *dev,
>   						 unsigned int type)
>   {
>   	struct iommu_domain *domain;
>   
>   	if (type == IOMMU_DOMAIN_IDENTITY && ops->identity_domain)
>   		return ops->identity_domain;
> +	else if ((type == IOMMU_DOMAIN_UNMANAGED || type == IOMMU_DOMAIN_DMA) &&
> +		 ops->domain_alloc_paging) {
> +		/*
> +		 * For now exclude DMA_FQ since it is still a driver policy
> +		 * decision through domain_alloc() if we can use FQ mode.
> +		 */

That's sorted now, so the type test can neatly collapse down to "type & 
__IOMMU_DOMAIN_PAGING".

Thanks,
Robin.

> +		domain = ops->domain_alloc_paging(dev);
> +	} else if (ops->domain_alloc)
> +		domain = ops->domain_alloc(type);
> +	else
> +		return NULL;
>   
> -	domain = ops->domain_alloc(type);
>   	if (!domain)
>   		return NULL;
>   
> @@ -2033,14 +2044,15 @@ __iommu_group_domain_alloc(struct iommu_group *group, unsigned int type)
>   
>   	lockdep_assert_held(&group->mutex);
>   
> -	return __iommu_domain_alloc(dev_iommu_ops(dev), type);
> +	return __iommu_domain_alloc(dev_iommu_ops(dev), dev, type);
>   }
>   
>   struct iommu_domain *iommu_domain_alloc(const struct bus_type *bus)
>   {
>   	if (bus == NULL || bus->iommu_ops == NULL)
>   		return NULL;
> -	return __iommu_domain_alloc(bus->iommu_ops, IOMMU_DOMAIN_UNMANAGED);
> +	return __iommu_domain_alloc(bus->iommu_ops, NULL,
> +				    IOMMU_DOMAIN_UNMANAGED);
>   }
>   EXPORT_SYMBOL_GPL(iommu_domain_alloc);
>   
> diff --git a/include/linux/iommu.h b/include/linux/iommu.h
> index 387746f8273c99..18b0df42cc80d1 100644
> --- a/include/linux/iommu.h
> +++ b/include/linux/iommu.h
> @@ -227,6 +227,8 @@ struct iommu_iotlb_gather {
>    * struct iommu_ops - iommu ops and capabilities
>    * @capable: check capability
>    * @domain_alloc: allocate iommu domain
> + * @domain_alloc_paging: Allocate an iommu_domain that can be used for
> + *                       UNMANAGED, DMA, and DMA_FQ domain types.
>    * @probe_device: Add device to iommu driver handling
>    * @release_device: Remove device from iommu driver handling
>    * @probe_finalize: Do final setup work after the device is added to an IOMMU
> @@ -258,6 +260,7 @@ struct iommu_ops {
>   
>   	/* Domain allocation and freeing by the iommu driver */
>   	struct iommu_domain *(*domain_alloc)(unsigned iommu_domain_type);
> +	struct iommu_domain *(*domain_alloc_paging)(struct device *dev);
>   
>   	struct iommu_device *(*probe_device)(struct device *dev);
>   	void (*release_device)(struct device *dev);

  reply	other threads:[~2023-06-01 19:18 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <CGME20230516000132eucas1p2d20a1c49d4711fda942a3c3a842384e6@eucas1p2.samsung.com>
2023-05-16  0:00 ` [PATCH v2 00/25] iommu: Make default_domain's mandatory Jason Gunthorpe
2023-05-16  0:00   ` [PATCH v2 01/25] iommu: Add iommu_ops->identity_domain Jason Gunthorpe
2023-05-16  0:00   ` [PATCH v2 02/25] iommu: Add IOMMU_DOMAIN_PLATFORM Jason Gunthorpe
2023-05-16  0:00   ` [PATCH v2 03/25] powerpc/iommu: Setup a default domain and remove set_platform_dma_ops Jason Gunthorpe
2023-05-16  0:00   ` [PATCH v2 04/25] iommu: Add IOMMU_DOMAIN_PLATFORM for S390 Jason Gunthorpe
2023-06-01 18:25     ` Robin Murphy
2023-06-01 19:58       ` Jason Gunthorpe
2023-05-16  0:00   ` [PATCH v2 05/25] iommu/tegra-gart: Remove tegra-gart Jason Gunthorpe
2023-06-01 16:51     ` Thierry Reding
2023-05-16  0:00   ` [PATCH v2 06/25] iommu/mtk_iommu_v1: Implement an IDENTITY domain Jason Gunthorpe
2023-05-16  0:00   ` [PATCH v2 07/25] iommu: Reorganize iommu_get_default_domain_type() to respect def_domain_type() Jason Gunthorpe
2023-05-16  0:00   ` [PATCH v2 08/25] iommu: Allow an IDENTITY domain as the default_domain in ARM32 Jason Gunthorpe
2023-06-01 18:57     ` Robin Murphy
2023-05-16  0:00   ` [PATCH v2 09/25] iommu/fsl_pamu: Implement an IDENTITY domain Jason Gunthorpe
2023-06-01 19:37     ` Robin Murphy
2023-06-01 19:46       ` Jason Gunthorpe
2023-06-01 19:53         ` Robin Murphy
2023-06-01 20:17           ` Jason Gunthorpe
2023-05-16  0:00   ` [PATCH v2 10/25] iommu/exynos: " Jason Gunthorpe
2023-05-17 22:41     ` Marek Szyprowski
2023-05-16  0:00   ` [PATCH v2 11/25] iommu/tegra-smmu: " Jason Gunthorpe
2023-05-16  0:00   ` [PATCH v2 12/25] iommu/tegra-smmu: Support DMA domains in tegra Jason Gunthorpe
2023-05-16  0:00   ` [PATCH v2 13/25] iommu/omap: Implement an IDENTITY domain Jason Gunthorpe
2023-05-16  0:00   ` [PATCH v2 14/25] iommu/msm: " Jason Gunthorpe
2023-05-16  0:00   ` [PATCH v2 15/25] iommufd/selftest: Make the mock iommu driver into a real driver Jason Gunthorpe
2023-05-16  0:00   ` [PATCH v2 16/25] iommu: Remove ops->set_platform_dma_ops() Jason Gunthorpe
2023-05-16  0:00   ` [PATCH v2 17/25] iommu/qcom_iommu: Add an IOMMU_IDENTITIY_DOMAIN Jason Gunthorpe
2023-05-16  0:00   ` [PATCH v2 18/25] iommu/ipmmu: " Jason Gunthorpe
2023-05-16  0:00   ` [PATCH v2 19/25] iommu/mtk_iommu: " Jason Gunthorpe
2023-05-16  0:00   ` [PATCH v2 20/25] iommu/sun50i: " Jason Gunthorpe
2023-05-16  0:00   ` [PATCH v2 21/25] iommu: Require a default_domain for all iommu drivers Jason Gunthorpe
2023-05-16  0:00   ` [PATCH v2 22/25] iommu: Add __iommu_group_domain_alloc() Jason Gunthorpe
2023-05-16  0:00   ` [PATCH v2 23/25] iommu: Add ops->domain_alloc_paging() Jason Gunthorpe
2023-06-01 19:17     ` Robin Murphy [this message]
2023-06-01 20:47       ` Jason Gunthorpe
2023-05-16  0:00   ` [PATCH v2 24/25] iommu: Convert simple drivers with DOMAIN_DMA to domain_alloc_paging() Jason Gunthorpe
2023-05-16  0:00   ` [PATCH v2 25/25] iommu: Convert remaining simple drivers " Jason Gunthorpe
2023-06-01 19:47     ` Robin Murphy
2023-06-01 20:37       ` Jason Gunthorpe
2023-06-09 19:26       ` Jason Gunthorpe
2023-05-17 22:42   ` [PATCH v2 00/25] iommu: Make default_domain's mandatory Marek Szyprowski
2023-05-17 23:32   ` Nicolin Chen
2023-05-18 10:56   ` Steven Price

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=13fb6807-d8b9-9808-c528-6df6ae9ca78a@arm.com \
    --to=robin.murphy@arm.com \
    --cc=agross@kernel.org \
    --cc=alim.akhtar@samsung.com \
    --cc=andersson@kernel.org \
    --cc=angelogioacchino.delregno@collabora.com \
    --cc=baolin.wang@linux.alibaba.com \
    --cc=baolu.lu@linux.intel.com \
    --cc=christophe.leroy@csgroup.eu \
    --cc=digetx@gmail.com \
    --cc=gerald.schaefer@linux.ibm.com \
    --cc=heiko@sntech.de \
    --cc=iommu@lists.linux.dev \
    --cc=jernej.skrabec@gmail.com \
    --cc=jgg@nvidia.com \
    --cc=jonathanh@nvidia.com \
    --cc=joro@8bytes.org \
    --cc=kevin.tian@intel.com \
    --cc=konrad.dybcio@linaro.org \
    --cc=krzysztof.kozlowski@linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-mediatek@lists.infradead.org \
    --cc=linux-rockchip@lists.infradead.org \
    --cc=linux-s390@vger.kernel.org \
    --cc=linux-samsung-soc@vger.kernel.org \
    --cc=linux-sunxi@lists.linux.dev \
    --cc=linux-tegra@vger.kernel.org \
    --cc=linux@armlinux.org.uk \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=m.szyprowski@samsung.com \
    --cc=matthias.bgg@gmail.com \
    --cc=mjrosato@linux.ibm.com \
    --cc=mpe@ellerman.id.au \
    --cc=nicolinc@nvidia.com \
    --cc=npiggin@gmail.com \
    --cc=orsonzhai@gmail.com \
    --cc=robdclark@gmail.com \
    --cc=samuel@sholland.org \
    --cc=schnelle@linux.ibm.com \
    --cc=steven.price@arm.com \
    --cc=thierry.reding@gmail.com \
    --cc=treding@nvidia.com \
    --cc=vdumpa@nvidia.com \
    --cc=wens@csie.org \
    --cc=will@kernel.org \
    --cc=yong.wu@mediatek.com \
    --cc=zhang.lyra@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).