On 16/09/20 01:27, Sean Christopherson wrote: > Replace the existing kvm_x86_ops.need_emulation_on_page_fault() with a > more generic is_emulatable(), and unconditionally call the new function > in x86_emulate_instruction(). > > KVM will use the generic hook to support multiple security related > technologies that prevent emulation in one way or another. Similar to > the existing AMD #NPF case where emulation of the current instruction is > not possible due to lack of information, AMD's SEV-ES and Intel's SGX > and TDX will introduce scenarios where emulation is impossible due to > the guest's register state being inaccessible. And again similar to the > existing #NPF case, emulation can be initiated by kvm_mmu_page_fault(), > i.e. outside of the control of vendor-specific code. > > While the cause and architecturally visible behavior of the various > cases are different, e.g. SGX will inject a #UD, AMD #NPF is a clean > resume or complete shutdown, and SEV-ES and TDX "return" an error, the > impact on the common emulation code is identical: KVM must stop > emulation immediately and resume the guest. > > Query is_emulatable() in handle_ud() as well so that the > force_emulation_prefix code doesn't incorrectly modify RIP before > calling emulate_instruction() in the absurdly unlikely scenario that > KVM encounters forced emulation in conjunction with "do not emulate". Ahah, I love those adverb + adjective pairs (my favorite is https://patchwork.kernel.org/cover/10710751/ which unfortunately was in the cover letter and thus was not immortalized in linux.git). "is_emulatable" is not very grammatical, so I'd rather call it "can_emulate_instruction" instead. Either way, it's an improvement over "need". Queued, thanks. Paolo