WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] [xen-unstable] Merge

# HG changeset patch
# User ack@xxxxxxxxxxxxxxxxxxxxx
# Node ID 640d3bc77ea6ce6fb679da83f8c683978a05937c
# Parent  64f9f308e109dc7ec6b8964f093926bd4b8957d2
# Parent  f5a5f49935fda0bb613275c614fc7462bff75ba3
Merge
---
 linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_probe.c |   45 ++++++++---------
 1 files changed, 23 insertions(+), 22 deletions(-)

diff -r 64f9f308e109 -r 640d3bc77ea6 
linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_probe.c
--- a/linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_probe.c    Fri Jun 30 
17:12:05 2006 +0100
+++ b/linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_probe.c    Fri Jun 30 
17:12:31 2006 +0100
@@ -886,28 +886,18 @@ EXPORT_SYMBOL_GPL(unregister_xenstore_no
 EXPORT_SYMBOL_GPL(unregister_xenstore_notifier);
 
 
-static int all_devices_ready_(struct device *dev, void *data)
+static int find_disconnected_device_(struct device *dev, void *data)
 {
        struct xenbus_device *xendev = to_xenbus_device(dev);
-       int *result = data;
-
-       if (xendev->state != XenbusStateConnected) {
-               *result = 0;
-               return 1;
-       }
-
-       return 0;
-}
-
-
-static int all_devices_ready(void)
-{
-       int ready = 1;
-       bus_for_each_dev(&xenbus_frontend.bus, NULL, &ready,
-                        all_devices_ready_);
-       return ready;
-}
-
+
+       return (xendev->state == XenbusStateConnected) ? 0 : 1;
+}
+
+static struct device *find_disconnected_device(struct device *start)
+{
+       return bus_find_device(&xenbus_frontend.bus, start, NULL,
+                              find_disconnected_device_);
+}
 
 void xenbus_probe(void *unused)
 {
@@ -1077,17 +1067,28 @@ static int __init wait_for_devices(void)
 static int __init wait_for_devices(void)
 {
        unsigned long timeout = jiffies + 10*HZ;
+       struct device *dev = NULL;
+       struct xenbus_device *xendev;
 
        if (!is_running_on_xen())
                return -ENODEV;
 
        while (time_before(jiffies, timeout)) {
-               if (all_devices_ready())
+               if ((dev = find_disconnected_device(NULL)) == NULL)
                        return 0;
+               put_device(dev);
                schedule_timeout_interruptible(HZ/10);
        }
 
-       printk(KERN_WARNING "XENBUS: Timeout connecting to devices!\n");
+       while (dev != NULL) {
+               xendev = to_xenbus_device(dev);
+
+               printk(KERN_WARNING "XENBUS: Timeout connecting to device: 
%s\n",
+                      xendev->nodename);
+
+               dev = find_disconnected_device(dev);
+       }
+
        return 0;
 }
 

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>