sched: sched_clock() lockdep fix
authorIngo Molnar <mingo@elte.hu>
Mon, 9 Jun 2008 08:45:29 +0000 (01:45 -0700)
committerIngo Molnar <mingo@elte.hu>
Tue, 10 Jun 2008 12:52:14 +0000 (14:52 +0200)
Sitsofe Wheeler bisected the following commit to cause a lockdep to
warn about itself and turn itself off:

> commit c6531cce6e6e4b99bcda46b6268d6f2d9e30aea4
> Author: Ingo Molnar <mingo@elte.hu>
> 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 <sitsofe@yahoo.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
kernel/sched.c

index 6590a82..b8c9fe6 100644 (file)
@@ -889,7 +889,7 @@ unsigned long long notrace cpu_clock(int cpu)
        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;
@@ -898,7 +898,7 @@ unsigned long long notrace cpu_clock(int cpu)
                time = __sync_cpu_clock(time, cpu);
                per_cpu(prev_cpu_time, cpu) = time;
        }
-       raw_local_irq_restore(flags);
+       local_irq_restore(flags);
 
        return time;
 }