From f5b54f7fa2b3a7bf6535a483535aeb8053664289 Mon Sep 17 00:00:00 2001 From: Joao Martins Date: Fri, 21 Sep 2018 11:13:09 -0400 Subject: [PATCH] i386/xen: consolidate vcpu init into a single helper That way we can control general initializations without changing main arch vcpu init. Signed-off-by: Joao Martins --- target/i386/kvm.c | 9 +++------ target/i386/xen.c | 10 ++++++++++ target/i386/xen.h | 1 + 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/target/i386/kvm.c b/target/i386/kvm.c index 7694f243e3..95f1d82d03 100644 --- a/target/i386/kvm.c +++ b/target/i386/kvm.c @@ -1090,12 +1090,9 @@ int kvm_arch_init_vcpu(CPUState *cs) } } - 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; diff --git a/target/i386/xen.c b/target/i386/xen.c index 2ee2bc3a0c..8fbcd9a179 100644 --- a/target/i386/xen.c +++ b/target/i386/xen.c @@ -858,6 +858,16 @@ int kvm_xen_handle_exit(X86CPU *cpu, struct kvm_xen_exit *exit) } } +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; diff --git a/target/i386/xen.h b/target/i386/xen.h index 6cc7a71898..ce67bcb9e6 100644 --- a/target/i386/xen.h +++ b/target/i386/xen.h @@ -22,6 +22,7 @@ #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); -- 2.50.1