[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <20220128202905.2274672-1-fenghua.yu@intel.com>
Date: Fri, 28 Jan 2022 12:28:54 -0800
From: Fenghua Yu <fenghua.yu@...el.com>
To: "Thomas Gleixner" <tglx@...utronix.de>,
"Dave Hansen" <dave.hansen@...ux.intel.com>,
"Ingo Molnar" <mingo@...hat.com>, "Borislav Petkov" <bp@...en8.de>,
"Peter Zijlstra" <peterz@...radead.org>,
"Andy Lutomirski" <luto@...nel.org>,
"Tony Luck" <tony.luck@...el.com>,
"Lu Baolu" <baolu.lu@...ux.intel.com>,
"Joerg Roedel" <joro@...tes.org>,
Josh Poimboeuf <jpoimboe@...hat.com>,
"Jacob Pan" <jacob.jun.pan@...ux.intel.com>,
"Ashok Raj" <ashok.raj@...el.com>,
"Ravi V Shankar" <ravi.v.shankar@...el.com>
Cc: iommu@...ts.linux-foundation.org, "x86" <x86@...nel.org>,
"linux-kernel" <linux-kernel@...r.kernel.org>,
Fenghua Yu <fenghua.yu@...el.com>
Subject: [PATCH v3 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
disabled.
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:
v3:
- 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 <jpoimboe@...hat.com> in patch #10.
v2 can be found at https://lore.kernel.org/lkml/20211217220136.2762116-1-fenghua.yu@intel.com/
v2:
- Free PASID on mm exit instead of in exit(2) or unbind() (Thomas, AndyL,
PeterZ)
- Directly write IA32_PASID MSR in fixup while local IRQ is still disabled
(Thomas)
- 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
CONFIG_IOMMU_SVA
- 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 https://lore.kernel.org/lkml/20210920192349.2602141-1-fenghua.yu@intel.com/T/#md6d542091da1d1159eda0a44a16e57d0c0dfb209
Fenghua Yu (10):
iommu/sva: Rename CONFIG_IOMMU_SVA_LIB to CONFIG_IOMMU_SVA
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
exit
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
task
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 | 38 ++-----------
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(+), 119 deletions(-)
--
2.35.0
Powered by blists - more mailing lists