From: Jason Gunthorpe <jgg@nvidia.com>
To: 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,
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>,
Robin Murphy <robin.murphy@arm.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>,
Marek Szyprowski <m.szyprowski@samsung.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 v6 15/25] iommufd/selftest: Make the mock iommu driver into a real driver
Date: Mon, 14 Aug 2023 20:16:33 -0300 [thread overview]
Message-ID: <ZNq10UxCKerGqg5O@nvidia.com> (raw)
In-Reply-To: <15-v6-e8114faedade+425-iommu_all_defdom_jgg@nvidia.com>
On Wed, Aug 02, 2023 at 09:08:02PM -0300, Jason Gunthorpe wrote:
> I've avoided doing this because there is no way to make this happen
> without an intrusion into the core code. Up till now this has avoided
> needing the core code's probe path with some hackery - but now that
> default domains are becoming mandatory it is unavoidable. The core probe
> path must be run to set the default_domain, only it can do it. Without
> a default domain iommufd can't use the group.
>
> Make it so that iommufd selftest can create a real iommu driver and bind
> it only to is own private bus. Add iommu_device_register_bus() as a core
> code helper to make this possible. It simply sets the right pointers and
> registers the notifier block. The mock driver then works like any normal
> driver should, with probe triggered by the bus ops
>
> When the bus->iommu_ops stuff is fully unwound we can probably do better
> here and remove this special case.
>
> Remove set_platform_dma_ops from selftest and make it use a BLOCKED
> default domain.
>
> Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
> ---
> drivers/iommu/iommu-priv.h | 16 +++
> drivers/iommu/iommu.c | 43 +++++++
> drivers/iommu/iommufd/iommufd_private.h | 5 +-
> drivers/iommu/iommufd/main.c | 8 +-
> drivers/iommu/iommufd/selftest.c | 149 +++++++++++++-----------
> 5 files changed, 152 insertions(+), 69 deletions(-)
> create mode 100644 drivers/iommu/iommu-priv.h
Since this series will miss this kernel again I've taken this patch
into the iommufd tree to fix the broken selftest.
It needed two edits to make it work out of the context of this series
The core code still requires empty free functions:
+@@ drivers/iommu/iommufd/selftest.c: static struct iommu_domain *mock_domain_alloc(unsigned int iommu_domain_type)
+ if (iommu_domain_type == IOMMU_DOMAIN_BLOCKED)
+ return &mock_blocking_domain;
--static void mock_domain_blocking_free(struct iommu_domain *domain)
--{
--}
--
- static int mock_domain_nop_attach(struct iommu_domain *domain,
- struct device *dev)
- {
+@@ drivers/iommu/iommufd/selftest.c: static void mock_domain_set_plaform_dma_ops(struct device *dev)
+ */
}
- static const struct iommu_domain_ops mock_blocking_ops = {
-- .free = mock_domain_blocking_free,
- .attach_dev = mock_domain_nop_attach,
- };
-
And we can't use default_domain so rely on a NULL default domain and set_platform_dma_ops:
-@@ drivers/iommu/iommufd/selftest.c: static int mock_domain_nop_attach(struct iommu_domain *domain,
+- if (WARN_ON(iommu_domain_type != IOMMU_DOMAIN_UNMANAGED))
++ if (iommu_domain_type != IOMMU_DOMAIN_UNMANAGED)
+ return NULL;
+
+ mock = kzalloc(sizeof(*mock), GFP_KERNEL);
-@@ drivers/iommu/iommufd/selftest.c: static bool mock_domain_capable(struct device *dev, enum iommu_cap cap)
- return cap == IOMMU_CAP_CACHE_COHERENCY;
- }
-
--static void mock_domain_set_plaform_dma_ops(struct device *dev)
+static struct iommu_device mock_iommu_device = {
+};
+
+static struct iommu_device *mock_probe_device(struct device *dev)
- {
-- /*
-- * mock doesn't setup default domains because we can't hook into the
-- * normal probe path
-- */
++{
+ return &mock_iommu_device;
- }
-
++}
++
static const struct iommu_ops mock_ops = {
-+ /*
-+ * IOMMU_DOMAIN_BLOCKED cannot be returned from def_domain_type()
-+ * because it is zero.
-+ */
-+ .default_domain = &mock_blocking_domain,
.owner = THIS_MODULE,
.pgsize_bitmap = MOCK_IO_PAGE_SIZE,
.domain_alloc = mock_domain_alloc,
.capable = mock_domain_capable,
-- .set_platform_dma_ops = mock_domain_set_plaform_dma_ops,
+ .set_platform_dma_ops = mock_domain_set_plaform_dma_ops,
+ .device_group = generic_device_group,
+ .probe_device = mock_probe_device,
.default_domain_ops =
Otherwise it works the same and solves the same problem. There is a
small merge conflict with the fixes in Joerg's tree around the
bus_iommu_probe
Thanks,
Jason
next prev parent reply other threads:[~2023-08-14 23:17 UTC|newest]
Thread overview: 67+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-08-03 0:07 [PATCH v6 00/25] iommu: Make default_domain's mandatory Jason Gunthorpe
2023-08-03 0:07 ` [PATCH v6 01/25] iommu: Add iommu_ops->identity_domain Jason Gunthorpe
2023-08-03 0:07 ` [PATCH v6 02/25] iommu: Add IOMMU_DOMAIN_PLATFORM Jason Gunthorpe
2023-08-12 1:36 ` Baolu Lu
2023-08-12 11:28 ` Jason Gunthorpe
2023-08-13 12:11 ` Baolu Lu
2023-08-14 13:39 ` Jason Gunthorpe
2023-08-12 1:41 ` Baolu Lu
2023-08-14 14:22 ` Jason Gunthorpe
2023-08-03 0:07 ` [PATCH v6 03/25] powerpc/iommu: Setup a default domain and remove set_platform_dma_ops Jason Gunthorpe
2023-08-14 2:13 ` Baolu Lu
2023-08-03 0:07 ` [PATCH v6 04/25] iommu: Add IOMMU_DOMAIN_PLATFORM for S390 Jason Gunthorpe
2023-08-14 2:20 ` Baolu Lu
2023-08-03 0:07 ` [PATCH v6 05/25] iommu/fsl_pamu: Implement a PLATFORM domain Jason Gunthorpe
2023-08-14 2:35 ` Baolu Lu
2023-08-03 0:07 ` [PATCH v6 06/25] iommu/tegra-gart: Remove tegra-gart Jason Gunthorpe
2023-08-12 1:51 ` Baolu Lu
2023-08-03 0:07 ` [PATCH v6 07/25] iommu/mtk_iommu_v1: Implement an IDENTITY domain Jason Gunthorpe
2023-08-14 3:06 ` Baolu Lu
2023-08-14 14:34 ` Jason Gunthorpe
2023-08-15 0:34 ` Baolu Lu
2023-08-03 0:07 ` [PATCH v6 08/25] iommu: Reorganize iommu_get_default_domain_type() to respect def_domain_type() Jason Gunthorpe
2023-08-12 2:15 ` Baolu Lu
2023-08-14 17:25 ` Jason Gunthorpe
2023-08-15 1:18 ` Baolu Lu
2023-08-16 12:44 ` Jason Gunthorpe
2023-08-03 0:07 ` [PATCH v6 09/25] iommu: Allow an IDENTITY domain as the default_domain in ARM32 Jason Gunthorpe
2023-08-14 4:32 ` Baolu Lu
2023-08-03 0:07 ` [PATCH v6 10/25] iommu/exynos: Implement an IDENTITY domain Jason Gunthorpe
2023-08-14 4:52 ` Baolu Lu
2023-08-14 12:48 ` Jason Gunthorpe
2023-08-03 0:07 ` [PATCH v6 11/25] iommu/tegra-smmu: " Jason Gunthorpe
2023-08-14 5:01 ` Baolu Lu
2023-08-03 0:07 ` [PATCH v6 12/25] iommu/tegra-smmu: Support DMA domains in tegra Jason Gunthorpe
2023-08-14 5:08 ` Baolu Lu
2023-08-14 15:34 ` Jason Gunthorpe
2023-08-03 0:08 ` [PATCH v6 13/25] iommu/omap: Implement an IDENTITY domain Jason Gunthorpe
2023-08-14 5:10 ` Baolu Lu
2023-08-03 0:08 ` [PATCH v6 14/25] iommu/msm: " Jason Gunthorpe
2023-08-14 5:53 ` Baolu Lu
2023-08-03 0:08 ` [PATCH v6 15/25] iommufd/selftest: Make the mock iommu driver into a real driver Jason Gunthorpe
2023-08-12 4:57 ` Baolu Lu
2023-08-12 5:01 ` Baolu Lu
2023-08-14 23:16 ` Jason Gunthorpe [this message]
2023-08-03 0:08 ` [PATCH v6 16/25] iommu: Remove ops->set_platform_dma_ops() Jason Gunthorpe
2023-08-03 0:08 ` [PATCH v6 17/25] iommu/qcom_iommu: Add an IOMMU_IDENTITIY_DOMAIN Jason Gunthorpe
2023-08-14 6:32 ` Baolu Lu
2023-08-14 15:36 ` Jason Gunthorpe
2023-08-15 0:56 ` Baolu Lu
2023-08-03 0:08 ` [PATCH v6 18/25] iommu/ipmmu: " Jason Gunthorpe
2023-08-14 6:34 ` Baolu Lu
2023-08-03 0:08 ` [PATCH v6 19/25] iommu/mtk_iommu: " Jason Gunthorpe
2023-08-14 6:35 ` Baolu Lu
2023-08-03 0:08 ` [PATCH v6 20/25] iommu/sun50i: " Jason Gunthorpe
2023-08-14 6:44 ` Baolu Lu
2023-08-14 15:39 ` Jason Gunthorpe
2023-08-03 0:08 ` [PATCH v6 21/25] iommu: Require a default_domain for all iommu drivers Jason Gunthorpe
2023-08-03 0:08 ` [PATCH v6 22/25] iommu: Add __iommu_group_domain_alloc() Jason Gunthorpe
2023-08-03 0:08 ` [PATCH v6 23/25] iommu: Add ops->domain_alloc_paging() Jason Gunthorpe
2023-08-03 0:08 ` [PATCH v6 24/25] iommu: Convert simple drivers with DOMAIN_DMA to domain_alloc_paging() Jason Gunthorpe
2023-08-14 6:58 ` Baolu Lu
2023-08-14 15:40 ` Jason Gunthorpe
2023-08-03 0:08 ` [PATCH v6 25/25] iommu: Convert remaining simple drivers " Jason Gunthorpe
2023-08-14 7:00 ` Baolu Lu
2023-08-14 8:43 ` [PATCH v6 00/25] iommu: Make default_domain's mandatory Baolu Lu
2023-08-14 17:30 ` Jason Gunthorpe
2023-08-15 1:34 ` Baolu Lu
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=ZNq10UxCKerGqg5O@nvidia.com \
--to=jgg@nvidia.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=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=robin.murphy@arm.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).