This series makes it possible for userspace to manage MSRs by having KVM forward select MSRs to it when rdmsr and wrmsr are executed in the guest. Userspace can set this up by calling the ioctl KVM_SET_EXIT_MSRS with a list of MSRs it wants to manage. When KVM encounters any of these MSRs they are forwarded to userspace for processing. Userspace can then read from or write to the MSR, or it can also throw a #GP if needed. This series includes the kernel changes needed to implement this feature and a test that exercises this behavior. Also, included is an implementation of expection handling in selftests, which allows the test to excercise throwing a #GP. Aaron Lewis (6): KVM: x86: Add ioctl for accepting a userspace provided MSR list KVM: x86: Add support for exiting to userspace on rdmsr or wrmsr KVM: x86: Prepare MSR bitmaps for userspace tracked MSRs KVM: x86: Ensure the MSR bitmap never clears userspace tracked MSRs selftests: kvm: Fix the segment descriptor layout to match the actual layout selftests: kvm: Add test to exercise userspace MSR list Documentation/virt/kvm/api.rst | 53 +++- arch/x86/include/asm/kvm_host.h | 5 + arch/x86/kvm/svm/svm.c | 93 ++++-- arch/x86/kvm/trace.h | 24 ++ arch/x86/kvm/vmx/nested.c | 2 +- arch/x86/kvm/vmx/vmx.c | 94 +++--- arch/x86/kvm/vmx/vmx.h | 2 +- arch/x86/kvm/x86.c | 140 +++++++++ include/trace/events/kvm.h | 2 +- include/uapi/linux/kvm.h | 12 + tools/testing/selftests/kvm/.gitignore | 1 + tools/testing/selftests/kvm/Makefile | 20 +- .../selftests/kvm/include/x86_64/processor.h | 29 +- tools/testing/selftests/kvm/lib/kvm_util.c | 17 ++ .../selftests/kvm/lib/kvm_util_internal.h | 2 + .../selftests/kvm/lib/x86_64/handlers.S | 83 ++++++ .../selftests/kvm/lib/x86_64/processor.c | 168 ++++++++++- .../testing/selftests/kvm/lib/x86_64/ucall.c | 3 + .../selftests/kvm/x86_64/userspace_msr_exit.c | 271 ++++++++++++++++++ 19 files changed, 931 insertions(+), 90 deletions(-) create mode 100644 tools/testing/selftests/kvm/lib/x86_64/handlers.S create mode 100644 tools/testing/selftests/kvm/x86_64/userspace_msr_exit.c -- 2.28.0.163.g6104cc2f0b6-goog