]> www.infradead.org Git - users/dwmw2/qemu.git/commitdiff
pc_piix: handle XEN_EMULATE backend init
authorJoao Martins <joao.m.martins@oracle.com>
Thu, 11 Oct 2018 15:31:57 +0000 (11:31 -0400)
committerJoao Martins <joao.m.martins@oracle.com>
Tue, 19 Feb 2019 14:00:57 +0000 (09:00 -0500)
And use newly added kvm_xen_machine_init() to iniitalize
the xenstore and the sysdev bus for future emulated devices.

Signed-off-by: Joao Martins <joao.m.martins@oracle.com>
hw/i386/pc_piix.c
hw/xen/xen-legacy-backend.c
target/i386/kvm_i386.h
target/i386/xen-proto.h
target/i386/xen.c

index fd0f2c268ffcab3b1288dd951f30b96df3e9ca85..43cca0a76221a6629263dbf114b9a475934b9f0b 100644 (file)
@@ -44,6 +44,7 @@
 #include "sysemu/arch_init.h"
 #include "hw/i2c/smbus.h"
 #include "hw/xen/xen.h"
+#include "hw/xen/xen-legacy-backend.h"
 #include "exec/memory.h"
 #include "exec/address-spaces.h"
 #include "hw/acpi/acpi.h"
@@ -148,6 +149,10 @@ static void pc_init1(MachineState *machine,
             pcms->above_4g_mem_size = 0;
             pcms->below_4g_mem_size = machine->ram_size;
         }
+
+        if (!xen_enabled() && !xen_be_xenstore_open()) {
+            kvm_xen_machine_init();
+        }
     }
 
     pc_cpus_init(pcms);
index c86b33b36727a34be38fa4ae301128247bdd75aa..dcc2e1ac7298c8ffebb4e66c65a5c984fc347e2b 100644 (file)
@@ -297,13 +297,15 @@ static struct XenLegacyDevice *xen_be_get_xendev(const char *type, int dom,
     xendev->debug      = debug;
     xendev->local_port = -1;
 
-    xendev->evtchndev = xenevtchn_open(NULL, 0);
-    if (xendev->evtchndev == NULL) {
-        xen_pv_printf(NULL, 0, "can't open evtchn device\n");
-        qdev_unplug(DEVICE(xendev), NULL);
-        return NULL;
+    if (xen_mode != XEN_EMULATE) {
+        xendev->evtchndev = xenevtchn_open(NULL, 0);
+        if (xendev->evtchndev == NULL) {
+            xen_pv_printf(NULL, 0, "can't open evtchn device\n");
+            qdev_unplug(DEVICE(xendev), NULL);
+            return NULL;
+        }
+        qemu_set_cloexec(xenevtchn_fd(xendev->evtchndev));
     }
-    qemu_set_cloexec(xenevtchn_fd(xendev->evtchndev));
 
     xen_pv_insert_xendev(xendev);
 
index 3057ba4f7d1927b8828ee263069198b0ca078f44..9aa766d38c07647a8e8cfeda61f4d82f1e2db5f2 100644 (file)
@@ -65,4 +65,5 @@ bool kvm_enable_x2apic(void);
 bool kvm_has_x2apic_api(void);
 
 bool kvm_hv_vpindex_settable(void);
+void kvm_xen_machine_init(void);
 #endif
index a4ab12ab0467746ad455e3ed059a3e31f0878b33..3bc65673952ba8caa05a6bbe35ac4e81a6889faf 100644 (file)
@@ -11,6 +11,8 @@
 #ifndef TARGET_I386_XEN_PROTO_H
 #define TARGET_I386_XEN_PROTO_H
 
+#include "hw/xen/xen-legacy-backend.h"
+
 typedef struct XenGrantTable {
     unsigned int version;
     unsigned int nr_frames;
index 6d4a8426e51761aaffd24731ff39ae7287d6bdea..726c0dc28d7a05ad38d0e1f6a46648a3ddf6ec74 100644 (file)
@@ -16,6 +16,7 @@
 #include "linux/kvm.h"
 #include "exec/address-spaces.h"
 #include "cpu.h"
+#include "kvm_i386.h"
 #include "xen.h"
 #include "trace.h"
 #include "xen_evtchn.h"
@@ -25,9 +26,8 @@
 #include "qapi/error.h"
 #include "qom/cpu.h"
 #include "hw/xen/xen.h"
-
-
-#define __XEN_INTERFACE_VERSION__ 0x00040400
+#include "hw/xen/xen-legacy-backend.h"
+#include "hw/xen/xen-bus.h"
 
 #include "standard-headers/xen/version.h"
 #include "standard-headers/xen/memory.h"
@@ -180,6 +180,13 @@ void kvm_xen_init(XenState *xen)
     kvm_xen_evtchn_init(xen);
 }
 
+void kvm_xen_machine_init(void)
+{
+    xen_bus_init();
+    xen_be_sysdev_init();
+    xen_be_register_common();
+}
+
 int kvm_xen_set_domid(KVMState *kvm_state, XenState *xen)
 {
     struct kvm_xen_hvm_attr xhd;