lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <ZE5NR5Ml8I2/Ze0f@8bytes.org>
Date:   Sun, 30 Apr 2023 13:13:11 +0200
From:   Joerg Roedel <joro@...tes.org>
To:     Linus Torvalds <torvalds@...ux-foundation.org>
Cc:     Will Deacon <will@...nel.org>, linux-kernel@...r.kernel.org,
        iommu@...ts.linux.dev
Subject: [git pull] IOMMU Updates for Linux v6.4

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>

Download attachment "signature.asc" of type "application/pgp-signature" (834 bytes)

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