migh_sleep during early boot

From: Manfred Spraul
Date: Sat Oct 18 2003 - 18:02:02 EST


Hi,

With might_sleep reports several calls from invalid contexts during early boot:

First some calls due to irq off, preempt off: This are the first stages of start_kernel, irqs are not yet enabled.
Then calls with only preemption off: The kernel runs on the future idle thread, and these threads have preempt_count==1.

Attached is a patch that fixes the latter bug: ignore the preemption counter for the idle threads. I haven't figured out how to identify the calls before the first local_irq_enable().

--
Manfred


--- 2.6/kernel/sched.c 2003-10-18 21:17:11.000000000 +0200
+++ build-2.6/kernel/sched.c 2003-10-19 00:49:03.000000000 +0200
@@ -2848,7 +2848,7 @@
#if defined(in_atomic)
static unsigned long prev_jiffy; /* ratelimiting */

- if (in_atomic() || irqs_disabled()) {
+ if ((in_atomic() && current->pid) || irqs_disabled()) {
if (time_before(jiffies, prev_jiffy + HZ) && prev_jiffy)
return;
prev_jiffy = jiffies;