aboutsummaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'kernel')
-rw-r--r--kernel/sched/core.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/kernel/sched/core.c b/kernel/sched/core.c
index d8d76a65cfdd..7cbb5658be80 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -6162,6 +6162,34 @@ void ___might_sleep(const char *file, int line, int preempt_offset)
6162 add_taint(TAINT_WARN, LOCKDEP_STILL_OK); 6162 add_taint(TAINT_WARN, LOCKDEP_STILL_OK);
6163} 6163}
6164EXPORT_SYMBOL(___might_sleep); 6164EXPORT_SYMBOL(___might_sleep);
6165
6166void __cant_sleep(const char *file, int line, int preempt_offset)
6167{
6168 static unsigned long prev_jiffy;
6169
6170 if (irqs_disabled())
6171 return;
6172
6173 if (!IS_ENABLED(CONFIG_PREEMPT_COUNT))
6174 return;
6175
6176 if (preempt_count() > preempt_offset)
6177 return;
6178
6179 if (time_before(jiffies, prev_jiffy + HZ) && prev_jiffy)
6180 return;
6181 prev_jiffy = jiffies;
6182
6183 printk(KERN_ERR "BUG: assuming atomic context at %s:%d\n", file, line);
6184 printk(KERN_ERR "in_atomic(): %d, irqs_disabled(): %d, pid: %d, name: %s\n",
6185 in_atomic(), irqs_disabled(),
6186 current->pid, current->comm);
6187
6188 debug_show_held_locks(current);
6189 dump_stack();
6190 add_taint(TAINT_WARN, LOCKDEP_STILL_OK);
6191}
6192EXPORT_SYMBOL_GPL(__cant_sleep);
6165#endif 6193#endif
6166 6194
6167#ifdef CONFIG_MAGIC_SYSRQ 6195#ifdef CONFIG_MAGIC_SYSRQ