Message ID | 20221004081023.32402-1-jgross@suse.com |
---|---|
Headers | show |
Series | x86: make pat and mtrr independent from each other | expand |
Ping? On 04.10.22 10:10, Juergen Gross wrote: > Today PAT can't be used without MTRR being available, unless MTRR is at > least configured via CONFIG_MTRR and the system is running as Xen PV > guest. In this case PAT is automatically available via the hypervisor, > but the PAT MSR can't be modified by the kernel and MTRR is disabled. > > The same applies to a kernel built with no MTRR support: it won't > allow to use the PAT MSR, even if there is no technical reason for > that, other than setting up PAT on all cpus the same way (which is a > requirement of the processor's cache management) is relying on some > MTRR specific code. > > Fix all of that by: > > - moving the function needed by PAT from MTRR specific code one level > up > - reworking the init sequences of MTRR and PAT to be more similar to > each other without calling PAT from MTRR code > - removing the dependency of PAT on MTRR > > While working on that I discovered two minor bugs in MTRR code, which > are fixed, too. > > There is some more cleanup done reducing code size. > > Changes in V4: > - new patches 10, 14, 15, 16 > - split up old patch 4 into 3 patches > - addressed comments > > Changes in V3: > - replace patch 1 by just adding a comment > > Changes in V2: > - complete rework of the patches based on comments by Boris Petkov > - added several patches to the series > > Juergen Gross (16): > x86/mtrr: add comment for set_mtrr_state() serialization > x86/mtrr: remove unused cyrix_set_all() function > x86/mtrr: replace use_intel() with a local flag > x86/mtrr: rename prepare_set() and post_set() > x86/mtrr: split MTRR specific handling from cache dis/enabling > x86: move some code out of arch/x86/kernel/cpu/mtrr > x86/mtrr: split generic_set_all() > x86/mtrr: remove set_all callback from struct mtrr_ops > x86/mtrr: simplify mtrr_bp_init() > x86/mtrr: get rid of mtrr_enabled bool > x86/mtrr: let cache_aps_delayed_init replace mtrr_aps_delayed_init > x86/mtrr: add a stop_machine() handler calling only cache_cpu_init() > x86: decouple pat and mtrr handling > x86: switch cache_ap_init() to hotplug callback > x86: do MTRR/PAT setup on all secondary CPUs in parallel > x86/mtrr: simplify mtrr_ops initialization > > arch/x86/include/asm/cacheinfo.h | 18 +++ > arch/x86/include/asm/memtype.h | 5 +- > arch/x86/include/asm/mtrr.h | 13 +- > arch/x86/kernel/cpu/cacheinfo.c | 168 ++++++++++++++++++++++++++ > arch/x86/kernel/cpu/common.c | 2 +- > arch/x86/kernel/cpu/mtrr/amd.c | 8 +- > arch/x86/kernel/cpu/mtrr/centaur.c | 8 +- > arch/x86/kernel/cpu/mtrr/cyrix.c | 42 +------ > arch/x86/kernel/cpu/mtrr/generic.c | 127 +++----------------- > arch/x86/kernel/cpu/mtrr/mtrr.c | 185 ++++------------------------- > arch/x86/kernel/cpu/mtrr/mtrr.h | 20 ++-- > arch/x86/kernel/setup.c | 14 +-- > arch/x86/kernel/smpboot.c | 9 +- > arch/x86/mm/pat/memtype.c | 127 ++++++-------------- > arch/x86/power/cpu.c | 3 +- > include/linux/cpuhotplug.h | 1 + > 16 files changed, 298 insertions(+), 452 deletions(-) >