01 Aug, 2010
40 commits
-
All vcpu ioctls need to be locked, so instead of locking each one specifically
we lock at the generic dispatcher.This patch only updates generic ioctls and leaves arch specific ioctls alone.
Signed-off-by: Avi Kivity
-
fix:
arch/x86/kvm/x86.c: In function ‘handle_emulation_failure’:
arch/x86/kvm/x86.c:3844: warning: unused variable ‘ctxt’Signed-off-by: Xiao Guangrong
Signed-off-by: Marcelo Tosatti -
sp->gfns[] contain unaliased gfns, but gpte might contain pointer
to aliased region.Signed-off-by: Xiao Guangrong
Signed-off-by: Marcelo Tosatti -
Remove rmap before clear spte otherwise it will trigger BUG_ON() in
some functions such as rmap_write_protect().Signed-off-by: Xiao Guangrong
Signed-off-by: Marcelo Tosatti -
Use kmem_cache_free to free objects allocated by kmem_cache_alloc.
Signed-off-by: Xiao Guangrong
Signed-off-by: Marcelo Tosatti -
Only modifying some bits of CR0/CR4 needs paging mode switch.
Modify EFER.NXE bit would result in reserved bit updates.
Signed-off-by: Sheng Yang
Signed-off-by: Marcelo Tosatti -
mmu.free() already set root_hpa to INVALID_PAGE, no need to do it again in the
destory_kvm_mmu().kvm_x86_ops->set_cr4() and set_efer() already assign cr4/efer to
vcpu->arch.cr4/efer, no need to do it again later.Signed-off-by: Sheng Yang
Signed-off-by: Marcelo Tosatti -
This adds missing decoder flags for xor instructions (opcodes 0x34 - 0x35)
Signed-off-by: Mohammed Gamal
Signed-off-by: Marcelo Tosatti -
This adds missing decoder flags for sub instructions (opcodes 0x2c - 0x2d)
Signed-off-by: Mohammed Gamal
Signed-off-by: Marcelo Tosatti -
This adds test acc, imm instruction to the x86 emulator
Signed-off-by: Mohammed Gamal
Signed-off-by: Marcelo Tosatti -
Signed-off-by: Marcelo Tosatti
-
SDM suggests VMXON should be called before VMPTRLD, and VMXOFF
should be called after doing VMCLEAR.Therefore in vmm coexistence case, we should firstly call VMXON
before any VMCS operation, and then call VMXOFF after the
operation is done.Signed-off-by: Dongxiao Xu
Signed-off-by: Marcelo Tosatti -
Originally VMCLEAR/VMPTRLD is called on vcpu migration. To
support hosted VMM coexistance, VMCLEAR is executed on vcpu
schedule out, and VMPTRLD is executed on vcpu schedule in.
This could also eliminate the IPI when doing VMCLEAR.Signed-off-by: Dongxiao Xu
Signed-off-by: Marcelo Tosatti -
Do some preparations for vmm coexistence support.
Signed-off-by: Dongxiao Xu
Signed-off-by: Marcelo Tosatti -
Define vmcs_load() and kvm_cpu_vmxon() to avoid direct call of asm
code. Also move VMXE bit operation out of kvm_cpu_vmxoff().Signed-off-by: Dongxiao Xu
Signed-off-by: Marcelo Tosatti -
We drop the mmu lock between freeing memory and allocating the roots; this
allows some other vcpu to sneak in and allocate memory.While the race is benign (resulting only in temporary overallocation, not oom)
it is simple and easy to fix by moving the freeing close to the allocation.Signed-off-by: Avi Kivity
Signed-off-by: Marcelo Tosatti -
Do not kill VM when instruction emulation fails. Inject #UD and report
failure to userspace instead. Userspace may choose to reenter guest if
vcpu is in userspace (cpl == 3) in which case guest OS will kill
offending process and continue running.Signed-off-by: Gleb Natapov
Signed-off-by: Marcelo Tosatti -
Currently, kvm_mmu_zap_page() returning the number of freed children sp.
This might confuse the caller, because caller don't know the actual freed
number. Let's make kvm_mmu_zap_page() return the number of pages it actually
freed.Signed-off-by: Gui Jianfeng
Signed-off-by: Avi Kivity -
Fix a debug output error in walk_addr
Signed-off-by: Gui Jianfeng
Signed-off-by: Avi Kivity -
Sometime cmpxchg_gpte doesn't modify gpte, in such case, don't mark
page table page as dirty.Signed-off-by: Gui Jianfeng
Signed-off-by: Avi Kivity -
This patch enables setting of efer bit 13 which is allowed
in all SVM capable processors. This is necessary for the
SLES11 version of Xen 4.0 to boot with nested svm.Signed-off-by: Joerg Roedel
Signed-off-by: Avi Kivity -
This patch adds a function to dump the vmcb into the kernel
log and calls it after a failed vmrun to ease debugging.Signed-off-by: Joerg Roedel
Signed-off-by: Avi Kivity -
KVM_REQ_KICK poisons vcpu->requests by having a bit set during normal
operation. This causes the fast path check for a clear vcpu->requests
to fail all the time, triggering tons of atomic operations.Fix by replacing KVM_REQ_KICK with a vcpu->guest_mode atomic.
Signed-off-by: Avi Kivity
-
Return exception as a result of instruction emulation and handle
injection in KVM code.Signed-off-by: Gleb Natapov
Signed-off-by: Avi Kivity -
Emulator shouldn't access vcpu directly.
Signed-off-by: Gleb Natapov
Signed-off-by: Avi Kivity -
Emulator shouldn't access vcpu directly.
Signed-off-by: Gleb Natapov
Signed-off-by: Avi Kivity -
emulate_sysexit() should use shadowed registers copy instead of
looking into vcpu state directly.Signed-off-by: Gleb Natapov
Signed-off-by: Avi Kivity -
Removes the need for set_flags() callback.
Signed-off-by: Gleb Natapov
Signed-off-by: Avi Kivity -
Return new RIP as part of instruction emulation result instead of
updating KVM's RIP from x86 emulator code.Signed-off-by: Gleb Natapov
Signed-off-by: Avi Kivity -
If emulation failed return immediately.
Signed-off-by: Gleb Natapov
Signed-off-by: Avi Kivity -
Return error to x86 emulator instead of injection exception behind its back.
Signed-off-by: Gleb Natapov
Signed-off-by: Avi Kivity -
It is not called directly outside of the file it's defined in anymore.
Signed-off-by: Gleb Natapov
Signed-off-by: Avi Kivity -
Currently emulator returns -1 when emulation failed or IO is needed.
Caller tries to guess whether emulation failed by looking at other
variables. Make it easier for caller to recognise error condition by
always returning -1 in case of failure. For this new emulator
internal return value X86EMUL_IO_NEEDED is introduced. It is used to
distinguish between error condition (which returns X86EMUL_UNHANDLEABLE)
and condition that requires IO exit to userspace to continue emulation.Signed-off-by: Gleb Natapov
Signed-off-by: Avi Kivity -
Fill in run->mmio details in (read|write)_emulated function just like
pio does. There is no point in filling only vcpu fields there just to
copy them into vcpu->run a little bit later.Signed-off-by: Gleb Natapov
Signed-off-by: Avi Kivity -
Currently X86EMUL_PROPAGATE_FAULT, X86EMUL_RETRY_INSTR and
X86EMUL_CMPXCHG_FAILED have the same value so caller cannot
distinguish why function such as emulator_cmpxchg_emulated()
(which can return both X86EMUL_PROPAGATE_FAULT and
X86EMUL_CMPXCHG_FAILED) failed.Signed-off-by: Gleb Natapov
Signed-off-by: Avi Kivity -
Make (get|set)_dr() callback return error if it fails instead of
injecting exception behind emulator's back.Signed-off-by: Gleb Natapov
Signed-off-by: Avi Kivity -
Make set_cr() callback return error if it fails instead of injecting #GP
behind emulator's back.Signed-off-by: Gleb Natapov
Signed-off-by: Avi Kivity -
Use callbacks from x86_emulate_ops to access segments instead of calling
into kvm directly.Signed-off-by: Gleb Natapov
Signed-off-by: Avi Kivity -
On VMX it is expensive to call get_cached_descriptor() just to get segment
base since multiple vmcs_reads are done instead of only one. Introduce
new call back get_cached_segment_base() for efficiency.Signed-off-by: Gleb Natapov
Signed-off-by: Avi Kivity -
Add (set|get)_msr callbacks to x86_emulate_ops instead of calling
them directly.Signed-off-by: Gleb Natapov
Signed-off-by: Avi Kivity