From 4c84db9693f7ce8f0d2fe5615cdd3727a060344e Mon Sep 17 00:00:00 2001 From: Joao Martins Date: Thu, 11 Oct 2018 11:31:57 -0400 Subject: [PATCH] pc_piix: handle XEN_EMULATE backend init 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 --- hw/i386/pc_piix.c | 5 +++++ hw/xen/xen-legacy-backend.c | 14 ++++++++------ target/i386/kvm_i386.h | 1 + target/i386/xen-proto.h | 2 ++ target/i386/xen.c | 13 ++++++++++--- 5 files changed, 26 insertions(+), 9 deletions(-) diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c index fd0f2c268f..43cca0a762 100644 --- a/hw/i386/pc_piix.c +++ b/hw/i386/pc_piix.c @@ -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); diff --git a/hw/xen/xen-legacy-backend.c b/hw/xen/xen-legacy-backend.c index c86b33b367..dcc2e1ac72 100644 --- a/hw/xen/xen-legacy-backend.c +++ b/hw/xen/xen-legacy-backend.c @@ -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); diff --git a/target/i386/kvm_i386.h b/target/i386/kvm_i386.h index 3057ba4f7d..9aa766d38c 100644 --- a/target/i386/kvm_i386.h +++ b/target/i386/kvm_i386.h @@ -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 diff --git a/target/i386/xen-proto.h b/target/i386/xen-proto.h index a4ab12ab04..3bc6567395 100644 --- a/target/i386/xen-proto.h +++ b/target/i386/xen-proto.h @@ -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; diff --git a/target/i386/xen.c b/target/i386/xen.c index 6d4a8426e5..726c0dc28d 100644 --- a/target/i386/xen.c +++ b/target/i386/xen.c @@ -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; -- 2.50.1