Message ID | 20210510144834.658457-1-aaronlewis@google.com (mailing list archive) |
---|---|
Headers | show |
Series | fallback for emulation errors | expand |
On 10/05/21 16:48, Aaron Lewis wrote: > This patchset allows userspace to be a fallback for handling emulation errors. > > v1 -> v2: > > - Added additional documentation for KVM_CAP_EXIT_ON_EMULATION_FAILURE. > - In prepare_emulation_failure_exit(): > - Created a local variable for vcpu->run. > - Cleared the flags, emulation_failure.flags. > - Or'd the instruction bytes flag on to emulation_failure.flags. > - Updated the comment for KVM_INTERNAL_ERROR_EMULATION flags on how they are > to be used. > - Updated the comment for struct emulation_failure. > > v2 -> v3: > > - Update documentation for KVM_CAP_EXIT_ON_EMULATION_FAILURE. > - Fix spacing in prepare_emulation_failure_exit(). > > v3 -> v4: > > - In prepare_emulation_failure_exit(): > - Clear instruction bytes to 0x90. > - Copy over insn_size bytes rather than sizeof(ctxt->fetch.data). > - set_page_table_entry() takes a pte rather than mask. > - In _vm_get_page_table_entry(): > - Removed check for page aligned addresses only. > - Added canonical check. > - Added a check to make sure no reserved bits are set along the walk except > for the final pte (the pte cannot have the reserved bits checked otherwise > the test would fail). > - Added check to ensure superpage bits are clear. > - Added check in test for 'allow_smaller_maxphyaddr' module parameter. > - If the is_flds() check fails, only look at the first byte. > - Don't use labels to increment the RIP. Decode the instruction well enough to > ensure it is only 2-bytes. > > v4 -> v5: > > - Switch 'insn_size' to u32. > - Add documentation for how the flags are used. > - Remove 'max_insn_size' and use 'sizeof(run->emulation_failure.insn_bytes)' instead. > - Fix typos. > - Fix canonical check. > - Add reserved check for bit-7 of PML4E. > - Add reserved check for bit-63 of all page table levels if EFER.NXE = 0. > - Remove opcode check (it might be a prefix). > - Remove labels. > - Remove detritus (rogue cpuid entry in the test). > > v5 -> v6 > > - Fix documentation. > > Aaron Lewis (2): > kvm: x86: Allow userspace to handle emulation errors > selftests: kvm: Allows userspace to handle emulation errors. > > Documentation/virt/kvm/api.rst | 19 ++ > arch/x86/include/asm/kvm_host.h | 6 + > arch/x86/kvm/x86.c | 37 ++- > include/uapi/linux/kvm.h | 23 ++ > tools/include/uapi/linux/kvm.h | 23 ++ > tools/testing/selftests/kvm/.gitignore | 1 + > tools/testing/selftests/kvm/Makefile | 1 + > .../selftests/kvm/include/x86_64/processor.h | 4 + > .../selftests/kvm/lib/x86_64/processor.c | 94 ++++++++ > .../kvm/x86_64/emulator_error_test.c | 219 ++++++++++++++++++ > 10 files changed, 423 insertions(+), 4 deletions(-) > create mode 100644 tools/testing/selftests/kvm/x86_64/emulator_error_test.c > Queued, thanks (not yet tested, but still). Paolo