mbox series

[v8,0/9] iommu: I/O page faults for SMMUv3

Message ID 20201112125519.3987595-1-jean-philippe@linaro.org
Headers show
Series iommu: I/O page faults for SMMUv3 | expand

Message

Jean-Philippe Brucker Nov. 12, 2020, 12:55 p.m. UTC
Add support for stall and PRI to the SMMUv3 driver, along with a common
I/O Page Fault handler.

These patches were last sent as part of v7 of the larger SVA series [1].
Main changes since v7:
* Dropped CONFIG_IOMMU_PAGE_FAULT, reuse CONFIG_IOMMU_SVA_LIB instead.
* Extracted devicetree support into patch 4.
* Added patch 5 for ACPI support.
* Dropped event queue flush on unbind(). Since device drivers must
  complete DMA transactions before calling unbind(), there cannot be any
  pending stalled event.
* A few small fixes.

The series depends on "iommu/sva: Add PASID helpers" [2], since it
provides the function to search an mm_struct by PASID.

Has anyone been testing the PRI patches on hardware? I still only have a
software model to test them, so as much as I'd like to cross this off my
list, we could leave out patches 7-9 for now.

[1] https://lore.kernel.org/linux-iommu/20200519175502.2504091-1-jean-philippe@linaro.org/
[2] https://lore.kernel.org/linux-iommu/20201106155048.997886-1-jean-philippe@linaro.org/

Jean-Philippe Brucker (9):
  iommu: Add a page fault handler
  iommu/arm-smmu-v3: Maintain a SID->device structure
  dt-bindings: document stall property for IOMMU masters
  of/iommu: Support dma-can-stall property
  ACPI/IORT: Enable stall support for platform devices
  iommu/arm-smmu-v3: Add stall support for platform devices
  PCI/ATS: Add PRI stubs
  PCI/ATS: Export PRI functions
  iommu/arm-smmu-v3: Add support for PRI

 drivers/iommu/Makefile                        |   1 +
 .../devicetree/bindings/iommu/iommu.txt       |  18 +
 drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h   |  69 +-
 drivers/iommu/iommu-sva-lib.h                 |  53 ++
 include/linux/iommu.h                         |   4 +
 include/linux/pci-ats.h                       |   7 +
 drivers/acpi/arm64/iort.c                     |   1 +
 .../iommu/arm/arm-smmu-v3/arm-smmu-v3-sva.c   |  52 +-
 drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c   | 605 +++++++++++++++---
 drivers/iommu/io-pgfault.c                    | 462 +++++++++++++
 drivers/iommu/of_iommu.c                      |   5 +-
 drivers/pci/ats.c                             |   4 +
 12 files changed, 1191 insertions(+), 90 deletions(-)
 create mode 100644 drivers/iommu/io-pgfault.c

-- 
2.29.1

Comments

Hanjun Guo Nov. 13, 2020, 12:41 a.m. UTC | #1
On 2020/11/12 20:55, Jean-Philippe Brucker wrote:
> Copy the "Stall supported" bit, that tells whether a platform device

> supports stall, into the fwspec struct.

> 

> Signed-off-by: Jean-Philippe Brucker <jean-philippe@linaro.org>


Acked-by: Hanjun Guo <guohanjun@huawei.com>
Vivek Gautam Dec. 3, 2020, 6:52 a.m. UTC | #2
Hi Jean,


On Thu, Nov 12, 2020 at 6:33 PM Jean-Philippe Brucker
<jean-philippe@linaro.org> wrote:
>

> Add support for stall and PRI to the SMMUv3 driver, along with a common

> I/O Page Fault handler.

>

> These patches were last sent as part of v7 of the larger SVA series [1].

> Main changes since v7:

> * Dropped CONFIG_IOMMU_PAGE_FAULT, reuse CONFIG_IOMMU_SVA_LIB instead.

> * Extracted devicetree support into patch 4.

> * Added patch 5 for ACPI support.

> * Dropped event queue flush on unbind(). Since device drivers must

>   complete DMA transactions before calling unbind(), there cannot be any

>   pending stalled event.

> * A few small fixes.

>

> The series depends on "iommu/sva: Add PASID helpers" [2], since it

> provides the function to search an mm_struct by PASID.

>

> Has anyone been testing the PRI patches on hardware? I still only have a

> software model to test them, so as much as I'd like to cross this off my

> list, we could leave out patches 7-9 for now.

>

I have been testing this series for sometime now with a RDN1Edge platform model.
The public model for N1-Edge rd FVP can be found at [A].
With reference software [B] and your kernel branch with smmute [C], I
was able to
test smmute by initiating different DMA transactions. With model logs I was able
to validate ATS and PRI command flows as well.
So I am happy to give my tested-by tag.

Tested-by: Vivek Gautam <vivek.gautam@arm.com>


Best regards
Vivek

[A] https://developer.arm.com/tools-and-software/open-source-software/arm-platforms-software/arm-ecosystem-fvps
[B] https://git.linaro.org/landing-teams/working/arm/arm-reference-platforms.git/about/docs/rdn1edge/user-guide.rst
[C] https://jpbrucker.net/git/linux/log/?h=sva/smmute-2020-11-12

> [1] https://lore.kernel.org/linux-iommu/20200519175502.2504091-1-jean-philippe@linaro.org/

> [2] https://lore.kernel.org/linux-iommu/20201106155048.997886-1-jean-philippe@linaro.org/

>

> Jean-Philippe Brucker (9):

>   iommu: Add a page fault handler

>   iommu/arm-smmu-v3: Maintain a SID->device structure

>   dt-bindings: document stall property for IOMMU masters

>   of/iommu: Support dma-can-stall property

>   ACPI/IORT: Enable stall support for platform devices

>   iommu/arm-smmu-v3: Add stall support for platform devices

>   PCI/ATS: Add PRI stubs

>   PCI/ATS: Export PRI functions

>   iommu/arm-smmu-v3: Add support for PRI

>

>  drivers/iommu/Makefile                        |   1 +

>  .../devicetree/bindings/iommu/iommu.txt       |  18 +

>  drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h   |  69 +-

>  drivers/iommu/iommu-sva-lib.h                 |  53 ++

>  include/linux/iommu.h                         |   4 +

>  include/linux/pci-ats.h                       |   7 +

>  drivers/acpi/arm64/iort.c                     |   1 +

>  .../iommu/arm/arm-smmu-v3/arm-smmu-v3-sva.c   |  52 +-

>  drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c   | 605 +++++++++++++++---

>  drivers/iommu/io-pgfault.c                    | 462 +++++++++++++

>  drivers/iommu/of_iommu.c                      |   5 +-

>  drivers/pci/ats.c                             |   4 +

>  12 files changed, 1191 insertions(+), 90 deletions(-)

>  create mode 100644 drivers/iommu/io-pgfault.c

>

> --

> 2.29.1

>

> _______________________________________________

> iommu mailing list

> iommu@lists.linux-foundation.org

> https://lists.linuxfoundation.org/mailman/listinfo/iommu