[PATCH RFC 04/17] acpi: Do not return struct iommu_ops from acpi_iommu_configure_id()

2023-11-03 Thread Jason Gunthorpe
Nothing needs this pointer. Return a normal error code with the usual IOMMU semantic that ENODEV means 'there is no IOMMU driver'. Signed-off-by: Jason Gunthorpe --- drivers/acpi/scan.c | 24 +++- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/drivers/acpi/sca

[PATCH RFC 16/17] iommu: Mark dev_iommu_get() with lockdep

2023-11-03 Thread Jason Gunthorpe
Allocation of dev->iommu must be done under the iommu_probe_device_lock. Mark this with lockdep to discourage future mistakes. Signed-off-by: Jason Gunthorpe --- drivers/iommu/iommu.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c index 9f23e1

[PATCH RFC 08/17] of: Do not use dev->iommu within of_iommu_configure()

2023-11-03 Thread Jason Gunthorpe
This call chain is using dev->iommu->fwspec to pass around the fwspec between the three parts (of_iommu_configure(), of_iommu_xlate(), iommu_probe_device()). However there is no locking around the accesses to dev->iommu, so this is all racy. Allocate a clean, local, fwspec at the start of of_iomm

[PATCH RFC 06/17] iommu: Add iommu_fwspec_alloc/dealloc()

2023-11-03 Thread Jason Gunthorpe
Allow fwspec to exist independently from the dev->iommu by providing functions to allow allocating and freeing the raw struct iommu_fwspec. Reflow the existing paths to call the new alloc/dealloc functions. Signed-off-by: Jason Gunthorpe --- drivers/iommu/iommu.c | 82 ++

[PATCH RFC 13/17] iommu: Remove dev_iommu_fwspec_set()

2023-11-03 Thread Jason Gunthorpe
This is only used internally to iommu.c now, get rid of it to discourage things outside iommu.c from trying to manipulate dev->iommu->fwspec. Signed-off-by: Jason Gunthorpe --- drivers/iommu/iommu.c | 2 +- include/linux/iommu.h | 6 -- 2 files changed, 1 insertion(+), 7 deletions(-) diff -

[PATCH RFC 07/17] iommu: Add iommu_probe_device_fwspec()

2023-11-03 Thread Jason Gunthorpe
Instead of obtaining an iommu_fwspec from dev->iommu allow a caller allocated fwspec to be passed into the probe logic. To keep the driver ops APIs the same the fwspec is stored in dev->iommu under the iommu_probe_device_lock. If a fwspec is available use it to provide the ops instead of the bus.

[PATCH RFC 03/17] of: Use -ENODEV consistently in of_iommu_configure()

2023-11-03 Thread Jason Gunthorpe
Instead of returning 1 and trying to handle positive error codes just stick to the convention of returning -ENODEV. Remove references to ops from of_iommu_configure(), a NULL ops will already generate an error code. There is no reason to check dev->bus, if err=0 at this point then the called confi

[PATCH RFC 01/17] iommu: Remove struct iommu_ops *iommu from arch_setup_dma_ops()

2023-11-03 Thread Jason Gunthorpe
This is not being used to pass ops, it is just a way to tell if an iommu driver was probed. These days this can be detected directly via device_iommu_mapped(). Call device_iommu_mapped() in the two places that need to check it and remove the iommu parameter everywhere. Signed-off-by: Jason Gunthor

[PATCH RFC 11/17] iommu: Hold iommu_probe_device_lock while calling ops->of_xlate

2023-11-03 Thread Jason Gunthorpe
This resolves the race around touching dev->iommu while generating the OF fwspec on the of_iommu_configure() flow: CPU0 CPU1 of_iommu_configure()iommu_device_register() .. bus_iommu_probe() iommu_fwspec_o

[PATCH RFC 09/17] iommu: Add iommu_fwspec_append_ids()

2023-11-03 Thread Jason Gunthorpe
This is a version of iommu_fwspec_add_ids() that takes in the fwspec as an argument instead of getting it through dev->iommu. Signed-off-by: Jason Gunthorpe --- drivers/iommu/iommu.c | 17 +++-- include/linux/iommu.h | 1 + 2 files changed, 12 insertions(+), 6 deletions(-) diff --g

[PATCH RFC 00/17] Solve iommu probe races around iommu_fwspec

2023-11-03 Thread Jason Gunthorpe
This is a more complete solution that the first attempt here: https://lore.kernel.org/r/1698825902-10685-1-git-send-email-quic_zhenh...@quicinc.com I haven't been able to test this on any HW that touches these paths, so if some people with HW can help get it in shape it can become non-RFC. The i

[PATCH RFC 05/17] iommu: Make iommu_fwspec->ids a distinct allocation

2023-11-03 Thread Jason Gunthorpe
The optimization of kreallocing the entire fwspec only works if the fwspec pointer is always stored in the dev->iommu. Since we want to change this remove the optimization and make the ids array a distinct allocation. Allow a single id to be stored inside the iommu_fwspec as a common case optimiza

