[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] mini-os: do not wait for pci backend in pcifront_scan
# HG changeset patch # User Ian Campbell <ian.campbell@xxxxxxxxxx> # Date 1323432077 0 # Node ID bc28fcc62f91a2ce1ed1c87ced7bd54929c0716c # Parent e9c66c268a1f7432f60c83f63a3aa0770628e9a6 mini-os: do not wait for pci backend in pcifront_scan This blocks the main thread indefinitely if there is no PCI backend present in xenstore. Even in the case where there are passthrough devices configured libxl creates the stubdom and waits for it to startup _before_ adding the backend. Since the stub domains main thread is blocked before it can write the "running" state to xenstore the toolstack eventually times out and kills everything. There is already a separate pcifront thread which waits for the backend to appear and calls init_pcifront at the appropriate time should a backend ever appear. Unfortunately I don't have any free test boxes with VT-d so I haven't been able to test the cases where PCI deivces are passed through but I obviously have tested that I can now start an HVM domain with stub qemu without PCI devices passed through which I couldn't do before so this is an improvement. This stuff is a bit like pushing the lump around the carpet :-/ Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx> Acked-by: Ian Jackson <ian.jackson.citrix.com> Committed-by: Ian Jackson <ian.jackson.citrix.com> Acked-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx> --- diff -r e9c66c268a1f -r bc28fcc62f91 extras/mini-os/kernel.c --- a/extras/mini-os/kernel.c Tue Dec 13 15:42:18 2011 +0000 +++ b/extras/mini-os/kernel.c Fri Dec 09 12:01:17 2011 +0000 @@ -448,6 +448,7 @@ static void pcifront_thread(void *p) { + pcifront_watches(NULL); pci_dev = init_pcifront(NULL); if (!pci_dev) return; diff -r e9c66c268a1f -r bc28fcc62f91 extras/mini-os/pcifront.c --- a/extras/mini-os/pcifront.c Tue Dec 13 15:42:18 2011 +0000 +++ b/extras/mini-os/pcifront.c Fri Dec 09 12:01:17 2011 +0000 @@ -280,23 +280,14 @@ { char *path; int i, n, len; - char *s, *msg = NULL, *err = NULL; + char *s, *msg = NULL; unsigned int domain, bus, slot, fun; if (!dev) dev = pcidev; if (!dev) { - xenbus_event_queue events = NULL; - char *fe_state = "device/pci/0/state"; - xenbus_watch_path_token(XBT_NIL, fe_state, fe_state, &events); - while ((err = xenbus_read(XBT_NIL, fe_state, &msg)) != NULL || msg[0] != '4') { - free(msg); - free(err); - printk("pcifront_scan: waiting for pcifront to become ready\n"); - xenbus_wait_for_watch(&events); - } - xenbus_unwatch_path_token(XBT_NIL, fe_state, fe_state); - dev = pcidev; + printk("pcifront_scan: device or bus\n"); + return; } len = strlen(dev->backend) + 1 + 5 + 10 + 1; _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |