Artificial, but needed to remove direct calls to KVM.
Signed-off-by: Avi Kivity <avi@redhat.com>
        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);
+       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 */
        int (*intercept)(struct x86_emulate_ctxt *ctxt,
 
 
 int kvm_emulate_hypercall(struct kvm_vcpu *vcpu);
 
-int kvm_fix_hypercall(struct kvm_vcpu *vcpu);
-
 int kvm_mmu_page_fault(struct kvm_vcpu *vcpu, gva_t gva, u32 error_code,
                       void *insn, int insn_len);
 void kvm_mmu_invlpg(struct kvm_vcpu *vcpu, gva_t gva);
 
                        if (c->modrm_mod != 3 || c->modrm_rm != 1)
                                goto cannot_emulate;
 
-                       rc = kvm_fix_hypercall(ctxt->vcpu);
+                       rc = ctxt->ops->fix_hypercall(ctxt);
                        if (rc != X86EMUL_CONTINUE)
                                goto done;
 
                        if (c->modrm_mod == 3) {
                                switch (c->modrm_rm) {
                                case 1:
-                                       rc = kvm_fix_hypercall(ctxt->vcpu);
+                                       rc = ctxt->ops->fix_hypercall(ctxt);
                                        break;
                                default:
                                        goto cannot_emulate;
 
 
 u64 __read_mostly host_xcr0;
 
+int emulator_fix_hypercall(struct x86_emulate_ctxt *ctxt);
+
 static inline void kvm_async_pf_hash_reset(struct kvm_vcpu *vcpu)
 {
        int i;
        .set_msr             = emulator_set_msr,
        .get_msr             = emulator_get_msr,
        .halt                = emulator_halt,
+       .fix_hypercall       = emulator_fix_hypercall,
        .get_fpu             = emulator_get_fpu,
        .put_fpu             = emulator_put_fpu,
        .intercept           = emulator_intercept,
 }
 EXPORT_SYMBOL_GPL(kvm_emulate_hypercall);
 
-int kvm_fix_hypercall(struct kvm_vcpu *vcpu)
+int emulator_fix_hypercall(struct x86_emulate_ctxt *ctxt)
 {
+       struct kvm_vcpu *vcpu = emul_to_vcpu(ctxt);
        char instruction[3];
        unsigned long rip = kvm_rip_read(vcpu);