hw/xen: Subsume xen_be_register_common() into xen_be_init()
Every caller of xen_be_init() checks and exits on error, then calls xen_be_register_common(). Just make xen_be_init() abort for itself and return void, and register the common devices too. Signed-off-by: David Woodhouse <dwmw@amazon.co.uk> Reviewed-by: Paul Durrant <paul@xen.org>
This commit is contained in:
parent
c1eaa6d0df
commit
79807f3e6b
|
@ -1502,13 +1502,7 @@ void xen_hvm_init_pc(PCMachineState *pcms, MemoryRegion **ram_memory)
|
||||||
device_listener_register(&state->device_listener);
|
device_listener_register(&state->device_listener);
|
||||||
|
|
||||||
xen_bus_init();
|
xen_bus_init();
|
||||||
|
xen_be_init();
|
||||||
/* Initialize backend core & drivers */
|
|
||||||
if (xen_be_init() != 0) {
|
|
||||||
error_report("xen backend core setup failed");
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
xen_be_register_common();
|
|
||||||
|
|
||||||
QLIST_INIT(&xen_physmap);
|
QLIST_INIT(&xen_physmap);
|
||||||
xen_read_physmap(state);
|
xen_read_physmap(state);
|
||||||
|
|
|
@ -676,21 +676,30 @@ void xenstore_update_fe(char *watch, struct XenLegacyDevice *xendev)
|
||||||
}
|
}
|
||||||
/* -------------------------------------------------------------------- */
|
/* -------------------------------------------------------------------- */
|
||||||
|
|
||||||
int xen_be_init(void)
|
static void xen_set_dynamic_sysbus(void)
|
||||||
|
{
|
||||||
|
Object *machine = qdev_get_machine();
|
||||||
|
ObjectClass *oc = object_get_class(machine);
|
||||||
|
MachineClass *mc = MACHINE_CLASS(oc);
|
||||||
|
|
||||||
|
machine_class_allow_dynamic_sysbus_dev(mc, TYPE_XENSYSDEV);
|
||||||
|
}
|
||||||
|
|
||||||
|
void xen_be_init(void)
|
||||||
{
|
{
|
||||||
xengnttab_handle *gnttabdev;
|
xengnttab_handle *gnttabdev;
|
||||||
|
|
||||||
xenstore = xs_daemon_open();
|
xenstore = xs_daemon_open();
|
||||||
if (!xenstore) {
|
if (!xenstore) {
|
||||||
xen_pv_printf(NULL, 0, "can't connect to xenstored\n");
|
xen_pv_printf(NULL, 0, "can't connect to xenstored\n");
|
||||||
return -1;
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
qemu_set_fd_handler(xs_fileno(xenstore), xenstore_update, NULL, NULL);
|
qemu_set_fd_handler(xs_fileno(xenstore), xenstore_update, NULL, NULL);
|
||||||
|
|
||||||
if (xen_xc == NULL || xen_fmem == NULL) {
|
if (xen_xc == NULL || xen_fmem == NULL) {
|
||||||
/* Check if xen_init() have been called */
|
xen_pv_printf(NULL, 0, "Xen operations not set up\n");
|
||||||
goto err;
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
gnttabdev = xengnttab_open(NULL, 0);
|
gnttabdev = xengnttab_open(NULL, 0);
|
||||||
|
@ -706,23 +715,16 @@ int xen_be_init(void)
|
||||||
xen_sysbus = qbus_new(TYPE_XENSYSBUS, xen_sysdev, "xen-sysbus");
|
xen_sysbus = qbus_new(TYPE_XENSYSBUS, xen_sysdev, "xen-sysbus");
|
||||||
qbus_set_bus_hotplug_handler(xen_sysbus);
|
qbus_set_bus_hotplug_handler(xen_sysbus);
|
||||||
|
|
||||||
return 0;
|
xen_set_dynamic_sysbus();
|
||||||
|
|
||||||
err:
|
xen_be_register("console", &xen_console_ops);
|
||||||
qemu_set_fd_handler(xs_fileno(xenstore), NULL, NULL, NULL);
|
xen_be_register("vkbd", &xen_kbdmouse_ops);
|
||||||
xs_daemon_close(xenstore);
|
#ifdef CONFIG_VIRTFS
|
||||||
xenstore = NULL;
|
xen_be_register("9pfs", &xen_9pfs_ops);
|
||||||
|
#endif
|
||||||
return -1;
|
#ifdef CONFIG_USB_LIBUSB
|
||||||
}
|
xen_be_register("qusb", &xen_usb_ops);
|
||||||
|
#endif
|
||||||
static void xen_set_dynamic_sysbus(void)
|
|
||||||
{
|
|
||||||
Object *machine = qdev_get_machine();
|
|
||||||
ObjectClass *oc = object_get_class(machine);
|
|
||||||
MachineClass *mc = MACHINE_CLASS(oc);
|
|
||||||
|
|
||||||
machine_class_allow_dynamic_sysbus_dev(mc, TYPE_XENSYSDEV);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int xen_be_register(const char *type, struct XenDevOps *ops)
|
int xen_be_register(const char *type, struct XenDevOps *ops)
|
||||||
|
@ -744,20 +746,6 @@ int xen_be_register(const char *type, struct XenDevOps *ops)
|
||||||
return xenstore_scan(type, xen_domid, ops);
|
return xenstore_scan(type, xen_domid, ops);
|
||||||
}
|
}
|
||||||
|
|
||||||
void xen_be_register_common(void)
|
|
||||||
{
|
|
||||||
xen_set_dynamic_sysbus();
|
|
||||||
|
|
||||||
xen_be_register("console", &xen_console_ops);
|
|
||||||
xen_be_register("vkbd", &xen_kbdmouse_ops);
|
|
||||||
#ifdef CONFIG_VIRTFS
|
|
||||||
xen_be_register("9pfs", &xen_9pfs_ops);
|
|
||||||
#endif
|
|
||||||
#ifdef CONFIG_USB_LIBUSB
|
|
||||||
xen_be_register("qusb", &xen_usb_ops);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
int xen_be_bind_evtchn(struct XenLegacyDevice *xendev)
|
int xen_be_bind_evtchn(struct XenLegacyDevice *xendev)
|
||||||
{
|
{
|
||||||
if (xendev->local_port != -1) {
|
if (xendev->local_port != -1) {
|
||||||
|
|
|
@ -36,10 +36,7 @@ static void xen_init_pv(MachineState *machine)
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
/* Initialize backend core & drivers */
|
/* Initialize backend core & drivers */
|
||||||
if (xen_be_init() != 0) {
|
xen_be_init();
|
||||||
error_report("%s: xen backend core setup failed", __func__);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (xen_mode) {
|
switch (xen_mode) {
|
||||||
case XEN_ATTACH:
|
case XEN_ATTACH:
|
||||||
|
@ -55,7 +52,6 @@ static void xen_init_pv(MachineState *machine)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
xen_be_register_common();
|
|
||||||
xen_be_register("vfb", &xen_framebuffer_ops);
|
xen_be_register("vfb", &xen_framebuffer_ops);
|
||||||
xen_be_register("qnic", &xen_netdev_ops);
|
xen_be_register("qnic", &xen_netdev_ops);
|
||||||
|
|
||||||
|
|
|
@ -42,8 +42,7 @@ int xenstore_read_fe_uint64(struct XenLegacyDevice *xendev, const char *node,
|
||||||
void xen_be_check_state(struct XenLegacyDevice *xendev);
|
void xen_be_check_state(struct XenLegacyDevice *xendev);
|
||||||
|
|
||||||
/* xen backend driver bits */
|
/* xen backend driver bits */
|
||||||
int xen_be_init(void);
|
void xen_be_init(void);
|
||||||
void xen_be_register_common(void);
|
|
||||||
int xen_be_register(const char *type, struct XenDevOps *ops);
|
int xen_be_register(const char *type, struct XenDevOps *ops);
|
||||||
int xen_be_set_state(struct XenLegacyDevice *xendev, enum xenbus_state state);
|
int xen_be_set_state(struct XenLegacyDevice *xendev, enum xenbus_state state);
|
||||||
int xen_be_bind_evtchn(struct XenLegacyDevice *xendev);
|
int xen_be_bind_evtchn(struct XenLegacyDevice *xendev);
|
||||||
|
|
Loading…
Reference in New Issue