That way we can control general initializations without
changing main arch vcpu init.
Signed-off-by: Joao Martins <joao.m.martins@oracle.com>
}
}
- if (kvm_check_extension(cs->kvm_state, KVM_CAP_XEN_HVM)) {
- r = kvm_xen_set_hypercall_page(cs);
- if (r) {
- error_report("Failed to initialize Xen hypercall page %d", r);
- abort();
- }
+ r = kvm_xen_vcpu_init(cs);
+ if (r < 0) {
+ goto fail;
}
kvm_base = KVM_CPUID_SIGNATURE_NEXT;
}
}
+int kvm_xen_vcpu_init(CPUState *cs)
+{
+ if (!kvm_check_extension(cs->kvm_state, KVM_CAP_XEN_HVM) ||
+ !kvm_check_extension(cs->kvm_state, KVM_CAP_XEN_HVM_GUEST))
+ return -ENOTSUP;
+
+ kvm_xen_set_hypercall_page(cs);
+ return 0;
+}
+
int kvm_xen_vcpu_inject_upcall(X86CPU *cpu)
{
XenCPUState *xcpu = &cpu->env.xen_vcpu;
#define XEN_CPUID_HVM 0x40000004
int kvm_xen_set_hypercall_page(CPUState *env);
+int kvm_xen_vcpu_init(CPUState *cs);
int kvm_xen_handle_exit(X86CPU *cpu, struct kvm_xen_exit *exit);
int kvm_xen_vcpu_inject_upcall(X86CPU *cpu);