This patch includes changes to xenstore in order to boot as Dom0. This is different from booting as a guest, since when booted as Dom0 xenstore is not available. This patch sets up a memory page, an event channel for xenstore and disables xenbus device probing at boot. It contains a workaround for xs_watch, that should be fixed when we are able to start xenstored from Dom0. --- sys/xen/xenbus/xenbusb.c | 6 ++++-- sys/xen/xenstore/xenstore.c | 22 ++++++++++++++++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/sys/xen/xenbus/xenbusb.c b/sys/xen/xenbus/xenbusb.c index 1f84795..11be0f5 100644 --- a/sys/xen/xenbus/xenbusb.c +++ b/sys/xen/xenbus/xenbusb.c _at__at_ -760,8 +760,10 _at__at_ xenbusb_attach(device_t dev, char *bus_node, u_int id_components) * bus when they are dynamically attached to us * by a Xen management action. */ - (void)xenbusb_enumerate_bus(xbs); - xenbusb_probe_children(dev); + if (!xen_initial_domain()) { + (void)xenbusb_enumerate_bus(xbs); + xenbusb_probe_children(dev); + } xbs->xbs_device_watch.node = bus_node; xbs->xbs_device_watch.callback = xenbusb_devices_changed; diff --git a/sys/xen/xenstore/xenstore.c b/sys/xen/xenstore/xenstore.c index 2893c84..bde3f5d 100644 --- a/sys/xen/xenstore/xenstore.c +++ b/sys/xen/xenstore/xenstore.c _at__at_ -1144,6 +1144,24 _at__at_ xs_attach(device_t dev) xs.gpfn = hvm_get_parameter(HVM_PARAM_STORE_PFN); xen_store = pmap_mapdev(xs.gpfn * PAGE_SIZE, PAGE_SIZE); } else if (xen_pv_domain()) { + if (!HYPERVISOR_start_info->store_evtchn) { + struct evtchn_alloc_unbound alloc_unbound; + + /* Allocate a local event channel for xenstore */ + alloc_unbound.dom = DOMID_SELF; + alloc_unbound.remote_dom = DOMID_SELF; + error = HYPERVISOR_event_channel_op(EVTCHNOP_alloc_unbound, + &alloc_unbound); + if (error) + panic("unable to alloc event channel for Dom0: %d", + error); + + HYPERVISOR_start_info->store_evtchn = alloc_unbound.port; + + /* Allocate memory for the xs shared ring */ + xen_store = malloc(PAGE_SIZE, M_XENSTORE, + M_WAITOK | M_ZERO); + } xs.evtchn = HYPERVISOR_start_info->store_evtchn; } else { panic("Unknown domain type, cannot initialize xenstore\n"); _at__at_ -1579,6 +1597,10 _at__at_ xs_register_watch(struct xs_watch *watch) char token[sizeof(watch) * 2 + 1]; int error; + /* XXX: this is a hack until we get xenstored working */ + if (xen_initial_domain()) + return (0); + sprintf(token, "%lX", (long)watch); sx_slock(&xs.suspend_mutex); -- 1.7.7.5 (Apple Git-26)Received on Tue Dec 24 2013 - 10:25:29 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:45 UTC