[PATCH v2 00/26] Big big real mode improvements

Avi Kivity
2012-06-27T15:19:34Z

This patchset fixes several bugs in the emulator and in vmx invalid guest
state emulation. They are sufficient to boot several Linux and Windows
guests, so the last patch turns vmx invalid guest state emulation on by
default.

The first patch is a little hacky; we should try to emulate svm here by making
cpl a state, not a cache.

Changes from v1:
- folded addendum patchset (BSWAP..LTR) into this one
- fix stack_size() miscalculation for 64-bit, ENTER patch
- generate #GP when loading NULL to SS, if CPL!=RPL (noted by Kevin)
- fix SS base for ESP/EBP addressing without SIB
- more testing

Avi Kivity (26):
KVM: VMX: Return correct CPL during transition to protected mode
KVM: Split cpuid register access from computation
KVM: x86 emulator: change ->get_cpuid() accessor to use the x86
semantics
KVM: x86 emulator: emulate cpuid
KVM: x86 emulator: allow loading null SS in long mode
KVM: x86 emulator: fix LIDT/LGDT in long mode
KVM: VMX: Relax check on unusable segment
KVM: VMX: Limit iterations with emulator_invalid_guest_state
KVM: x86 emulator: emulate LEAVE
KVM: x86 emulator: initialize memop
KVM: Fix SS default ESP/EBP based addressing
KVM: x86 emulator: emulate SGDT/SIDT
KVM: VMX: Fix interrupt exit condition during emulation
KVM: VMX: Continue emulating after batch exhausted
KVM: x86 emulator: emulate LAHF
KVM: x86 emulator: fix byte-sized MOVZX/MOVSX
KVM: x86 emulator: split push logic from push opcode emulation
KVM: x86 emulator: implement ENTER
KVM: VMX: Stop invalid guest state emulation on pending event
KVM: VMX: Improve error reporting during invalid guest state
emulation
KVM: x86 emulator: emulate BSWAP
KVM: x86 emulator: emulate LLDT
KVM: x86 emulator: make read_segment_descriptor() return the address
KVM: x86 emulator: make loading TR set the busy bit
KVM: x86 emulator: implement LTR
KVM: VMX: Emulate invalid guest state by default

arch/x86/include/asm/kvm_emulate.h | 6 +-
arch/x86/kvm/cpuid.c | 38 ++++--
arch/x86/kvm/cpuid.h | 1 +
arch/x86/kvm/emulate.c | 273 +++++++++++++++++++++++++++++--------
arch/x86/kvm/vmx.c | 38 ++++--
arch/x86/kvm/x86.c | 20 +--
6 files changed, 276 insertions(+), 100 deletions(-)

--
1.7.11