[PATCH RFC 12/17] iommu: Make iommu_ops_from_fwnode() static

2023-11-03 Thread Jason Gunthorpe
There are no external callers now. Signed-off-by: Jason Gunthorpe --- drivers/iommu/iommu.c | 3 ++- include/linux/iommu.h | 6 -- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c index 62c82a28cd5db3..becd1b881e62dc 100644 --- a/dr

[PATCH RFC 15/17] iommu: Add ops->of_xlate_fwspec()

2023-11-03 Thread Jason Gunthorpe
The new callback takes in the fwspec instead of retrieving it from the dev->iommu. Provide iommu_fwspec_append_ids() to work directly on the fwspec. Convert SMMU, SMMUv3, and virtio to use iommu_fwspec_append_ids() and the new entry point. This avoids having to touch dev->iommu at all, and doesn'

[PATCH RFC 14/17] iommu: Remove pointless iommu_fwspec_free()

2023-11-03 Thread Jason Gunthorpe
These days the core code will free the fwspec if probe fails, no reason for any driver to call this on a probe failure path. Signed-off-by: Jason Gunthorpe --- drivers/iommu/arm/arm-smmu/arm-smmu.c | 14 +- drivers/iommu/tegra-smmu.c| 1 - 2 files changed, 5 insertions(+

[PATCH RFC 10/17] acpi: Do not use dev->iommu within acpi_iommu_configure()

2023-11-03 Thread Jason Gunthorpe
This call chain is using dev->iommu->fwspec to pass around the fwspec between the three parts (acpi_iommu_configure(), acpi_iommu_fwspec_init(), iommu_probe_device()). However there is no locking around the accesses to dev->iommu, so this is all racy. Allocate a clean, local, fwspec at the start

[PATCH RFC 02/17] of: Do not return struct iommu_ops from of_iommu_configure()

2023-11-03 Thread Jason Gunthorpe
Nothing needs this pointer. Return a normal error code with the usual IOMMU semantic that ENODEV means 'there is no IOMMU driver'. Signed-off-by: Jason Gunthorpe --- drivers/iommu/of_iommu.c | 29 ++--- drivers/of/device.c | 22 +++--- include/linux/o

[PATCH RFC 17/17] iommu: Mark dev_iommu_priv_set() with a lockdep

2023-11-03 Thread Jason Gunthorpe
A perfect driver would only call dev_iommu_priv_set() from its probe callback. We've made it functionally correct to call it from the of_xlate by adding a lock around that call. lockdep assert that iommu_probe_device_lock is held to discourage misuse. Exclude PPC kernels with CONFIG_FSL_PAMU turn

Re: [PATCH RFC 01/17] iommu: Remove struct iommu_ops *iommu from arch_setup_dma_ops()

2023-11-03 Thread Jerry Snitselaar
Reviewed-by: Jerry Snitselaar ___ linux-snps-arc mailing list linux-snps-arc@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-snps-arc

Re: [PATCH RFC 02/17] of: Do not return struct iommu_ops from of_iommu_configure()

2023-11-03 Thread Jerry Snitselaar
On Fri, Nov 03, 2023 at 01:44:47PM -0300, Jason Gunthorpe wrote: > Nothing needs this pointer. Return a normal error code with the usual > IOMMU semantic that ENODEV means 'there is no IOMMU driver'. > > Signed-off-by: Jason Gunthorpe > --- > drivers/iommu/of_iommu.c | 29 ++-

Re: [PATCH RFC 02/17] of: Do not return struct iommu_ops from of_iommu_configure()

2023-11-03 Thread Jerry Snitselaar
On Fri, Nov 03, 2023 at 02:42:01PM -0700, Jerry Snitselaar wrote: > On Fri, Nov 03, 2023 at 01:44:47PM -0300, Jason Gunthorpe wrote: > > Nothing needs this pointer. Return a normal error code with the usual > > IOMMU semantic that ENODEV means 'there is no IOMMU driver'. > > > > Signed-off-by: Jas

Re: [PATCH RFC 03/17] of: Use -ENODEV consistently in of_iommu_configure()

2023-11-03 Thread Jerry Snitselaar
On Fri, Nov 03, 2023 at 01:44:48PM -0300, Jason Gunthorpe wrote: > Instead of returning 1 and trying to handle positive error codes just > stick to the convention of returning -ENODEV. Remove references to ops > from of_iommu_configure(), a NULL ops will already generate an error code. > > There i

Re: [PATCH RFC 04/17] acpi: Do not return struct iommu_ops from acpi_iommu_configure_id()

2023-11-03 Thread Jerry Snitselaar
On Fri, Nov 03, 2023 at 01:44:49PM -0300, Jason Gunthorpe wrote: > Nothing needs this pointer. Return a normal error code with the usual > IOMMU semantic that ENODEV means 'there is no IOMMU driver'. > > Signed-off-by: Jason Gunthorpe > --- > drivers/acpi/scan.c | 24 +++- >