All of lore.kernel.org
 help / color / mirror / Atom feed
From: Joerg Roedel <joro@8bytes.org>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Will Deacon <will@kernel.org>,
	linux-kernel@vger.kernel.org, iommu@lists.linux.dev
Subject: [git pull] IOMMU Updates for Linux v6.4
Date: Sun, 30 Apr 2023 13:13:11 +0200	[thread overview]
Message-ID: <ZE5NR5Ml8I2/Ze0f@8bytes.org> (raw)

[-- Attachment #1: Type: text/plain, Size: 17919 bytes --]

Hi Linus,

this pull-request is somewhat messier than usual because it has a lot of
conflicts with your tree. I resolved them in a test-merge and sorted it out
for you to compare your solution to mine (mine is also mostly similar to
the one in linux-next).

My resolution is attached and also available as a branch here:

	git://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu.git pull-test

The resolution branch is compile-tested on x86-64 with defconfig and
allmodconfig, both passed.

With that being said:

The following changes since commit 09a9639e56c01c7a00d6c0ca63f4c7c41abe075d:

  Linux 6.3-rc6 (2023-04-09 11:15:57 -0700)

are available in the Git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu.git tags/iommu-updates-v6.4

for you to fetch changes up to e51b4198396cd715b140c0e8b259680429ff0cfb:

  Merge branches 'iommu/fixes', 'arm/allwinner', 'arm/exynos', 'arm/mediatek', 'arm/omap', 'arm/renesas', 'arm/rockchip', 'arm/smmu', 'ppc/pamu', 'unisoc', 'x86/vt-d', 'x86/amd', 'core' and 'platform-remove_new' into next (2023-04-14 13:45:50 +0200)

----------------------------------------------------------------
IOMMU Updates for Linux 6.4

Including:

	- Convert to platform remove callback returning void

	- Extend changing default domain to normal group

	- Intel VT-d updates:
	    - Remove VT-d virtual command interface and IOASID
	    - Allow the VT-d driver to support non-PRI IOPF
	    - Remove PASID supervisor request support
	    - Various small and misc cleanups

	- ARM SMMU updates:
	    - Device-tree binding updates:
	        * Allow Qualcomm GPU SMMUs to accept relevant clock properties
	        * Document Qualcomm 8550 SoC as implementing an MMU-500
	        * Favour new "qcom,smmu-500" binding for Adreno SMMUs

	    - Fix S2CR quirk detection on non-architectural Qualcomm SMMU
	      implementations

	    - Acknowledge SMMUv3 PRI queue overflow when consuming events

	    - Document (in a comment) why ATS is disabled for bypass streams

	- AMD IOMMU updates:
	    - 5-level page-table support
	    - NUMA awareness for memory allocations

	- Unisoc driver: Support for reattaching an existing domain

	- Rockchip driver: Add missing set_platform_dma_ops callback

	- Mediatek driver: Adjust the dma-ranges

	- Various other small fixes and cleanups

----------------------------------------------------------------
Abel Vesa (1):
      dt-bindings: arm-smmu: Add compatible for SM8550 SoC

Christophe JAILLET (2):
      iommu/exynos: Use the devm_clk_get_optional() helper
      iommu/vt-d: Do not use GFP_ATOMIC when not needed

Chunyan Zhang (2):
      iommu/sprd: Release dma buffer to avoid memory leak
      iommu/sprd: Add support for reattaching an existing domain

Geert Uytterhoeven (1):
      iommu: Spelling s/cpmxchg64/cmpxchg64/

Jacob Pan (7):
      iommu/vt-d: Remove virtual command interface
      iommu/sva: Move PASID helpers to sva code
      iommu/sva: Remove PASID to mm lookup function
      iommu/sva: Use GFP_KERNEL for pasid allocation
      iommu/ioasid: Rename INVALID_IOASID
      iommu/vt-d: Use non-privileged mode for all PASIDs
      iommu/vt-d: Remove PASID supervisor request support

Jason Gunthorpe (4):
      iommu/sva: Stop using ioasid_set for SVA
      iommu: Remove ioasid infrastructure
      iommu: Make iommu_release_device() static
      iommu: Remove iommu_group_get_by_id()

Jean-Philippe Brucker (1):
      iommu/arm-smmu-v3: Explain why ATS stays disabled with bypass

Jerry Snitselaar (1):
      iommu/amd: Set page size bitmap during V2 domain allocation

Joerg Roedel (2):
      Merge tag 'arm-smmu-updates' of git://git.kernel.org/pub/scm/linux/kernel/git/will/linux into arm/smmu
      Merge branches 'iommu/fixes', 'arm/allwinner', 'arm/exynos', 'arm/mediatek', 'arm/omap', 'arm/renesas', 'arm/rockchip', 'arm/smmu', 'ppc/pamu', 'unisoc', 'x86/vt-d', 'x86/amd', 'core' and 'platform-remove_new' into next

Kishon Vijay Abraham I (1):
      iommu/amd: Fix "Guest Virtual APIC Table Root Pointer" configuration in IRTE

Konrad Dybcio (3):
      dt-bindings: arm-smmu: Use qcom,smmu compatible for MMU500 adreno SMMUs
      dt-bindings: arm-smmu: Add SM8350 Adreno SMMU
      dt-bindings: arm-smmu: Document SM61[12]5 GPU SMMU

Lu Baolu (14):
      iommu/ipmmu-vmsa: Call arm_iommu_release_mapping() in release path
      iommu: Split iommu_group_remove_device() into helpers
      iommu: Same critical region for device release and removal
      iommu: Move lock from iommu_change_dev_def_domain() to its caller
      iommu: Replace device_lock() with group->mutex
      iommu: Cleanup iommu_change_dev_def_domain()
      iommu: Use sysfs_emit() for sysfs show
      dmaengine: idxd: Add enable/disable device IOPF feature
      iommu/vt-d: Allow SVA with device-specific IOPF
      iommu/vt-d: Move iopf code from SVA to IOPF enabling path
      iommu/vt-d: Move pfsid and ats_qdep calculation to device probe path
      iommu/vt-d: Move PRI handling to IOPF feature path
      iommu/vt-d: Remove unnecessary checks in iopf disabling path
      iommu/vt-d: Remove extern from function prototypes

Manivannan Sadhasivam (1):
      iommu/arm-smmu-qcom: Limit the SMR groups to 128

Nick Alcock (1):
      iommu/sun50i: remove MODULE_LICENSE in non-modules

Randy Dunlap (1):
      iommu/fsl: fix all kernel-doc warnings in fsl_pamu.c

Rob Herring (2):
      iommu: Use of_property_present() for testing DT property presence
      iommu/omap: Use of_property_read_bool() for boolean properties

Steven Price (1):
      iommu/rockchip: Add missing set_platform_dma_ops callback

Thomas Weißschuh (1):
      iommu: Make kobj_type structure constant

Tina Zhang (7):
      iommu/vt-d: Make size of operands same in bitwise operations
      iommu/vt-d: Remove BUG_ON on checking valid pfn range
      iommu/vt-d: Remove BUG_ON in handling iotlb cache invalidation
      iommu/vt-d: Remove BUG_ON when domain->pgd is NULL
      iommu/vt-d: Remove BUG_ON in map/unmap()
      iommu/vt-d: Remove a useless BUG_ON(dev->is_virtfn)
      iommu/vt-d: Remove BUG_ON in dmar_insert_dev_scope()

Tomas Krcka (1):
      iommu/arm-smmu-v3: Acknowledge pri/event queue overflow if any

Uwe Kleine-König (10):
      iommu/arm-smmu: Drop if with an always false condition
      iommu/apple-dart: Convert to platform remove callback returning void
      iommu/arm-smmu-v3: Convert to platform remove callback returning void
      iommu/arm-smmu: Convert to platform remove callback returning void
      iommu/ipmmu-vmsa: Convert to platform remove callback returning void
      iommu/msm: Convert to platform remove callback returning void
      iommu/mtk: Convert to platform remove callback returning void
      iommu/mtk_iommu_v1: Convert to platform remove callback returning void
      iommu/omap: Convert to platform remove callback returning void
      iommu/sprd: Convert to platform remove callback returning void

Vasant Hegde (3):
      iommu/amd: Allocate page table using numa locality info
      iommu/amd: Allocate IOMMU irqs using numa locality info
      iommu/amd: Add 5 level guest page table support

Will Deacon (1):
      Merge branch 'for-joerg/arm-smmu/bindings' into for-joerg/arm-smmu/updates

Wolfram Sang (1):
      iommu/ipmmu-vmsa: remove R-Car H3 ES1.* handling

Yong Wu (15):
      iommu/mediatek: Set dma_mask for PGTABLE_PA_35_EN
      dt-bindings: media: mediatek,vcodec: Remove dma-ranges property
      dt-bindings: media: mediatek,jpeg: Remove dma-ranges property
      iommu/mediatek: Improve comment for the current region/bank
      iommu/mediatek: Get regionid from larb/port id
      iommu/mediatek: mt8192: Add iova_region_larb_msk
      iommu/mediatek: mt8195: Add iova_region_larb_msk
      iommu/mediatek: mt8186: Add iova_region_larb_msk
      iommu/mediatek: Add a gap for the iova regions
      iommu/mediatek: Set dma_mask for the master devices
      media: mtk-jpegdec: Remove the setting for dma_mask
      media: mediatek: vcodec: Remove the setting for dma_mask
      arm64: dts: mt8195: Remove the unnecessary dma-ranges
      arm64: dts: mt8195: Add dma-ranges for the parent "soc" node
      arm64: dts: mt8186: Add dma-ranges for the parent "soc" node

Yoshihiro Shimoda (1):
      dt-bindings: iommu: renesas, ipmmu-vmsa: Update for R-Car Gen4

 .../ABI/testing/sysfs-kernel-iommu_groups          |   1 -
 .../devicetree/bindings/iommu/arm,smmu.yaml        |  45 ++-
 .../bindings/iommu/renesas,ipmmu-vmsa.yaml         |  32 +-
 .../bindings/media/mediatek,mt8195-jpegdec.yaml    |   7 -
 .../bindings/media/mediatek,mt8195-jpegenc.yaml    |   7 -
 .../bindings/media/mediatek,vcodec-decoder.yaml    |   5 -
 .../bindings/media/mediatek,vcodec-encoder.yaml    |   5 -
 .../bindings/media/mediatek-jpeg-encoder.yaml      |   5 -
 Documentation/x86/sva.rst                          |   2 +-
 arch/arm64/boot/dts/mediatek/mt8186.dtsi           |   1 +
 arch/arm64/boot/dts/mediatek/mt8195.dtsi           |   4 +-
 arch/x86/kernel/traps.c                            |   2 +-
 drivers/dma/idxd/device.c                          |   8 +-
 drivers/dma/idxd/idxd.h                            |   2 +-
 drivers/dma/idxd/init.c                            |  33 +-
 drivers/dma/idxd/irq.c                             |   2 +-
 drivers/iommu/Kconfig                              |   9 +-
 drivers/iommu/Makefile                             |   1 -
 drivers/iommu/amd/amd_iommu.h                      |   9 +
 drivers/iommu/amd/amd_iommu_types.h                |  12 +-
 drivers/iommu/amd/init.c                           |  30 +-
 drivers/iommu/amd/io_pgtable.c                     |   4 +-
 drivers/iommu/amd/io_pgtable_v2.c                  |  25 +-
 drivers/iommu/amd/iommu.c                          |  17 +-
 drivers/iommu/apple-dart.c                         |   6 +-
 drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c        |  32 +-
 drivers/iommu/arm/arm-smmu/arm-smmu-qcom.c         |  16 +-
 drivers/iommu/arm/arm-smmu/arm-smmu.c              |  14 +-
 drivers/iommu/arm/arm-smmu/qcom_iommu.c            |  12 +-
 drivers/iommu/exynos-iommu.c                       |  24 +-
 drivers/iommu/fsl_pamu.c                           |   9 +-
 drivers/iommu/intel/cap_audit.c                    |   2 -
 drivers/iommu/intel/dmar.c                         |  13 +-
 drivers/iommu/intel/iommu.c                        | 277 ++++++--------
 drivers/iommu/intel/iommu.h                        |  35 +-
 drivers/iommu/intel/irq_remapping.c                |   2 +-
 drivers/iommu/intel/pasid.c                        |  43 ---
 drivers/iommu/intel/pasid.h                        |   7 -
 drivers/iommu/intel/svm.c                          |   3 +-
 drivers/iommu/ioasid.c                             | 422 ---------------------
 drivers/iommu/iommu-sva.c                          |  61 +--
 drivers/iommu/iommu-sva.h                          |   4 -
 drivers/iommu/iommu.c                              | 347 +++++++----------
 drivers/iommu/ipmmu-vmsa.c                         |  23 +-
 drivers/iommu/msm_iommu.c                          |   5 +-
 drivers/iommu/mtk_iommu.c                          | 158 ++++++--
 drivers/iommu/mtk_iommu_v1.c                       |   5 +-
 drivers/iommu/omap-iommu.c                         |   7 +-
 drivers/iommu/rockchip-iommu.c                     |  61 ++-
 drivers/iommu/sprd-iommu.c                         |  60 ++-
 drivers/iommu/sun50i-iommu.c                       |   1 -
 .../media/platform/mediatek/jpeg/mtk_jpeg_core.c   |   3 -
 .../platform/mediatek/vcodec/mtk_vcodec_dec_drv.c  |   8 -
 .../platform/mediatek/vcodec/mtk_vcodec_enc_drv.c  |   3 -
 include/linux/ioasid.h                             |  83 ----
 include/linux/iommu.h                              |  21 +-
 include/linux/sched/mm.h                           |  26 --
 kernel/fork.c                                      |   1 +
 mm/init-mm.c                                       |   4 +-
 59 files changed, 789 insertions(+), 1277 deletions(-)
 delete mode 100644 drivers/iommu/ioasid.c
 delete mode 100644 include/linux/ioasid.h

Please pull.

Thanks,

	Joerg

diff --cc arch/x86/kernel/process_64.c
index 223b223f713f,bb65a68b4b49..3d181c16a2f6
--- a/arch/x86/kernel/process_64.c
+++ b/arch/x86/kernel/process_64.c
@@@ -39,6 -39,6 +39,7 @@@
  #include <linux/io.h>
  #include <linux/ftrace.h>
  #include <linux/syscalls.h>
++#include <linux/iommu.h>
  
  #include <asm/processor.h>
  #include <asm/pkru.h>
diff --cc drivers/iommu/iommu-sva.c
index dd76a1a09cf7,c434b95dc8eb..5d4bb11dde01
--- a/drivers/iommu/iommu-sva.c
+++ b/drivers/iommu/iommu-sva.c
@@@ -10,26 -9,14 +10,14 @@@
  #include "iommu-sva.h"
  
  static DEFINE_MUTEX(iommu_sva_lock);
- static DECLARE_IOASID_SET(iommu_sva_pasid);
+ static DEFINE_IDA(iommu_global_pasid_ida);
  
- /**
-  * iommu_sva_alloc_pasid - Allocate a PASID for the mm
-  * @mm: the mm
-  * @min: minimum PASID value (inclusive)
-  * @max: maximum PASID value (inclusive)
-  *
-  * Try to allocate a PASID for this mm, or take a reference to the existing one
-  * provided it fits within the [@min, @max] range. On success the PASID is
-  * available in mm->pasid and will be available for the lifetime of the mm.
-  *
-  * Returns 0 on success and < 0 on error.
-  */
- int iommu_sva_alloc_pasid(struct mm_struct *mm, ioasid_t min, ioasid_t max)
+ /* Allocate a PASID for the mm within range (inclusive) */
+ static int iommu_sva_alloc_pasid(struct mm_struct *mm, ioasid_t min, ioasid_t max)
  {
  	int ret = 0;
- 	ioasid_t pasid;
  
- 	if (min == INVALID_IOASID || max == INVALID_IOASID ||
 -	if (!pasid_valid(min) || !pasid_valid(max) ||
++	if (min == IOMMU_PASID_INVALID || max == IOMMU_PASID_INVALID ||
  	    min == 0 || max < min)
  		return -EINVAL;
  
@@@ -44,11 -28,11 +32,12 @@@
  		goto out;
  	}
  
- 	pasid = ioasid_alloc(&iommu_sva_pasid, min, max, mm);
- 	if (pasid == INVALID_IOASID)
- 		ret = -ENOMEM;
- 	else
- 		mm_pasid_set(mm, pasid);
+ 	ret = ida_alloc_range(&iommu_global_pasid_ida, min, max, GFP_KERNEL);
+ 	if (ret < min)
+ 		goto out;
+ 	mm->pasid = ret;
+ 	ret = 0;
++
  out:
  	mutex_unlock(&iommu_sva_lock);
  	return ret;
@@@ -242,3 -205,11 +210,11 @@@ out_put_mm
  
  	return status;
  }
+ 
+ void mm_pasid_drop(struct mm_struct *mm)
+ {
 -	if (likely(!pasid_valid(mm->pasid)))
++	if (likely(!mm_valid_pasid(mm)))
+ 		return;
+ 
+ 	ida_free(&iommu_global_pasid_ida, mm->pasid);
+ }
diff --cc drivers/iommu/iommu.c
index 807c98de40d4,153a3dab568c..f1dcfa3f1a1b
--- a/drivers/iommu/iommu.c
+++ b/drivers/iommu/iommu.c
@@@ -88,9 -87,10 +88,10 @@@ static const char * const iommu_group_r
  
  static int iommu_bus_notifier(struct notifier_block *nb,
  			      unsigned long action, void *data);
+ static void iommu_release_device(struct device *dev);
  static int iommu_alloc_default_domain(struct iommu_group *group,
  				      struct device *dev);
 -static struct iommu_domain *__iommu_domain_alloc(struct bus_type *bus,
 +static struct iommu_domain *__iommu_domain_alloc(const struct bus_type *bus,
  						 unsigned type);
  static int __iommu_attach_device(struct iommu_domain *domain,
  				 struct device *dev);
diff --cc include/linux/iommu.h
index 0fd4e6734d5b,7dbdd13d7ce0..e8c9a7da1060
--- a/include/linux/iommu.h
+++ b/include/linux/iommu.h
@@@ -455,12 -455,11 +455,11 @@@ static inline const struct iommu_ops *d
  	return dev->iommu->iommu_dev->ops;
  }
  
 -extern int bus_iommu_probe(struct bus_type *bus);
 -extern bool iommu_present(struct bus_type *bus);
 +extern int bus_iommu_probe(const struct bus_type *bus);
 +extern bool iommu_present(const struct bus_type *bus);
  extern bool device_iommu_capable(struct device *dev, enum iommu_cap cap);
  extern bool iommu_group_has_isolated_msi(struct iommu_group *group);
 -extern struct iommu_domain *iommu_domain_alloc(struct bus_type *bus);
 +extern struct iommu_domain *iommu_domain_alloc(const struct bus_type *bus);
- extern struct iommu_group *iommu_group_get_by_id(int id);
  extern void iommu_domain_free(struct iommu_domain *domain);
  extern int iommu_attach_device(struct iommu_domain *domain,
  			       struct device *dev);
@@@ -1172,7 -1165,17 +1165,16 @@@ static inline bool tegra_dev_iommu_get_
  	return false;
  }
  
 -static inline bool pasid_valid(ioasid_t ioasid)
 -{
 -	return ioasid != IOMMU_PASID_INVALID;
 -}
 -
  #ifdef CONFIG_IOMMU_SVA
+ static inline void mm_pasid_init(struct mm_struct *mm)
+ {
+ 	mm->pasid = IOMMU_PASID_INVALID;
+ }
++static inline bool mm_valid_pasid(struct mm_struct *mm)
++{
++	return mm->pasid != IOMMU_PASID_INVALID;
++}
+ void mm_pasid_drop(struct mm_struct *mm);
  struct iommu_sva *iommu_sva_bind_device(struct device *dev,
  					struct mm_struct *mm);
  void iommu_sva_unbind_device(struct iommu_sva *handle);
@@@ -1192,6 -1195,8 +1194,9 @@@ static inline u32 iommu_sva_get_pasid(s
  {
  	return IOMMU_PASID_INVALID;
  }
+ static inline void mm_pasid_init(struct mm_struct *mm) {}
++static inline bool mm_valid_pasid(struct mm_struct *mm) { return false; }
+ static inline void mm_pasid_drop(struct mm_struct *mm) {}
  #endif /* CONFIG_IOMMU_SVA */
  
  #endif /* __LINUX_IOMMU_H */
diff --cc kernel/fork.c
index 735d9f4f5acf,e7d10ad98a69..ed4e01daccaa
--- a/kernel/fork.c
+++ b/kernel/fork.c
@@@ -97,7 -97,7 +97,8 @@@
  #include <linux/io_uring.h>
  #include <linux/bpf.h>
  #include <linux/stackprotector.h>
 +#include <linux/user_events.h>
+ #include <linux/iommu.h>
  
  #include <asm/pgalloc.h>
  #include <linux/uaccess.h>

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

             reply	other threads:[~2023-04-30 11:20 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-04-30 11:13 Joerg Roedel [this message]
2023-04-30 20:07 ` [git pull] IOMMU Updates for Linux v6.4 Linus Torvalds
2023-04-30 23:06   ` Jason Gunthorpe
2023-05-06  4:09     ` Jacob Pan
2023-05-05 14:02   ` Joerg Roedel
2023-05-05 18:03     ` Linus Torvalds
2023-05-05 19:57       ` Jason Gunthorpe
2023-05-05 20:10         ` Linus Torvalds
2023-05-06  2:58           ` Tian, Kevin
2023-04-30 20:08 ` pr-tracker-bot

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=ZE5NR5Ml8I2/Ze0f@8bytes.org \
    --to=joro@8bytes.org \
    --cc=iommu@lists.linux.dev \
    --cc=linux-kernel@vger.kernel.org \
    --cc=torvalds@linux-foundation.org \
    --cc=will@kernel.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.