acrn-hypervisor/hypervisor/include/arch/x86/asm/guest
Tao Yuhong 553d59644b HV: Fix decode_instruction() trigger #UD for emulating UC-lock
When ACRN uses decode_instruction to emulate split-lock/uc-lock
instruction, It is actually a try-decode to see if it is XCHG.
If the instruction is XCHG instruction, ACRN must emulate it
(inject #PF if it is triggered) with peer VCPUs paused, and advance
the guest IP. If the instruction is a LOCK prefixed instruction
with accessing the UC memory, ACRN Halted the peer VCPUs, and
advance the IP to skip the LOCK prefix, and then let the VCPU
Executes one instruction by enabling IRQ Windows vm-exit. For
other cases, ACRN injects the exception back to VCPU without
emulating it.
So change the API to decode_instruction(vcpu, bool full_decode),
when full_decode is true, the API does same thing as before. When
full_decode is false, the different is if decode_instruction() meet unknown
instruction, will keep return = -1 and do not inject #UD. We can use
this to distinguish that an #UD has been skipped, and need inject #AC/#GP back.

Tracked-On: #6299
Signed-off-by: Tao Yuhong <yuhong.tao@intel.com>
2021-07-21 11:25:47 +08:00
..
assign.h hv: mod: do not use explicit arch name when including headers 2021-05-08 11:15:46 +08:00
ept.h hv: Rename get_ept_entry() to get_eptp() 2021-06-09 10:07:05 +08:00
guest_memory.h hv: mod: do not use explicit arch name when including headers 2021-05-08 11:15:46 +08:00
guest_pm.h hv: mod: do not use explicit arch name when including headers 2021-05-08 11:15:46 +08:00
hyperv.h hv: mod: do not use explicit arch name when including headers 2021-05-08 11:15:46 +08:00
instr_emul.h HV: Fix decode_instruction() trigger #UD for emulating UC-lock 2021-07-21 11:25:47 +08:00
nested.h hv: nested: implement nested VM exit handler 2021-06-03 15:23:25 +08:00
splitlock.h hv: mod: do not use explicit arch name when including headers 2021-05-08 11:15:46 +08:00
trusty.h hv: mod: do not use explicit arch name when including headers 2021-05-08 11:15:46 +08:00
ucode.h hv: mod: do not use explicit arch name when including headers 2021-05-08 11:15:46 +08:00
vcpu.h hv: dm: Use new ioctl ACRN_IOCTL_SET_VCPU_REGS 2021-07-15 11:53:54 +08:00
vcpuid.h hv: mod: do not use explicit arch name when including headers 2021-05-08 11:15:46 +08:00
vept.h hv: nested: Introduce L2 VM EPT VIOLATION handler 2021-06-04 13:53:47 +08:00
virq.h hv: mod: do not use explicit arch name when including headers 2021-05-08 11:15:46 +08:00
virtual_cr.h hv: mod: do not use explicit arch name when including headers 2021-05-08 11:15:46 +08:00
vlapic.h hv: vlapic: wrap a function to calculate destination vcpu mask by shorthand 2021-05-24 10:27:32 +08:00
vm_reset.h hv: mod: do not use explicit arch name when including headers 2021-05-08 11:15:46 +08:00
vm.h hv: dm: Use new power management data structures 2021-07-15 11:53:54 +08:00
vmcs.h hv: nested: support for VMPTRLD emulation 2021-05-24 10:34:01 +08:00
vmexit.h hv: mod: do not use explicit arch name when including headers 2021-05-08 11:15:46 +08:00
vmtrr.h hv: mod: do not use explicit arch name when including headers 2021-05-08 11:15:46 +08:00
vmx_io.h hv: dm: Use new I/O request data structures 2021-07-15 11:53:54 +08:00