summaryrefslogtreecommitdiffstats
path: root/meta/recipes-kernel/linux/linux-omap-2.6.24.7/add_rootwait.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta/recipes-kernel/linux/linux-omap-2.6.24.7/add_rootwait.patch')
-rw-r--r--meta/recipes-kernel/linux/linux-omap-2.6.24.7/add_rootwait.patch47
1 files changed, 47 insertions, 0 deletions
diff --git a/meta/recipes-kernel/linux/linux-omap-2.6.24.7/add_rootwait.patch b/meta/recipes-kernel/linux/linux-omap-2.6.24.7/add_rootwait.patch
new file mode 100644
index 0000000000..80900526c6
--- /dev/null
+++ b/meta/recipes-kernel/linux/linux-omap-2.6.24.7/add_rootwait.patch
@@ -0,0 +1,47 @@
+Index: linux-2.6.22.19/init/do_mounts.c
+===================================================================
+--- linux-2.6.22.19.orig/init/do_mounts.c 2008-07-25 17:29:47.000000000 +0100
++++ linux-2.6.22.19/init/do_mounts.c 2008-07-25 17:31:17.000000000 +0100
+@@ -25,6 +25,7 @@
+ int root_mountflags = MS_RDONLY | MS_SILENT;
+ char * __initdata root_device_name;
+ static char __initdata saved_root_name[64];
++static int __initdata root_wait;
+
+ dev_t ROOT_DEV;
+
+@@ -216,6 +217,16 @@
+
+ __setup("root=", root_dev_setup);
+
++static int __init rootwait_setup(char *str)
++{
++ if (*str)
++ return 0;
++ root_wait = 1;
++ return 1;
++}
++
++__setup("rootwait", rootwait_setup);
++
+ static char * __initdata root_mount_data;
+ static int __init root_data_setup(char *str)
+ {
+@@ -443,6 +454,17 @@
+ if (initrd_load())
+ goto out;
+
++ /* wait for any asynchronous scanning to complete */
++ if ((ROOT_DEV == 0) && root_wait) {
++ printk(KERN_INFO "Waiting for root device %s...\n",
++ saved_root_name);
++ while (driver_probe_done() != 0 ||
++ (ROOT_DEV = name_to_dev_t(saved_root_name)) == 0)
++ msleep(100);
++ }
++
++ is_floppy = MAJOR(ROOT_DEV) == FLOPPY_MAJOR;
++
+ if (is_floppy && rd_doload && rd_load_disk(0))
+ ROOT_DEV = Root_RAM0;
+