Thread (65 messages) 65 messages, 8 authors, 2021-08-03

Re: [PATCH v2 00/24] iommu: Refactor DMA domain strictness

From: Heiko Stübner <heiko@sntech.de>
Date: 2021-07-29 15:53:26
Also in: linux-iommu, lkml

Am Donnerstag, 29. Juli 2021, 17:43:07 CEST schrieb Robin Murphy:
On 2021-07-29 16:04, Heiko Stübner wrote:
quoted
Hi Robin,

Am Mittwoch, 28. Juli 2021, 17:58:21 CEST schrieb Robin Murphy:
quoted
Hi all,

Here's v2 where things start to look more realistic, hence the expanded
CC list. The patches are now based on the current iommu/core branch to
take John's iommu_set_dma_strict() cleanup into account.

The series remiains in two (or possibly 3) logical parts - for people
CC'd on cookie cleanup patches, the later parts should not affect you
since your drivers don't implement non-strict mode anyway; the cleanup
is all pretty straightforward, but please do yell at me if I've managed
to let a silly mistake slip through and broken your driver.

This time I have also build-tested x86 as well as arm64 :)
TL;DR: arm64 yay, arm32 nay ;-)
Cheers Heiko!
quoted
testcase:
5.14-rc3
+ iommu/next
+ patches 1+8 (the ones you cc'd me on)
   iommu: Pull IOVA cookie management into the core
   iommu/rockchip: Drop IOVA cookie management

rk3399+hdmi (puma): boots with graphics
rk3399+edp (kevin): boots with graphics
px30+dsi (minievb): boots with graphics

rk3288 (arm32, veyron-pinky): hangs when trying to start the rockchip-drm
at some points the rest of the system recovers and fills the log with

[   47.193776] [drm:drm_crtc_commit_wait] *ERROR* flip_done timed out
[   47.193867] [drm:drm_atomic_helper_wait_for_dependencies] *ERROR* [PLANE:31:plane-0] commit wait timed out
[   57.433743] [drm:drm_crtc_commit_wait] *ERROR* flip_done timed out
[   57.433828] [drm:drm_atomic_helper_wait_for_dependencies] *ERROR* [PLANE:40:plane-4] commit wait timed out

spews

testcase 2:
5.14-rc3
+ iommu/next

all works fine on both arm32+arm64


That whole iommu voodoo is a bit over my head right now, so I'm not sure
what to poke to diagnose this.
Dang, this wasn't supposed to affect 32-bit Arm at all, since that 
doesn't touch any of the default domain stuff either way. I have both my 
RK3288 box (which IIRC doesn't currently boot) and an Odroid-U3 in the 
"desk pile" right in front of me, so at worst I'll try bringing one of 
those to life to see what silly thing I have indeed done to break 32-bit.

I have a vague idea forming already, which suggests that it might get 
better again once patch #12 is applied, but even if so there's no excuse 
not to be bisectable, so I need to dig in and fix it - many thanks for 
yelling as requested :D
That vague idea was actually quite correct, applying
	iommu/dma: Unexport IOVA cookie management
on top of the the two patches makes my rk3288 boot correctly again
and the display also works again.


Heiko
Robin.
quoted

Heiko

quoted
Changes in v2:

- Add iommu_is_dma_domain() helper to abstract flag check (and help
   avoid silly typos like the one in v1).
- Tweak a few commit messages for spelling and (hopefully) clarity.
- Move the iommu_create_device_direct_mappings() update to patch #14
   where it should have been.
- Rewrite patch #20 as a conversion of the now-existing option.
- Clean up the ops->flush_iotlb_all check which is also made redundant
   by the new domain type
- Add patch #24, which is arguably tangential, but it was something I
   spotted during the rebase, so...

Once again, the whole lot is available on a branch here:

https://gitlab.arm.com/linux-arm/linux-rm/-/tree/iommu/fq

Thanks,
Robin.


CC: Marek Szyprowski <m.szyprowski@samsung.com>
CC: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
CC: Geert Uytterhoeven <geert+renesas@glider.be>
CC: Yong Wu <yong.wu@mediatek.com>
CC: Heiko Stuebner <heiko@sntech.de>
CC: Chunyan Zhang <redacted>
CC: Chunyan Zhang <redacted>
CC: Maxime Ripard <mripard@kernel.org>
CC: Jean-Philippe Brucker <redacted>

Robin Murphy (24):
   iommu: Pull IOVA cookie management into the core
   iommu/amd: Drop IOVA cookie management
   iommu/arm-smmu: Drop IOVA cookie management
   iommu/vt-d: Drop IOVA cookie management
   iommu/exynos: Drop IOVA cookie management
   iommu/ipmmu-vmsa: Drop IOVA cookie management
   iommu/mtk: Drop IOVA cookie management
   iommu/rockchip: Drop IOVA cookie management
   iommu/sprd: Drop IOVA cookie management
   iommu/sun50i: Drop IOVA cookie management
   iommu/virtio: Drop IOVA cookie management
   iommu/dma: Unexport IOVA cookie management
   iommu/dma: Remove redundant "!dev" checks
   iommu: Introduce explicit type for non-strict DMA domains
   iommu/amd: Prepare for multiple DMA domain types
   iommu/arm-smmu: Prepare for multiple DMA domain types
   iommu/vt-d: Prepare for multiple DMA domain types
   iommu: Express DMA strictness via the domain type
   iommu: Expose DMA domain strictness via sysfs
   iommu: Merge strictness and domain type configs
   iommu/dma: Factor out flush queue init
   iommu: Allow enabling non-strict mode dynamically
   iommu/arm-smmu: Allow non-strict in pgtable_quirks interface
   iommu: Only log strictness for DMA domains

  .../ABI/testing/sysfs-kernel-iommu_groups     |  2 +
  drivers/iommu/Kconfig                         | 80 +++++++++----------
  drivers/iommu/amd/iommu.c                     | 21 +----
  drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c   | 25 ++++--
  drivers/iommu/arm/arm-smmu/arm-smmu.c         | 29 ++++---
  drivers/iommu/arm/arm-smmu/qcom_iommu.c       |  8 --
  drivers/iommu/dma-iommu.c                     | 44 +++++-----
  drivers/iommu/exynos-iommu.c                  | 18 +----
  drivers/iommu/intel/iommu.c                   | 23 ++----
  drivers/iommu/iommu.c                         | 53 +++++++-----
  drivers/iommu/ipmmu-vmsa.c                    | 27 +------
  drivers/iommu/mtk_iommu.c                     |  6 --
  drivers/iommu/rockchip-iommu.c                | 11 +--
  drivers/iommu/sprd-iommu.c                    |  6 --
  drivers/iommu/sun50i-iommu.c                  | 12 +--
  drivers/iommu/virtio-iommu.c                  |  8 --
  include/linux/dma-iommu.h                     |  9 ++-
  include/linux/iommu.h                         | 15 +++-
  18 files changed, 171 insertions(+), 226 deletions(-)





_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help