[lkml]   [2022]   [Feb]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
Subject[PATCH v4 00/11] Re-enable ENQCMD and PASID MSR
Problems in the old code to manage SVM (Shared Virtual Memory) devices
and the PASID (Process Address Space ID) led to that code being

Subsequent discussions resulted in a far simpler approach:

1) PASID life cycle is from first allocation by a process until that
process exits.
2) All tasks begin with PASID disabled
3) The #GP fault handler tries to fix faulting ENQCMD instructions very
early (thus avoiding complexities of the XSAVE infrastructure)

Change Log:
- Update commit message in patch #4 (Thomas).
- Update commit message in patch #5 (Thomas).
- Add "Reviewed-by: Thomas Gleixner <>" in patch #1-#3
and patch #6-#9 (Thomas).
- Rebased to 5.17-rc3.

v3 can be found at

- Rename mm_pasid_get() to mm_pasid_set() in patch #5 (Thomas).
- Remove ioasid_get() because it's not used any more when the IOASID
is freed on mm exit in patch #5 (Thomas).
- Remove PASID's refcount exercise in ioasid_put() and rename
ioasid_put() to ioasid_free() in patch #5 and #11 (Thomas).
- Add Acked-by: Josh Poimboeuf <> in patch #10.

v2 can be found at

- Free PASID on mm exit instead of in exit(2) or unbind() (Thomas, AndyL,
- Directly write IA32_PASID MSR in fixup while local IRQ is still disabled
- Simplify handling ENQCMD in objtool (PeterZ and Josh)
- Define mm_pasid_get(), mm_pasid_drop(), and mm_pasid_init() in mm and
call the functions from IOMMU (Dave Hansen).
- A few changes in the #GP fixup function (Dave Hansen, Tony Luck).
- Initial PASID value is changed to INVALID_PASID (Ashok Raj and
Jacob Pan).
- Add mm_pasid_init(), mm_pasid_get(), and mm_pasid_drop() functions in mm.
So the mm's PASID operations are generic for both X86 and ARM
(Dave Hansen).
- Rename CONFIG_IOMMU_SVA_LIB to more useful and accurate
- Use CONFIG_IOMMU_SVA for PASID processing condition (Jacob)
- The patch that cleans up old update_pasid() function is in upstream
now (commit: 00ecd5401349 "iommu/vt-d: Clean up unused PASID updating
functions") and therefore it's removed from this version.

v1 can be found at

Fenghua Yu (10):
mm: Change CONFIG option for mm->pasid field
iommu/ioasid: Introduce a helper to check for valid PASIDs
kernel/fork: Initialize mm's PASID
iommu/sva: Assign a PASID to mm on PASID allocation and free it on mm
x86/fpu: Clear PASID when copying fpstate
x86/traps: Demand-populate PASID MSR via #GP
x86/cpufeatures: Re-enable ENQCMD
tools/objtool: Check for use of the ENQCMD instruction in the kernel
docs: x86: Change documentation for SVA (Shared Virtual Addressing)

Peter Zijlstra (1):
sched: Define and initialize a flag to identify valid PASID in the

Documentation/x86/sva.rst | 53 ++++++++++++++----
arch/x86/include/asm/disabled-features.h | 7 ++-
arch/x86/kernel/fpu/core.c | 7 +++
arch/x86/kernel/traps.c | 55 +++++++++++++++++++
drivers/iommu/Kconfig | 6 +-
drivers/iommu/Makefile | 2 +-
.../iommu/arm/arm-smmu-v3/arm-smmu-v3-sva.c | 5 +-
drivers/iommu/intel/Kconfig | 2 +-
drivers/iommu/intel/iommu.c | 4 +-
drivers/iommu/intel/svm.c | 9 ---
drivers/iommu/ioasid.c | 39 ++-----------
drivers/iommu/iommu-sva-lib.c | 39 ++++---------
drivers/iommu/iommu-sva-lib.h | 7 +--
include/linux/ioasid.h | 21 +++----
include/linux/mm_types.h | 2 +-
include/linux/sched.h | 3 +
include/linux/sched/mm.h | 26 +++++++++
kernel/fork.c | 15 +++--
mm/init-mm.c | 4 ++
tools/objtool/arch/x86/decode.c | 11 +++-
20 files changed, 197 insertions(+), 120 deletions(-)


 \ /
  Last update: 2022-02-08 02:06    [W:0.362 / U:1.332 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site