KVM: x86 emulator: add new ->wbinvd() callback
authorAvi Kivity <avi@redhat.com>
Wed, 20 Apr 2011 12:53:23 +0000 (15:53 +0300)
committerAvi Kivity <avi@redhat.com>
Sun, 22 May 2011 12:39:20 +0000 (08:39 -0400)
Instead of calling kvm_emulate_wbinvd() directly.

Signed-off-by: Avi Kivity <avi@redhat.com>
arch/x86/include/asm/kvm_emulate.h
arch/x86/kvm/emulate.c
arch/x86/kvm/x86.c

index d30840ddd2f3ddcee4a012cc670e4b01d47bb6cf..51341d6b2f3123ea77a6b9d00a93af9af918e30f 100644 (file)
@@ -187,6 +187,7 @@ struct x86_emulate_ops {
        int (*set_msr)(struct x86_emulate_ctxt *ctxt, u32 msr_index, u64 data);
        int (*get_msr)(struct x86_emulate_ctxt *ctxt, u32 msr_index, u64 *pdata);
        void (*halt)(struct x86_emulate_ctxt *ctxt);
+       void (*wbinvd)(struct x86_emulate_ctxt *ctxt);
        int (*fix_hypercall)(struct x86_emulate_ctxt *ctxt);
        void (*get_fpu)(struct x86_emulate_ctxt *ctxt); /* disables preempt */
        void (*put_fpu)(struct x86_emulate_ctxt *ctxt); /* reenables preempt */
index 64e7373d3b2b019cb7584134fab3cd9bc84d4dfd..522bc35d290c9fffe298f22cb88197f2843fd76b 100644 (file)
@@ -4092,7 +4092,7 @@ twobyte_insn:
                rc = em_clts(ctxt);
                break;
        case 0x09:              /* wbinvd */
-               kvm_emulate_wbinvd(ctxt->vcpu);
+               ctxt->ops->wbinvd(ctxt);
                break;
        case 0x08:              /* invd */
        case 0x0d:              /* GrpP (prefetch) */
index 4a2b40e2502160a5321119cc84e02307b6412b0d..5d853d540f95528bcb17fb05832fdbeda04590b1 100644 (file)
@@ -4154,6 +4154,11 @@ int kvm_emulate_wbinvd(struct kvm_vcpu *vcpu)
 }
 EXPORT_SYMBOL_GPL(kvm_emulate_wbinvd);
 
+static void emulator_wbinvd(struct x86_emulate_ctxt *ctxt)
+{
+       kvm_emulate_wbinvd(emul_to_vcpu(ctxt));
+}
+
 int emulator_get_dr(struct x86_emulate_ctxt *ctxt, int dr, unsigned long *dest)
 {
        return _kvm_get_dr(emul_to_vcpu(ctxt), dr, dest);
@@ -4408,6 +4413,7 @@ static struct x86_emulate_ops emulate_ops = {
        .set_msr             = emulator_set_msr,
        .get_msr             = emulator_get_msr,
        .halt                = emulator_halt,
+       .wbinvd              = emulator_wbinvd,
        .fix_hypercall       = emulator_fix_hypercall,
        .get_fpu             = emulator_get_fpu,
        .put_fpu             = emulator_put_fpu,