Ingo Molnar wrote:
> * Sitsofe Wheeler <[email protected]> wrote:
>
>> OK I've managed to bisect this down to commit
>> [c6531cce6e6e4b99bcda46b6268d6f2d9e30aea4] (sched: do not trace
>> sched_clock):
>>
>> commit c6531cce6e6e4b99bcda46b6268d6f2d9e30aea4
>> Author: Ingo Molnar <[email protected]>
>> Date: Mon May 12 21:21:14 2008 +0200
>>
>> sched: do not trace sched_clock
>>
>> The tracer uses sched_clock, so do not trace it.
>>
>> Signed-off-by: Ingo Molnar <[email protected]>
>> Signed-off-by: Thomas Gleixner <[email protected]>
>>
>> Reverting this made the lockdep warning go away. Here is the bisection log:
>
> ah, good find! Does the patch below (instead of the full revert) fix it
> as well? I've queued the fix up into tip/tracing/ftrace.
>
> Ingo
>
> ---------------->
> Subject: sched: sched_clock() lockdep fix
> From: Ingo Molnar <[email protected]>
> Date: Thu Jun 05 15:04:17 CEST 2008
>
> Sitsofe Wheeler reported a lockdep warning and bisected it down to:
>
>> commit c6531cce6e6e4b99bcda46b6268d6f2d9e30aea4
>> Author: Ingo Molnar <[email protected]>
>> Date: Mon May 12 21:21:14 2008 +0200
>>
>> sched: do not trace sched_clock
>
> do not use raw irq flags in cpu_clock() as it causes lockdep to lose
> track of the true state of the IRQ flag.
>
> Reported-and-bisected-by: Sitsofe Wheeler <[email protected]>
> Signed-off-by: Ingo Molnar <[email protected]>
> ---
> kernel/sched.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> Index: linux/kernel/sched.c
> ===================================================================
> --- linux.orig/kernel/sched.c
> +++ linux/kernel/sched.c
> @@ -862,7 +862,7 @@ unsigned long long notrace cpu_clock(int
> unsigned long long prev_cpu_time, time, delta_time;
> unsigned long flags;
>
> - raw_local_irq_save(flags);
> + local_irq_save(flags);
> prev_cpu_time = per_cpu(prev_cpu_time, cpu);
> time = __cpu_clock(cpu) + per_cpu(time_offset, cpu);
> delta_time = time-prev_cpu_time;
> @@ -871,7 +871,7 @@ unsigned long long notrace cpu_clock(int
> time = __sync_cpu_clock(time, cpu);
> per_cpu(prev_cpu_time, cpu) = time;
> }
> - raw_local_irq_restore(flags);
> + local_irq_restore(flags);
>
> return time;
> }
>
I didn't manage to get through a bisection run for the warning - thanks
to Sitsofe for doing it. The patch does eliminate the warning for me.
Thanks,
--
Kevin Winchester