diff options
author | Paolo Bonzini <pbonzini@redhat.com> | 2009-07-08 06:27:39 -0400 |
---|---|---|
committer | Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com> | 2009-12-03 14:14:49 -0500 |
commit | ae7888012969355a548372e99b066d9e31153b62 (patch) | |
tree | 08d57cf3355910a5aaedda8c8d77cd7d031a67f1 /drivers/xen/xenbus | |
parent | f8dc33088febc63286b7a60e6b678de8e064de8e (diff) |
xen: wait up to 5 minutes for device connetion
Increases the device timeout from 10s to 5 minutes, giving the user a
visual indication during that time in case there are problems. The patch
is a backport of changesets 144 and 150 in the Xenbits tree.
Cc: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
Diffstat (limited to 'drivers/xen/xenbus')
-rw-r--r-- | drivers/xen/xenbus/xenbus_probe.c | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/drivers/xen/xenbus/xenbus_probe.c b/drivers/xen/xenbus/xenbus_probe.c index 9246a8c4ecf2..649fcdf114b7 100644 --- a/drivers/xen/xenbus/xenbus_probe.c +++ b/drivers/xen/xenbus/xenbus_probe.c | |||
@@ -901,7 +901,7 @@ static int print_device_status(struct device *dev, void *data) | |||
901 | static int ready_to_wait_for_devices; | 901 | static int ready_to_wait_for_devices; |
902 | 902 | ||
903 | /* | 903 | /* |
904 | * On a 10 second timeout, wait for all devices currently configured. We need | 904 | * On a 5-minute timeout, wait for all devices currently configured. We need |
905 | * to do this to guarantee that the filesystems and / or network devices | 905 | * to do this to guarantee that the filesystems and / or network devices |
906 | * needed for boot are available, before we can allow the boot to proceed. | 906 | * needed for boot are available, before we can allow the boot to proceed. |
907 | * | 907 | * |
@@ -916,18 +916,30 @@ static int ready_to_wait_for_devices; | |||
916 | */ | 916 | */ |
917 | static void wait_for_devices(struct xenbus_driver *xendrv) | 917 | static void wait_for_devices(struct xenbus_driver *xendrv) |
918 | { | 918 | { |
919 | unsigned long timeout = jiffies + 10*HZ; | 919 | unsigned long start = jiffies; |
920 | struct device_driver *drv = xendrv ? &xendrv->driver : NULL; | 920 | struct device_driver *drv = xendrv ? &xendrv->driver : NULL; |
921 | unsigned int seconds_waited = 0; | ||
921 | 922 | ||
922 | if (!ready_to_wait_for_devices || !xen_domain()) | 923 | if (!ready_to_wait_for_devices || !xen_domain()) |
923 | return; | 924 | return; |
924 | 925 | ||
925 | while (exists_connecting_device(drv)) { | 926 | while (exists_connecting_device(drv)) { |
926 | if (time_after(jiffies, timeout)) | 927 | if (time_after(jiffies, start + (seconds_waited+5)*HZ)) { |
927 | break; | 928 | if (!seconds_waited) |
929 | printk(KERN_WARNING "XENBUS: Waiting for " | ||
930 | "devices to initialise: "); | ||
931 | seconds_waited += 5; | ||
932 | printk("%us...", 300 - seconds_waited); | ||
933 | if (seconds_waited == 300) | ||
934 | break; | ||
935 | } | ||
936 | |||
928 | schedule_timeout_interruptible(HZ/10); | 937 | schedule_timeout_interruptible(HZ/10); |
929 | } | 938 | } |
930 | 939 | ||
940 | if (seconds_waited) | ||
941 | printk("\n"); | ||
942 | |||
931 | bus_for_each_dev(&xenbus_frontend.bus, NULL, drv, | 943 | bus_for_each_dev(&xenbus_frontend.bus, NULL, drv, |
932 | print_device_status); | 944 | print_device_status); |
933 | } | 945 | } |