mirror of
https://git.yoctoproject.org/poky
synced 2026-02-09 02:03:04 +01:00
70 lines
2.9 KiB
Diff
70 lines
2.9 KiB
Diff
|
|
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
|