[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [RFC PATCH v1 00/15] MSR refactor with new MSR instructions support
Obviously the existing MSR code and the pv_ops MSR access APIs need some love: https://lore.kernel.org/lkml/87y1h81ht4.ffs@tglx/ hpa has started a discussion about how to refactor it last October: https://lore.kernel.org/lkml/7a4de623-ecda-4369-a7ae-0c43ef328177@xxxxxxxxx/ The consensus so far is to utilize the alternatives mechanism to eliminate the Xen MSR access overhead on native systems and enable new MSR instructions based on their availability. To achieve this, a code refactor is necessary. Initially, the MSR API usage needs to be unified and simplified, which is addressed by patches 1 through 7. Patches 8 and 9 introduce basic support for immediate form MSR instructions, while patch 10 employs the immediate form WRMSRNS in VMX. Finally, patches 11 to 15 leverage the alternatives mechanism to read and write MSR. H. Peter Anvin (Intel) (1): x86/extable: Implement EX_TYPE_FUNC_REWIND Xin Li (Intel) (14): x86/msr: Replace __wrmsr() with native_wrmsrl() x86/msr: Replace __rdmsr() with native_rdmsrl() x86/msr: Simplify pmu_msr_{read,write}() x86/msr: Let pv_cpu_ops.write_msr{_safe}() take an u64 instead of two u32 x86/msr: Replace wrmsr(msr, low, 0) with wrmsrl(msr, value) x86/msr: Remove MSR write APIs that take the MSR value in two u32 arguments x86/msr: Remove pmu_msr_{read,write}() x86/cpufeatures: Add a CPU feature bit for MSR immediate form instructions x86/opcode: Add immediate form MSR instructions to x86-opcode-map KVM: VMX: Use WRMSRNS or its immediate form when available x86/msr: Use the alternatives mechanism to write MSR x86/msr: Use the alternatives mechanism to read MSR x86/extable: Add support for the immediate form MSR instructions x86/msr: Move the ARGS macros after the MSR read/write APIs arch/x86/coco/sev/core.c | 2 +- arch/x86/events/amd/brs.c | 4 +- arch/x86/hyperv/hv_apic.c | 6 +- arch/x86/hyperv/hv_vtl.c | 4 +- arch/x86/hyperv/ivm.c | 2 +- arch/x86/include/asm/apic.h | 4 +- arch/x86/include/asm/asm.h | 6 + arch/x86/include/asm/cpufeatures.h | 19 +- arch/x86/include/asm/extable_fixup_types.h | 1 + arch/x86/include/asm/fred.h | 2 +- arch/x86/include/asm/mshyperv.h | 2 +- arch/x86/include/asm/msr-index.h | 6 + arch/x86/include/asm/msr.h | 664 ++++++++++++++++----- arch/x86/include/asm/paravirt.h | 64 -- arch/x86/include/asm/paravirt_types.h | 11 - arch/x86/include/asm/switch_to.h | 2 +- arch/x86/kernel/cpu/amd.c | 2 +- arch/x86/kernel/cpu/common.c | 10 +- arch/x86/kernel/cpu/mce/core.c | 6 +- arch/x86/kernel/cpu/resctrl/pseudo_lock.c | 12 +- arch/x86/kernel/cpu/resctrl/rdtgroup.c | 2 +- arch/x86/kernel/cpu/scattered.c | 1 + arch/x86/kernel/cpu/umwait.c | 4 +- arch/x86/kernel/kvm.c | 2 +- arch/x86/kernel/kvmclock.c | 2 +- arch/x86/kernel/paravirt.c | 4 - arch/x86/kvm/svm/svm.c | 15 +- arch/x86/kvm/vmx/vmenter.S | 28 +- arch/x86/kvm/vmx/vmx.c | 4 +- arch/x86/lib/x86-opcode-map.txt | 5 +- arch/x86/mm/extable.c | 186 ++++-- arch/x86/mm/mem_encrypt_identity.c | 4 +- arch/x86/xen/enlighten_pv.c | 110 ++-- arch/x86/xen/pmu.c | 43 +- arch/x86/xen/xen-asm.S | 89 +++ arch/x86/xen/xen-ops.h | 12 +- drivers/ata/pata_cs5535.c | 12 +- drivers/ata/pata_cs5536.c | 6 +- drivers/cpufreq/acpi-cpufreq.c | 2 +- drivers/cpufreq/e_powersaver.c | 2 +- drivers/cpufreq/powernow-k6.c | 8 +- tools/arch/x86/lib/x86-opcode-map.txt | 5 +- 42 files changed, 896 insertions(+), 479 deletions(-) base-commit: 8fc8ae1aeed6dc895bf35a4797c6e770574f4612 -- 2.49.0
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |