[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH v2 00/12] x86/msr: Inline rdmsr/wrmsr instructions
When building a kernel with CONFIG_PARAVIRT_XXL the paravirt infrastructure will always use functions for reading or writing MSRs, even when running on bare metal. Switch to inline RDMSR/WRMSR instructions in this case, reducing the paravirt overhead. In order to make this less intrusive, some further reorganization of the MSR access helpers is done in the first 5 patches. The next 5 patches are converting the non-paravirt case to use direct inlining of the MSR access instructions, including the WRMSRNS instruction and the immediate variants of RDMSR and WRMSR if possible. Patch 11 removes the PV hooks for MSR accesses and implements the Xen PV cases via calls depending on X86_FEATURE_XENPV, which results in runtime patching those calls away for the non-XenPV case. Patch 12 is a final little cleanup patch. This series has been tested to work with Xen PV and on bare metal. This series is inspired by Xin Li, who used a similar approach, but (in my opinion) with some flaws. Originally I thought it should be possible to use the paravirt infrastructure, but this turned out to be rather complicated, especially for the Xen PV case in the *_safe() variants of the MSR access functions. Changes since V1: - Use Xin Li's approach for inlining - Several new patches Juergen Gross (9): coco/tdx: Rename MSR access helpers x86/sev: replace call of native_wrmsr() with native_wrmsrq() x86/kvm: Remove the KVM private read_msr() function x86/msr: minimize usage of native_*() msr access functions x86/msr: Move MSR trace calls one function level up x86/msr: Use the alternatives mechanism for WRMSR x86/msr: Use the alternatives mechanism for RDMSR x86/paravirt: Don't use pv_ops vector for MSR access functions x86/msr: Reduce number of low level MSR access helpers Xin Li (Intel) (3): x86/cpufeatures: Add a CPU feature bit for MSR immediate form instructions x86/opcode: Add immediate form MSR instructions x86/extable: Add support for immediate form MSR instructions arch/x86/coco/tdx/tdx.c | 8 +- arch/x86/hyperv/ivm.c | 2 +- arch/x86/include/asm/cpufeatures.h | 1 + arch/x86/include/asm/fred.h | 2 +- arch/x86/include/asm/kvm_host.h | 10 - arch/x86/include/asm/msr.h | 409 +++++++++++++++++++------- arch/x86/include/asm/paravirt.h | 67 ----- arch/x86/include/asm/paravirt_types.h | 13 - arch/x86/include/asm/sev-internal.h | 7 +- arch/x86/kernel/cpu/scattered.c | 1 + arch/x86/kernel/kvmclock.c | 2 +- arch/x86/kernel/paravirt.c | 5 - arch/x86/kvm/svm/svm.c | 16 +- arch/x86/kvm/vmx/vmx.c | 4 +- arch/x86/lib/x86-opcode-map.txt | 5 +- arch/x86/mm/extable.c | 39 ++- arch/x86/xen/enlighten_pv.c | 24 +- arch/x86/xen/pmu.c | 5 +- tools/arch/x86/lib/x86-opcode-map.txt | 5 +- 19 files changed, 383 insertions(+), 242 deletions(-) -- 2.51.0
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |