Merge branch 'kvm-updates-2.6.26' of git://git.kernel.org/pub/scm/linux/kernel/git/avi/kvm
* 'kvm-updates-2.6.26' of git://git.kernel.org/pub/scm/linux/kernel/git/avi/kvm: KVM: LAPIC: ignore pending timers if LVTT is disabled KVM: Update MAINTAINERS for new mailing lists KVM: Fix kvm_vcpu_block() task state race KVM: ia64: Set KVM_IOAPIC_NUM_PINS to 48 KVM: ia64: fix GVMM module including position-dependent objects KVM: ia64: Define new kvm_fpreg struture to replace ia64_fpreg KVM: PIT: take inject_pending into account when emulating hlt s390: KVM guest: fix compile error KVM: x86 emulator: fix writes to registers with modrm encodings
This commit is contained in:
@ -7,7 +7,6 @@ offsets-file := asm-offsets.h
|
||||
always := $(offsets-file)
|
||||
targets := $(offsets-file)
|
||||
targets += arch/ia64/kvm/asm-offsets.s
|
||||
clean-files := $(addprefix $(objtree)/,$(targets) $(obj)/memcpy.S $(obj)/memset.S)
|
||||
|
||||
# Default sed regexp - multiline due to syntax constraints
|
||||
define sed-y
|
||||
@ -54,5 +53,5 @@ EXTRA_CFLAGS_vcpu.o += -mfixed-range=f2-f5,f12-f127
|
||||
kvm-intel-objs = vmm.o vmm_ivt.o trampoline.o vcpu.o optvfault.o mmio.o \
|
||||
vtlb.o process.o
|
||||
#Add link memcpy and memset to avoid possible structure assignment error
|
||||
kvm-intel-objs += ../lib/memset.o ../lib/memcpy.o
|
||||
kvm-intel-objs += memcpy.o memset.o
|
||||
obj-$(CONFIG_KVM_INTEL) += kvm-intel.o
|
||||
|
1
arch/ia64/kvm/memcpy.S
Normal file
1
arch/ia64/kvm/memcpy.S
Normal file
@ -0,0 +1 @@
|
||||
#include "../lib/memcpy.S"
|
1
arch/ia64/kvm/memset.S
Normal file
1
arch/ia64/kvm/memset.S
Normal file
@ -0,0 +1 @@
|
||||
#include "../lib/memset.S"
|
@ -216,7 +216,7 @@ int pit_has_pending_timer(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
struct kvm_pit *pit = vcpu->kvm->arch.vpit;
|
||||
|
||||
if (pit && vcpu->vcpu_id == 0)
|
||||
if (pit && vcpu->vcpu_id == 0 && pit->pit_state.inject_pending)
|
||||
return atomic_read(&pit->pit_state.pit_timer.pending);
|
||||
|
||||
return 0;
|
||||
|
@ -957,7 +957,7 @@ int apic_has_pending_timer(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
struct kvm_lapic *lapic = vcpu->arch.apic;
|
||||
|
||||
if (lapic)
|
||||
if (lapic && apic_enabled(lapic) && apic_lvt_enabled(lapic, APIC_LVTT))
|
||||
return atomic_read(&lapic->timer.pending);
|
||||
|
||||
return 0;
|
||||
|
@ -677,8 +677,9 @@ static int decode_modrm(struct x86_emulate_ctxt *ctxt,
|
||||
c->use_modrm_ea = 1;
|
||||
|
||||
if (c->modrm_mod == 3) {
|
||||
c->modrm_val = *(unsigned long *)
|
||||
decode_register(c->modrm_rm, c->regs, c->d & ByteOp);
|
||||
c->modrm_ptr = decode_register(c->modrm_rm,
|
||||
c->regs, c->d & ByteOp);
|
||||
c->modrm_val = *(unsigned long *)c->modrm_ptr;
|
||||
return rc;
|
||||
}
|
||||
|
||||
@ -1005,6 +1006,7 @@ done_prefixes:
|
||||
if ((c->d & ModRM) && c->modrm_mod == 3) {
|
||||
c->src.type = OP_REG;
|
||||
c->src.val = c->modrm_val;
|
||||
c->src.ptr = c->modrm_ptr;
|
||||
break;
|
||||
}
|
||||
c->src.type = OP_MEM;
|
||||
@ -1049,6 +1051,7 @@ done_prefixes:
|
||||
if ((c->d & ModRM) && c->modrm_mod == 3) {
|
||||
c->dst.type = OP_REG;
|
||||
c->dst.val = c->dst.orig_val = c->modrm_val;
|
||||
c->dst.ptr = c->modrm_ptr;
|
||||
break;
|
||||
}
|
||||
c->dst.type = OP_MEM;
|
||||
|
Reference in New Issue
Block a user