diff options
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/module.c | 3 | ||||
-rw-r--r-- | kernel/mutex.c | 3 | ||||
-rw-r--r-- | kernel/panic.c | 12 |
3 files changed, 15 insertions, 3 deletions
diff --git a/kernel/module.c b/kernel/module.c index 05f014efa32c..e797812a4d95 100644 --- a/kernel/module.c +++ b/kernel/module.c | |||
@@ -2388,6 +2388,9 @@ SYSCALL_DEFINE3(init_module, void __user *, umod, | |||
2388 | blocking_notifier_call_chain(&module_notify_list, | 2388 | blocking_notifier_call_chain(&module_notify_list, |
2389 | MODULE_STATE_LIVE, mod); | 2389 | MODULE_STATE_LIVE, mod); |
2390 | 2390 | ||
2391 | /* We need to finish all async code before the module init sequence is done */ | ||
2392 | async_synchronize_full(); | ||
2393 | |||
2391 | mutex_lock(&module_mutex); | 2394 | mutex_lock(&module_mutex); |
2392 | /* Drop initial reference. */ | 2395 | /* Drop initial reference. */ |
2393 | module_put(mod); | 2396 | module_put(mod); |
diff --git a/kernel/mutex.c b/kernel/mutex.c index 5d79781394a3..507cf2b5e9f1 100644 --- a/kernel/mutex.c +++ b/kernel/mutex.c | |||
@@ -148,7 +148,8 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass, | |||
148 | 148 | ||
149 | preempt_disable(); | 149 | preempt_disable(); |
150 | mutex_acquire(&lock->dep_map, subclass, 0, ip); | 150 | mutex_acquire(&lock->dep_map, subclass, 0, ip); |
151 | #if defined(CONFIG_SMP) && !defined(CONFIG_DEBUG_MUTEXES) | 151 | #if defined(CONFIG_SMP) && !defined(CONFIG_DEBUG_MUTEXES) && \ |
152 | !defined(CONFIG_HAVE_DEFAULT_NO_SPIN_MUTEXES) | ||
152 | /* | 153 | /* |
153 | * Optimistic spinning. | 154 | * Optimistic spinning. |
154 | * | 155 | * |
diff --git a/kernel/panic.c b/kernel/panic.c index 3fd8c5bf8b39..934fb377f4b3 100644 --- a/kernel/panic.c +++ b/kernel/panic.c | |||
@@ -213,8 +213,16 @@ unsigned long get_taint(void) | |||
213 | 213 | ||
214 | void add_taint(unsigned flag) | 214 | void add_taint(unsigned flag) |
215 | { | 215 | { |
216 | /* can't trust the integrity of the kernel anymore: */ | 216 | /* |
217 | debug_locks = 0; | 217 | * Can't trust the integrity of the kernel anymore. |
218 | * We don't call directly debug_locks_off() because the issue | ||
219 | * is not necessarily serious enough to set oops_in_progress to 1 | ||
220 | * Also we want to keep up lockdep for staging development and | ||
221 | * post-warning case. | ||
222 | */ | ||
223 | if (flag != TAINT_CRAP && flag != TAINT_WARN && __debug_locks_off()) | ||
224 | printk(KERN_WARNING "Disabling lockdep due to kernel taint\n"); | ||
225 | |||
218 | set_bit(flag, &tainted_mask); | 226 | set_bit(flag, &tainted_mask); |
219 | } | 227 | } |
220 | EXPORT_SYMBOL(add_taint); | 228 | EXPORT_SYMBOL(add_taint); |