summaryrefslogtreecommitdiff
path: root/meta-moblin/packages/linux/linux-moblin-2.6.29.1/linux-2.6.30-fix-async.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-moblin/packages/linux/linux-moblin-2.6.29.1/linux-2.6.30-fix-async.patch')
-rw-r--r--meta-moblin/packages/linux/linux-moblin-2.6.29.1/linux-2.6.30-fix-async.patch69
1 files changed, 69 insertions, 0 deletions
diff --git a/meta-moblin/packages/linux/linux-moblin-2.6.29.1/linux-2.6.30-fix-async.patch b/meta-moblin/packages/linux/linux-moblin-2.6.29.1/linux-2.6.30-fix-async.patch
new file mode 100644
index 000000000..a489339cb
--- /dev/null
+++ b/meta-moblin/packages/linux/linux-moblin-2.6.29.1/linux-2.6.30-fix-async.patch
@@ -0,0 +1,69 @@
+
+Gitweb: http://git.kernel.org/linus/d6de2c80e9d758d2e36c21699117db6178c0f517
+Commit: d6de2c80e9d758d2e36c21699117db6178c0f517
+Parent: 7933a3cfba017330ebb25f9820cb25ec9cdd67cc
+Author: Linus Torvalds <torvalds@linux-foundation.org>
+AuthorDate: Fri Apr 10 12:17:41 2009 -0700
+Committer: Linus Torvalds <torvalds@linux-foundation.org>
+CommitDate: Sat Apr 11 12:44:49 2009 -0700
+
+ async: Fix module loading async-work regression
+
+ Several drivers use asynchronous work to do device discovery, and we
+ synchronize with them in the compiled-in case before we actually try to
+ mount root filesystems etc.
+
+ However, when compiled as modules, that synchronization is missing - the
+ module loading completes, but the driver hasn't actually finished
+ probing for devices, and that means that any user mode that expects to
+ use the devices after the 'insmod' is now potentially broken.
+
+ We already saw one case of a similar issue in the ACPI battery code,
+ where the kernel itself expected the module to be all done, and unmapped
+ the init memory - but the async device discovery was still running.
+ That got hacked around by just removing the "__init" (see commit
+ 5d38258ec026921a7b266f4047ebeaa75db358e5 "ACPI battery: fix async boot
+ oops"), but the real fix is to just make the module loading wait for all
+ async work to be completed.
+
+ It will slow down module loading, but since common devices should be
+ built in anyway, and since the bug is really annoying and hard to handle
+ from user space (and caused several S3 resume regressions), the simple
+ fix to wait is the right one.
+
+ This fixes at least
+
+ http://bugzilla.kernel.org/show_bug.cgi?id=13063
+
+ but probably a few other bugzilla entries too (12936, for example), and
+ is confirmed to fix Rafael's storage driver breakage after resume bug
+ report (no bugzilla entry).
+
+ We should also be able to now revert that ACPI battery fix.
+
+ Reported-and-tested-by: Rafael J. Wysocki <rjw@suse.com>
+ Tested-by: Heinz Diehl <htd@fancy-poultry.org>
+ Acked-by: Arjan van de Ven <arjan@linux.intel.com>
+ Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+---
+ kernel/module.c | 3 +++
+ 1 files changed, 3 insertions(+), 0 deletions(-)
+
+diff --git a/kernel/module.c b/kernel/module.c
+index 05f014e..e797812 100644
+--- a/kernel/module.c
++++ b/kernel/module.c
+@@ -2388,6 +2388,9 @@ SYSCALL_DEFINE3(init_module, void __user *, umod,
+ blocking_notifier_call_chain(&module_notify_list,
+ MODULE_STATE_LIVE, mod);
+
++ /* We need to finish all async code before the module init sequence is done */
++ async_synchronize_full();
++
+ mutex_lock(&module_mutex);
+ /* Drop initial reference. */
+ module_put(mod);
+--
+To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
+the body of a message to majordomo@vger.kernel.org
+More majordomo info at http://vger.kernel.org/majordomo-info.html