From f81c0a38958f9bfae0c78ded4cfcaa9ece0ddc85 Mon Sep 17 00:00:00 2001 From: Joao Martins Date: Thu, 11 Oct 2018 11:04:01 -0400 Subject: [PATCH] hw/xen_backend: refactor xen_be_init() Signed-off-by: Joao Martins --- hw/xen/xen-legacy-backend.c | 40 +++++++++++++++++++++-------- include/hw/xen/xen-legacy-backend.h | 3 +++ 2 files changed, 32 insertions(+), 11 deletions(-) diff --git a/hw/xen/xen-legacy-backend.c b/hw/xen/xen-legacy-backend.c index 36fd1e9b09..c86b33b367 100644 --- a/hw/xen/xen-legacy-backend.c +++ b/hw/xen/xen-legacy-backend.c @@ -679,17 +679,40 @@ void xenstore_update_fe(char *watch, struct XenLegacyDevice *xendev) } /* -------------------------------------------------------------------- */ -int xen_be_init(void) +int xen_be_xenstore_open(void) { - xengnttab_handle *gnttabdev; - xenstore = xs_daemon_open(); if (!xenstore) { - xen_pv_printf(NULL, 0, "can't connect to xenstored\n"); return -1; } qemu_set_fd_handler(xs_fileno(xenstore), xenstore_update, NULL, NULL); + return 0; +} + +void xen_be_xenstore_close(void) +{ + qemu_set_fd_handler(xs_fileno(xenstore), NULL, NULL, NULL); + xs_daemon_close(xenstore); + xenstore = NULL; +} + +void xen_be_sysdev_init(void) +{ + xen_sysdev = qdev_create(NULL, TYPE_XENSYSDEV); + qdev_init_nofail(xen_sysdev); + xen_sysbus = qbus_create(TYPE_XENSYSBUS, DEVICE(xen_sysdev), "xen-sysbus"); + qbus_set_bus_hotplug_handler(xen_sysbus, &error_abort); +} + +int xen_be_init(void) +{ + xengnttab_handle *gnttabdev; + + if (xen_be_xenstore_open()) { + xen_pv_printf(NULL, 0, "can't connect to xenstored\n"); + return -1; + } if (xen_xc == NULL || xen_fmem == NULL) { /* Check if xen_init() have been called */ @@ -704,17 +727,12 @@ int xen_be_init(void) xengnttab_close(gnttabdev); } - xen_sysdev = qdev_create(NULL, TYPE_XENSYSDEV); - qdev_init_nofail(xen_sysdev); - xen_sysbus = qbus_create(TYPE_XENSYSBUS, DEVICE(xen_sysdev), "xen-sysbus"); - qbus_set_bus_hotplug_handler(xen_sysbus, &error_abort); + xen_be_sysdev_init(); return 0; err: - qemu_set_fd_handler(xs_fileno(xenstore), NULL, NULL, NULL); - xs_daemon_close(xenstore); - xenstore = NULL; + xen_be_xenstore_close(); return -1; } diff --git a/include/hw/xen/xen-legacy-backend.h b/include/hw/xen/xen-legacy-backend.h index 20cb47b5bf..4e82ac963d 100644 --- a/include/hw/xen/xen-legacy-backend.h +++ b/include/hw/xen/xen-legacy-backend.h @@ -41,6 +41,9 @@ int xenstore_read_fe_uint64(struct XenLegacyDevice *xendev, const char *node, void xen_be_check_state(struct XenLegacyDevice *xendev); /* xen backend driver bits */ +int xen_be_xenstore_open(void); +void xen_be_xenstore_close(void); +void xen_be_sysdev_init(void); int xen_be_init(void); void xen_be_register_common(void); int xen_be_register(const char *type, struct XenDevOps *ops); -- 2.50.1