Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=ab63a633cf072c719f885e46fa4814624312f672
Commit:     ab63a633cf072c719f885e46fa4814624312f672
Parent:     143a5d325d35efb1b29dcb8d6031cf27107e183a
Author:     Peter Zijlstra <[EMAIL PROTECTED]>
AuthorDate: Thu Oct 25 14:02:45 2007 +0200
Committer:  Peter Zijlstra <[EMAIL PROTECTED]>
CommitDate: Thu Oct 25 14:02:45 2007 +0200

    sched: fix unconditional irq lock
    
    Lockdep noticed that this lock can also be taken from hardirq context, and 
can
    thus not unconditionally disable/enable irqs.
    
     WARNING: at kernel/lockdep.c:2033 trace_hardirqs_on()
      [show_trace_log_lvl+26/48] show_trace_log_lvl+0x1a/0x30
      [show_trace+18/32] show_trace+0x12/0x20
      [dump_stack+22/32] dump_stack+0x16/0x20
      [trace_hardirqs_on+405/416] trace_hardirqs_on+0x195/0x1a0
      [_read_unlock_irq+34/48] _read_unlock_irq+0x22/0x30
      [sched_debug_show+2615/4224] sched_debug_show+0xa37/0x1080
      [show_state_filter+326/368] show_state_filter+0x146/0x170
      [sysrq_handle_showstate+10/16] sysrq_handle_showstate+0xa/0x10
      [__handle_sysrq+123/288] __handle_sysrq+0x7b/0x120
      [handle_sysrq+40/64] handle_sysrq+0x28/0x40
      [kbd_event+1045/1680] kbd_event+0x415/0x690
      [input_pass_event+206/208] input_pass_event+0xce/0xd0
      [input_handle_event+170/928] input_handle_event+0xaa/0x3a0
      [input_event+95/112] input_event+0x5f/0x70
      [atkbd_interrupt+434/1456] atkbd_interrupt+0x1b2/0x5b0
      [serio_interrupt+59/128] serio_interrupt+0x3b/0x80
      [i8042_interrupt+263/576] i8042_interrupt+0x107/0x240
      [handle_IRQ_event+40/96] handle_IRQ_event+0x28/0x60
      [handle_edge_irq+175/320] handle_edge_irq+0xaf/0x140
      [do_IRQ+64/128] do_IRQ+0x40/0x80
      [common_interrupt+46/52] common_interrupt+0x2e/0x34
    
    Signed-off-by: Peter Zijlstra <[EMAIL PROTECTED]>
    Signed-off-by: Ingo Molnar <[EMAIL PROTECTED]>
---
 kernel/sched_debug.c |    5 +++--
 1 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/kernel/sched_debug.c b/kernel/sched_debug.c
index e6fb392..415e5c3 100644
--- a/kernel/sched_debug.c
+++ b/kernel/sched_debug.c
@@ -80,6 +80,7 @@ print_task(struct seq_file *m, struct rq *rq, struct 
task_struct *p)
 static void print_rq(struct seq_file *m, struct rq *rq, int rq_cpu)
 {
        struct task_struct *g, *p;
+       unsigned long flags;
 
        SEQ_printf(m,
        "\nrunnable tasks:\n"
@@ -88,7 +89,7 @@ static void print_rq(struct seq_file *m, struct rq *rq, int 
rq_cpu)
        "------------------------------------------------------"
        "----------------------------------------------------\n");
 
-       read_lock_irq(&tasklist_lock);
+       read_lock_irqsave(&tasklist_lock, flags);
 
        do_each_thread(g, p) {
                if (!p->se.on_rq || task_cpu(p) != rq_cpu)
@@ -97,7 +98,7 @@ static void print_rq(struct seq_file *m, struct rq *rq, int 
rq_cpu)
                print_task(m, rq, p);
        } while_each_thread(g, p);
 
-       read_unlock_irq(&tasklist_lock);
+       read_unlock_irqrestore(&tasklist_lock, flags);
 }
 
 void print_cfs_rq(struct seq_file *m, int cpu, struct cfs_rq *cfs_rq)
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to