]> www.infradead.org Git - users/dwmw2/qemu.git/commitdiff
i386/xen: consolidate vcpu init into a single helper
authorJoao Martins <joao.m.martins@oracle.com>
Fri, 21 Sep 2018 15:13:09 +0000 (11:13 -0400)
committerJoao Martins <joao.m.martins@oracle.com>
Tue, 19 Feb 2019 14:00:57 +0000 (09:00 -0500)
That way we can control general initializations without
changing main arch vcpu init.

Signed-off-by: Joao Martins <joao.m.martins@oracle.com>
target/i386/kvm.c
target/i386/xen.c
target/i386/xen.h

index 7694f243e3fb8800b1ac4447abf5fe01560131f0..95f1d82d03e98f306ed839a800bcc0cac7152006 100644 (file)
@@ -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;
index 2ee2bc3a0cff66bf78cae12853d10bd30dd79a20..8fbcd9a17957bc4e2209c23f0f025276a995ff47 100644 (file)
@@ -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;
index 6cc7a718980a0e6617ba6b5291891f507fcf3700..ce67bcb9e6a8610b8aa1168494bda53741b8ee14 100644 (file)
@@ -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);