All of lore.kernel.org
 help / color / mirror / Atom feed
* [2.6.33-rc5] starting emacs makes lockdep warning
@ 2010-01-26  3:20 KOSAKI Motohiro
  2010-01-26  5:25 ` Américo Wang
  2010-01-26 18:16 ` check_usage_backwards() && forwards? (Was: [2.6.33-rc5] starting emacs makes lockdep warning) Oleg Nesterov
  0 siblings, 2 replies; 21+ messages in thread
From: KOSAKI Motohiro @ 2010-01-26  3:20 UTC (permalink / raw)
  To: LKML, Oleg Nesterov; +Cc: kosaki.motohiro, Alan Cox

Hi

Current linus tree made following lockdep warning when starting emacs command.
Is this known issue?


=========================================================
[ INFO: possible irq lock inversion dependency detected ]
2.6.33-rc5 #77
---------------------------------------------------------
emacs/1609 just changed the state of lock:
 (&(&tty->ctrl_lock)->rlock){+.....}, at: [<ffffffff8127c648>] tty_fasync+0xe8/0x190
but this lock took another, HARDIRQ-unsafe lock in the past:
 (&(&sighand->siglock)->rlock){-.....}

and interrupts could create inverse lock ordering between them.


other info that might help us debug this:
1 lock held by emacs/1609:
 #0:  (&(&tty->ctrl_lock)->rlock){+.....}, at: [<ffffffff8127c648>] tty_fasync+0xe8/0x190

the shortest dependencies between 2nd lock and 1st lock:
 -> (&(&sighand->siglock)->rlock){-.....} ops: 50393 {
    IN-HARDIRQ-W at:
                          [<ffffffff8108924e>] __lock_acquire+0x7ae/0x15a0
                          [<ffffffff8108a0df>] lock_acquire+0x9f/0x120
                          [<ffffffff81423012>] _raw_spin_lock_irqsave+0x52/0x90
                          [<ffffffff81065799>] lock_task_sighand+0x79/0x100
                          [<ffffffff8106600f>] do_send_sig_info+0x3f/0x90
                          [<ffffffff810660f0>] group_send_sig_info+0x40/0x50
                          [<ffffffff81066703>] kill_pid_info+0x73/0xe0
                          [<ffffffff81054014>] it_real_fn+0x44/0xa0
                          [<ffffffff81075d1e>] __run_hrtimer+0x8e/0x1e0
                          [<ffffffff81076116>] hrtimer_interrupt+0xe6/0x250
                          [<ffffffff8142a0b9>] smp_apic_timer_interrupt+0x69/0x9b
                          [<ffffffff81003a93>] apic_timer_interrupt+0x13/0x20
                          [<ffffffff81001956>] cpu_idle+0x66/0xd0
                          [<ffffffff814082e2>] rest_init+0x92/0xa0
                          [<ffffffff81b4cd84>] start_kernel+0x3b9/0x3c5
                          [<ffffffff81b4c310>] x86_64_start_reservations+0x120/0x124
                          [<ffffffff81b4c3f8>] x86_64_start_kernel+0xe4/0xeb
    INITIAL USE at:
                         [<ffffffff81088e86>] __lock_acquire+0x3e6/0x15a0
                         [<ffffffff8108a0df>] lock_acquire+0x9f/0x120
                         [<ffffffff81423012>] _raw_spin_lock_irqsave+0x52/0x90
                         [<ffffffff810646dc>] flush_signals+0x2c/0x60
                         [<ffffffff81064743>] ignore_signals+0x33/0x40
                         [<ffffffff81071067>] kthreadd+0x37/0x180
                         [<ffffffff81003ed4>] kernel_thread_helper+0x4/0x10
  }
  ... key      at: [<ffffffff81c054a4>] __key.46539+0x0/0x8
  ... acquired at:
   [<ffffffff81089af6>] __lock_acquire+0x1056/0x15a0
   [<ffffffff8108a0df>] lock_acquire+0x9f/0x120
   [<ffffffff81423012>] _raw_spin_lock_irqsave+0x52/0x90
   [<ffffffff8127c1be>] __proc_set_tty+0x3e/0x150
   [<ffffffff8127e01d>] tty_open+0x51d/0x5e0
   [<ffffffff81142400>] chrdev_open+0x170/0x290
   [<ffffffff8113c561>] __dentry_open+0x131/0x3a0
   [<ffffffff8113c8e4>] nameidata_to_filp+0x54/0x70
   [<ffffffff8114c098>] do_filp_open+0x948/0xcd0
   [<ffffffff8113c2e9>] do_sys_open+0x69/0x140
   [<ffffffff8113c400>] sys_open+0x20/0x30
   [<ffffffff8100309b>] system_call_fastpath+0x16/0x1b

-> (&(&tty->ctrl_lock)->rlock){+.....} ops: 191 {
   HARDIRQ-ON-W at:
                        [<ffffffff81087e63>] mark_held_locks+0x73/0xa0
                        [<ffffffff810880bb>] trace_hardirqs_on_caller+0x7b/0x1c0
                        [<ffffffff8108820d>] trace_hardirqs_on+0xd/0x10
                        [<ffffffff81423730>] _raw_write_unlock_irq+0x30/0x60
                        [<ffffffff8114cc63>] f_modown+0x53/0xe0
                        [<ffffffff8114cd1e>] __f_setown+0xe/0x20
                        [<ffffffff8127c667>] tty_fasync+0x107/0x190
                        [<ffffffff8114d842>] sys_fcntl+0x222/0x580
                        [<ffffffff8100309b>] system_call_fastpath+0x16/0x1b
   INITIAL USE at:
                       [<ffffffff81088e86>] __lock_acquire+0x3e6/0x15a0
                       [<ffffffff8108a0df>] lock_acquire+0x9f/0x120
                       [<ffffffff81423012>] _raw_spin_lock_irqsave+0x52/0x90
                       [<ffffffff8127c1be>] __proc_set_tty+0x3e/0x150
                       [<ffffffff8127e01d>] tty_open+0x51d/0x5e0
                       [<ffffffff81142400>] chrdev_open+0x170/0x290
                       [<ffffffff8113c561>] __dentry_open+0x131/0x3a0
                       [<ffffffff8113c8e4>] nameidata_to_filp+0x54/0x70
                       [<ffffffff8114c098>] do_filp_open+0x948/0xcd0
                       [<ffffffff8113c2e9>] do_sys_open+0x69/0x140
                       [<ffffffff8113c400>] sys_open+0x20/0x30
                       [<ffffffff8100309b>] system_call_fastpath+0x16/0x1b
 }
 ... key      at: [<ffffffff82533fb8>] __key.30033+0x0/0x8
 ... acquired at:
   [<ffffffff81087263>] check_usage_backwards+0x93/0x100
   [<ffffffff81087b9a>] mark_lock+0x1ca/0x420
   [<ffffffff81087e63>] mark_held_locks+0x73/0xa0
   [<ffffffff810880bb>] trace_hardirqs_on_caller+0x7b/0x1c0
   [<ffffffff8108820d>] trace_hardirqs_on+0xd/0x10
   [<ffffffff81423730>] _raw_write_unlock_irq+0x30/0x60
   [<ffffffff8114cc63>] f_modown+0x53/0xe0
   [<ffffffff8114cd1e>] __f_setown+0xe/0x20
   [<ffffffff8127c667>] tty_fasync+0x107/0x190
   [<ffffffff8114d842>] sys_fcntl+0x222/0x580
   [<ffffffff8100309b>] system_call_fastpath+0x16/0x1b


stack backtrace:
Pid: 1609, comm: emacs Not tainted 2.6.33-rc5 #77
Call Trace:
 [<ffffffff810870bd>] print_irq_inversion_bug.clone.0+0x12d/0x140
 [<ffffffff810871d0>] ? check_usage_backwards+0x0/0x100
 [<ffffffff81087263>] check_usage_backwards+0x93/0x100
 [<ffffffff8114cc4c>] ? f_modown+0x3c/0xe0
 [<ffffffff81087b9a>] mark_lock+0x1ca/0x420
 [<ffffffff81087e63>] mark_held_locks+0x73/0xa0
 [<ffffffff81423730>] ? _raw_write_unlock_irq+0x30/0x60
 [<ffffffff810880bb>] trace_hardirqs_on_caller+0x7b/0x1c0
 [<ffffffff8108820d>] trace_hardirqs_on+0xd/0x10
 [<ffffffff81423730>] _raw_write_unlock_irq+0x30/0x60
 [<ffffffff8114cc63>] f_modown+0x53/0xe0
 [<ffffffff8114cd1e>] __f_setown+0xe/0x20
 [<ffffffff8127c667>] tty_fasync+0x107/0x190
 [<ffffffff8114d842>] sys_fcntl+0x222/0x580
 [<ffffffff8100309b>] system_call_fastpath+0x16/0x1b


^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [2.6.33-rc5] starting emacs makes lockdep warning
  2010-01-26  3:20 [2.6.33-rc5] starting emacs makes lockdep warning KOSAKI Motohiro
@ 2010-01-26  5:25 ` Américo Wang
  2010-01-26  5:37   ` KOSAKI Motohiro
  2010-01-26 18:16 ` check_usage_backwards() && forwards? (Was: [2.6.33-rc5] starting emacs makes lockdep warning) Oleg Nesterov
  1 sibling, 1 reply; 21+ messages in thread
From: Américo Wang @ 2010-01-26  5:25 UTC (permalink / raw)
  To: KOSAKI Motohiro; +Cc: LKML, Oleg Nesterov, Alan Cox

On Tue, Jan 26, 2010 at 11:20 AM, KOSAKI Motohiro
<kosaki.motohiro@jp.fujitsu.com> wrote:
> Hi
>
> Current linus tree made following lockdep warning when starting emacs command.
> Is this known issue?
>
>
> =========================================================
> [ INFO: possible irq lock inversion dependency detected ]
> 2.6.33-rc5 #77
> ---------------------------------------------------------
> emacs/1609 just changed the state of lock:
>  (&(&tty->ctrl_lock)->rlock){+.....}, at: [<ffffffff8127c648>] tty_fasync+0xe8/0x190
> but this lock took another, HARDIRQ-unsafe lock in the past:
>  (&(&sighand->siglock)->rlock){-.....}
>
> and interrupts could create inverse lock ordering between them.
>
>

Hey,

does reverting commit 703625118 help?



> other info that might help us debug this:
> 1 lock held by emacs/1609:
>  #0:  (&(&tty->ctrl_lock)->rlock){+.....}, at: [<ffffffff8127c648>] tty_fasync+0xe8/0x190
>
> the shortest dependencies between 2nd lock and 1st lock:
>  -> (&(&sighand->siglock)->rlock){-.....} ops: 50393 {
>    IN-HARDIRQ-W at:
>                          [<ffffffff8108924e>] __lock_acquire+0x7ae/0x15a0
>                          [<ffffffff8108a0df>] lock_acquire+0x9f/0x120
>                          [<ffffffff81423012>] _raw_spin_lock_irqsave+0x52/0x90
>                          [<ffffffff81065799>] lock_task_sighand+0x79/0x100
>                          [<ffffffff8106600f>] do_send_sig_info+0x3f/0x90
>                          [<ffffffff810660f0>] group_send_sig_info+0x40/0x50
>                          [<ffffffff81066703>] kill_pid_info+0x73/0xe0
>                          [<ffffffff81054014>] it_real_fn+0x44/0xa0
>                          [<ffffffff81075d1e>] __run_hrtimer+0x8e/0x1e0
>                          [<ffffffff81076116>] hrtimer_interrupt+0xe6/0x250
>                          [<ffffffff8142a0b9>] smp_apic_timer_interrupt+0x69/0x9b
>                          [<ffffffff81003a93>] apic_timer_interrupt+0x13/0x20
>                          [<ffffffff81001956>] cpu_idle+0x66/0xd0
>                          [<ffffffff814082e2>] rest_init+0x92/0xa0
>                          [<ffffffff81b4cd84>] start_kernel+0x3b9/0x3c5
>                          [<ffffffff81b4c310>] x86_64_start_reservations+0x120/0x124
>                          [<ffffffff81b4c3f8>] x86_64_start_kernel+0xe4/0xeb
>    INITIAL USE at:
>                         [<ffffffff81088e86>] __lock_acquire+0x3e6/0x15a0
>                         [<ffffffff8108a0df>] lock_acquire+0x9f/0x120
>                         [<ffffffff81423012>] _raw_spin_lock_irqsave+0x52/0x90
>                         [<ffffffff810646dc>] flush_signals+0x2c/0x60
>                         [<ffffffff81064743>] ignore_signals+0x33/0x40
>                         [<ffffffff81071067>] kthreadd+0x37/0x180
>                         [<ffffffff81003ed4>] kernel_thread_helper+0x4/0x10
>  }
>  ... key      at: [<ffffffff81c054a4>] __key.46539+0x0/0x8
>  ... acquired at:
>   [<ffffffff81089af6>] __lock_acquire+0x1056/0x15a0
>   [<ffffffff8108a0df>] lock_acquire+0x9f/0x120
>   [<ffffffff81423012>] _raw_spin_lock_irqsave+0x52/0x90
>   [<ffffffff8127c1be>] __proc_set_tty+0x3e/0x150
>   [<ffffffff8127e01d>] tty_open+0x51d/0x5e0
>   [<ffffffff81142400>] chrdev_open+0x170/0x290
>   [<ffffffff8113c561>] __dentry_open+0x131/0x3a0
>   [<ffffffff8113c8e4>] nameidata_to_filp+0x54/0x70
>   [<ffffffff8114c098>] do_filp_open+0x948/0xcd0
>   [<ffffffff8113c2e9>] do_sys_open+0x69/0x140
>   [<ffffffff8113c400>] sys_open+0x20/0x30
>   [<ffffffff8100309b>] system_call_fastpath+0x16/0x1b
>
> -> (&(&tty->ctrl_lock)->rlock){+.....} ops: 191 {
>   HARDIRQ-ON-W at:
>                        [<ffffffff81087e63>] mark_held_locks+0x73/0xa0
>                        [<ffffffff810880bb>] trace_hardirqs_on_caller+0x7b/0x1c0
>                        [<ffffffff8108820d>] trace_hardirqs_on+0xd/0x10
>                        [<ffffffff81423730>] _raw_write_unlock_irq+0x30/0x60
>                        [<ffffffff8114cc63>] f_modown+0x53/0xe0
>                        [<ffffffff8114cd1e>] __f_setown+0xe/0x20
>                        [<ffffffff8127c667>] tty_fasync+0x107/0x190
>                        [<ffffffff8114d842>] sys_fcntl+0x222/0x580
>                        [<ffffffff8100309b>] system_call_fastpath+0x16/0x1b
>   INITIAL USE at:
>                       [<ffffffff81088e86>] __lock_acquire+0x3e6/0x15a0
>                       [<ffffffff8108a0df>] lock_acquire+0x9f/0x120
>                       [<ffffffff81423012>] _raw_spin_lock_irqsave+0x52/0x90
>                       [<ffffffff8127c1be>] __proc_set_tty+0x3e/0x150
>                       [<ffffffff8127e01d>] tty_open+0x51d/0x5e0
>                       [<ffffffff81142400>] chrdev_open+0x170/0x290
>                       [<ffffffff8113c561>] __dentry_open+0x131/0x3a0
>                       [<ffffffff8113c8e4>] nameidata_to_filp+0x54/0x70
>                       [<ffffffff8114c098>] do_filp_open+0x948/0xcd0
>                       [<ffffffff8113c2e9>] do_sys_open+0x69/0x140
>                       [<ffffffff8113c400>] sys_open+0x20/0x30
>                       [<ffffffff8100309b>] system_call_fastpath+0x16/0x1b
>  }
>  ... key      at: [<ffffffff82533fb8>] __key.30033+0x0/0x8
>  ... acquired at:
>   [<ffffffff81087263>] check_usage_backwards+0x93/0x100
>   [<ffffffff81087b9a>] mark_lock+0x1ca/0x420
>   [<ffffffff81087e63>] mark_held_locks+0x73/0xa0
>   [<ffffffff810880bb>] trace_hardirqs_on_caller+0x7b/0x1c0
>   [<ffffffff8108820d>] trace_hardirqs_on+0xd/0x10
>   [<ffffffff81423730>] _raw_write_unlock_irq+0x30/0x60
>   [<ffffffff8114cc63>] f_modown+0x53/0xe0
>   [<ffffffff8114cd1e>] __f_setown+0xe/0x20
>   [<ffffffff8127c667>] tty_fasync+0x107/0x190
>   [<ffffffff8114d842>] sys_fcntl+0x222/0x580
>   [<ffffffff8100309b>] system_call_fastpath+0x16/0x1b
>
>
> stack backtrace:
> Pid: 1609, comm: emacs Not tainted 2.6.33-rc5 #77
> Call Trace:
>  [<ffffffff810870bd>] print_irq_inversion_bug.clone.0+0x12d/0x140
>  [<ffffffff810871d0>] ? check_usage_backwards+0x0/0x100
>  [<ffffffff81087263>] check_usage_backwards+0x93/0x100
>  [<ffffffff8114cc4c>] ? f_modown+0x3c/0xe0
>  [<ffffffff81087b9a>] mark_lock+0x1ca/0x420
>  [<ffffffff81087e63>] mark_held_locks+0x73/0xa0
>  [<ffffffff81423730>] ? _raw_write_unlock_irq+0x30/0x60
>  [<ffffffff810880bb>] trace_hardirqs_on_caller+0x7b/0x1c0
>  [<ffffffff8108820d>] trace_hardirqs_on+0xd/0x10
>  [<ffffffff81423730>] _raw_write_unlock_irq+0x30/0x60
>  [<ffffffff8114cc63>] f_modown+0x53/0xe0
>  [<ffffffff8114cd1e>] __f_setown+0xe/0x20
>  [<ffffffff8127c667>] tty_fasync+0x107/0x190
>  [<ffffffff8114d842>] sys_fcntl+0x222/0x580
>  [<ffffffff8100309b>] system_call_fastpath+0x16/0x1b
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/
>

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [2.6.33-rc5] starting emacs makes lockdep warning
  2010-01-26  5:25 ` Américo Wang
@ 2010-01-26  5:37   ` KOSAKI Motohiro
  2010-01-26  5:49     ` KOSAKI Motohiro
  0 siblings, 1 reply; 21+ messages in thread
From: KOSAKI Motohiro @ 2010-01-26  5:37 UTC (permalink / raw)
  To: Americo Wang; +Cc: kosaki.motohiro, LKML, Oleg Nesterov, Alan Cox

> On Tue, Jan 26, 2010 at 11:20 AM, KOSAKI Motohiro
> <kosaki.motohiro@jp.fujitsu.com> wrote:
> > Hi
> >
> > Current linus tree made following lockdep warning when starting emacs command.
> > Is this known issue?
> >
> >
> > =========================================================
> > [ INFO: possible irq lock inversion dependency detected ]
> > 2.6.33-rc5 #77
> > ---------------------------------------------------------
> > emacs/1609 just changed the state of lock:
> >  (&(&tty->ctrl_lock)->rlock){+.....}, at: [<ffffffff8127c648>] tty_fasync+0xe8/0x190
> > but this lock took another, HARDIRQ-unsafe lock in the past:
> >  (&(&sighand->siglock)->rlock){-.....}
> >
> > and interrupts could create inverse lock ordering between them.
> >
> >
> 
> Hey,
> 
> does reverting commit 703625118 help?

Seems solved.

Thanks.




^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [2.6.33-rc5] starting emacs makes lockdep warning
  2010-01-26  5:37   ` KOSAKI Motohiro
@ 2010-01-26  5:49     ` KOSAKI Motohiro
  2010-01-26  6:01       ` Américo Wang
  2010-01-26  6:17       ` [2.6.33-rc5] starting emacs makes lockdep warning Eric W. Biederman
  0 siblings, 2 replies; 21+ messages in thread
From: KOSAKI Motohiro @ 2010-01-26  5:49 UTC (permalink / raw)
  To: Eric W. Biederman, Al Viro, Tavis Ormandy, Jeff Dike,
	Julien Tinnes, Matt Mackall
  Cc: kosaki.motohiro, Americo Wang, LKML, Oleg Nesterov, Alan Cox

> > On Tue, Jan 26, 2010 at 11:20 AM, KOSAKI Motohiro
> > <kosaki.motohiro@jp.fujitsu.com> wrote:
> > > Hi
> > >
> > > Current linus tree made following lockdep warning when starting emacs command.
> > > Is this known issue?
> > >
> > >
> > > =========================================================
> > > [ INFO: possible irq lock inversion dependency detected ]
> > > 2.6.33-rc5 #77
> > > ---------------------------------------------------------
> > > emacs/1609 just changed the state of lock:
> > >  (&(&tty->ctrl_lock)->rlock){+.....}, at: [<ffffffff8127c648>] tty_fasync+0xe8/0x190
> > > but this lock took another, HARDIRQ-unsafe lock in the past:
> > >  (&(&sighand->siglock)->rlock){-.....}
> > >
> > > and interrupts could create inverse lock ordering between them.
> > >
> > >
> > 
> > Hey,
> > 
> > does reverting commit 703625118 help?
> 
> Seems solved.
> 
> Thanks.

I'm sorry.
I forgot to cc related person at last mail.

Greg, can you please consider revert commit 703625118?





^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [2.6.33-rc5] starting emacs makes lockdep warning
  2010-01-26  5:49     ` KOSAKI Motohiro
@ 2010-01-26  6:01       ` Américo Wang
  2010-01-26  6:07         ` Al Viro
  2010-01-26  6:17       ` [2.6.33-rc5] starting emacs makes lockdep warning Eric W. Biederman
  1 sibling, 1 reply; 21+ messages in thread
From: Américo Wang @ 2010-01-26  6:01 UTC (permalink / raw)
  To: KOSAKI Motohiro
  Cc: Eric W. Biederman, Al Viro, Tavis Ormandy, Jeff Dike,
	Julien Tinnes, Matt Mackall, LKML, Oleg Nesterov, Alan Cox

On Tue, Jan 26, 2010 at 1:49 PM, KOSAKI Motohiro
<kosaki.motohiro@jp.fujitsu.com> wrote:
>> > On Tue, Jan 26, 2010 at 11:20 AM, KOSAKI Motohiro
>> > <kosaki.motohiro@jp.fujitsu.com> wrote:
>> > > Hi
>> > >
>> > > Current linus tree made following lockdep warning when starting emacs command.
>> > > Is this known issue?
>> > >
>> > >
>> > > =========================================================
>> > > [ INFO: possible irq lock inversion dependency detected ]
>> > > 2.6.33-rc5 #77
>> > > ---------------------------------------------------------
>> > > emacs/1609 just changed the state of lock:
>> > >  (&(&tty->ctrl_lock)->rlock){+.....}, at: [<ffffffff8127c648>] tty_fasync+0xe8/0x190
>> > > but this lock took another, HARDIRQ-unsafe lock in the past:
>> > >  (&(&sighand->siglock)->rlock){-.....}
>> > >
>> > > and interrupts could create inverse lock ordering between them.
>> > >
>> > >
>> >
>> > Hey,
>> >
>> > does reverting commit 703625118 help?
>>
>> Seems solved.
>>
>> Thanks.
>
> I'm sorry.
> I forgot to cc related person at last mail.
>
> Greg, can you please consider revert commit 703625118?
>

I agree, it seems that patch is useless, since we already
do lock_kernel() before calling __f_setown()...

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [2.6.33-rc5] starting emacs makes lockdep warning
  2010-01-26  6:01       ` Américo Wang
@ 2010-01-26  6:07         ` Al Viro
  2010-01-26  6:24           ` Américo Wang
  2010-01-26  7:45           ` KOSAKI Motohiro
  0 siblings, 2 replies; 21+ messages in thread
From: Al Viro @ 2010-01-26  6:07 UTC (permalink / raw)
  To: Am??rico Wang
  Cc: KOSAKI Motohiro, Eric W. Biederman, Tavis Ormandy, Jeff Dike,
	Julien Tinnes, Matt Mackall, LKML, Oleg Nesterov, Alan Cox

On Tue, Jan 26, 2010 at 02:01:12PM +0800, Am??rico Wang wrote:

> I agree, it seems that patch is useless, since we already
> do lock_kernel() before calling __f_setown()...

What's to prevent pid from being freed under us?  BKL won't...

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [2.6.33-rc5] starting emacs makes lockdep warning
  2010-01-26  5:49     ` KOSAKI Motohiro
  2010-01-26  6:01       ` Américo Wang
@ 2010-01-26  6:17       ` Eric W. Biederman
  1 sibling, 0 replies; 21+ messages in thread
From: Eric W. Biederman @ 2010-01-26  6:17 UTC (permalink / raw)
  To: KOSAKI Motohiro
  Cc: Al Viro, Tavis Ormandy, Jeff Dike, Julien Tinnes, Matt Mackall,
	Americo Wang, LKML, Oleg Nesterov, Alan Cox

KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com> writes:

>> > On Tue, Jan 26, 2010 at 11:20 AM, KOSAKI Motohiro
>> > <kosaki.motohiro@jp.fujitsu.com> wrote:
>> > > Hi
>> > >
>> > > Current linus tree made following lockdep warning when starting emacs command.
>> > > Is this known issue?
>> > >
>> > >
>> > > =========================================================
>> > > [ INFO: possible irq lock inversion dependency detected ]
>> > > 2.6.33-rc5 #77
>> > > ---------------------------------------------------------
>> > > emacs/1609 just changed the state of lock:
>> > >  (&(&tty->ctrl_lock)->rlock){+.....}, at: [<ffffffff8127c648>] tty_fasync+0xe8/0x190
>> > > but this lock took another, HARDIRQ-unsafe lock in the past:
>> > >  (&(&sighand->siglock)->rlock){-.....}
>> > >
>> > > and interrupts could create inverse lock ordering between them.
>> > >
>> > >
>> > 
>> > Hey,
>> > 
>> > does reverting commit 703625118 help?
>> 
>> Seems solved.
>> 
>> Thanks.
>
> I'm sorry.
> I forgot to cc related person at last mail.
>
> Greg, can you please consider revert commit 703625118?

It looks like f_modown needs to do irqsave irqrestore to be safely
called in this context.  My apologies for missing this when I
originally made the suggestion.

As for the other comments I would be very surprised if lock_kernel()
offers any real protection.

I really don't understand what it is talking about siglock being
irq unsafe, that seems wrong on oh so many levels.

Eric

n

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [2.6.33-rc5] starting emacs makes lockdep warning
  2010-01-26  6:07         ` Al Viro
@ 2010-01-26  6:24           ` Américo Wang
  2010-01-26  6:54             ` Al Viro
  2010-01-26  7:45           ` KOSAKI Motohiro
  1 sibling, 1 reply; 21+ messages in thread
From: Américo Wang @ 2010-01-26  6:24 UTC (permalink / raw)
  To: Al Viro
  Cc: KOSAKI Motohiro, Eric W. Biederman, Tavis Ormandy, Jeff Dike,
	Julien Tinnes, Matt Mackall, LKML, Oleg Nesterov, Alan Cox

On Tue, Jan 26, 2010 at 2:07 PM, Al Viro <viro@zeniv.linux.org.uk> wrote:
> On Tue, Jan 26, 2010 at 02:01:12PM +0800, Am??rico Wang wrote:
>
>> I agree, it seems that patch is useless, since we already
>> do lock_kernel() before calling __f_setown()...
>
> What's to prevent pid from being freed under us?  BKL won't...
>

Hmm, I don't fully understand the race here. If it is used to protect
'pid' which we get from 'tty->pgrp' or 'current', in the former case,
it is protected by 'tty->ctrl_lock', in the later case, it doesn't need
the lock. So it's not necessary to protect 'pid' by 'tty->crtl_lock'.

Am i missing something?

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [2.6.33-rc5] starting emacs makes lockdep warning
  2010-01-26  6:24           ` Américo Wang
@ 2010-01-26  6:54             ` Al Viro
  0 siblings, 0 replies; 21+ messages in thread
From: Al Viro @ 2010-01-26  6:54 UTC (permalink / raw)
  To: Am??rico Wang
  Cc: KOSAKI Motohiro, Eric W. Biederman, Tavis Ormandy, Jeff Dike,
	Julien Tinnes, Matt Mackall, LKML, Oleg Nesterov, Alan Cox

On Tue, Jan 26, 2010 at 02:24:30PM +0800, Am??rico Wang wrote:
> On Tue, Jan 26, 2010 at 2:07 PM, Al Viro <viro@zeniv.linux.org.uk> wrote:
> > On Tue, Jan 26, 2010 at 02:01:12PM +0800, Am??rico Wang wrote:
> >
> >> I agree, it seems that patch is useless, since we already
> >> do lock_kernel() before calling __f_setown()...
> >
> > What's to prevent pid from being freed under us? ??BKL won't...
> >
> 
> Hmm, I don't fully understand the race here. If it is used to protect
> 'pid' which we get from 'tty->pgrp' or 'current', in the former case,
> it is protected by 'tty->ctrl_lock', in the later case, it doesn't need
  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Without that patch it isn't.

> the lock. So it's not necessary to protect 'pid' by 'tty->crtl_lock'.

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [2.6.33-rc5] starting emacs makes lockdep warning
  2010-01-26  6:07         ` Al Viro
  2010-01-26  6:24           ` Américo Wang
@ 2010-01-26  7:45           ` KOSAKI Motohiro
  2010-01-26  8:45             ` Américo Wang
  1 sibling, 1 reply; 21+ messages in thread
From: KOSAKI Motohiro @ 2010-01-26  7:45 UTC (permalink / raw)
  To: Al Viro
  Cc: kosaki.motohiro, Am??rico Wang, Eric W. Biederman, Tavis Ormandy,
	Jeff Dike, Julien Tinnes, Matt Mackall, LKML, Oleg Nesterov,
	Alan Cox

Hi

> On Tue, Jan 26, 2010 at 02:01:12PM +0800, Am??rico Wang wrote:
> 
> > I agree, it seems that patch is useless, since we already
> > do lock_kernel() before calling __f_setown()...
> 
> What's to prevent pid from being freed under us?  BKL won't...

I don't understand this issue at all. so, this is stupid dumb question.
Why can't we write following code?


                enum pid_type type;
                struct pid *pid;
                if (!waitqueue_active(&tty->read_wait))
                        tty->minimum_to_wake = 1;
                spin_lock_irqsave(&tty->ctrl_lock, flags);
                if (tty->pgrp) {
                        pid = tty->pgrp;
                        type = PIDTYPE_PGID;
                } else {
                        pid = task_pid(current);
                        type = PIDTYPE_PID;
                }
		get_pid(pid)					// insert here
                spin_unlock_irqrestore(&tty->ctrl_lock, flags);
                retval = __f_setown(filp, pid, type, 0);
		put_pid(pid)					// insert here






^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [2.6.33-rc5] starting emacs makes lockdep warning
  2010-01-26  7:45           ` KOSAKI Motohiro
@ 2010-01-26  8:45             ` Américo Wang
  2010-01-26  9:14               ` Eric W. Biederman
  0 siblings, 1 reply; 21+ messages in thread
From: Américo Wang @ 2010-01-26  8:45 UTC (permalink / raw)
  To: KOSAKI Motohiro
  Cc: Al Viro, Eric W. Biederman, Tavis Ormandy, Jeff Dike,
	Julien Tinnes, Matt Mackall, LKML, Oleg Nesterov, Alan Cox

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain; charset=UTF-8, Size: 1640 bytes --]

On Tue, Jan 26, 2010 at 3:45 PM, KOSAKI Motohiro<kosaki.motohiro@jp.fujitsu.com> wrote:> Hi>>> On Tue, Jan 26, 2010 at 02:01:12PM +0800, Am??rico Wang wrote:>>>> > I agree, it seems that patch is useless, since we already>> > do lock_kernel() before calling __f_setown()...>>>> What's to prevent pid from being freed under us?  BKL won't...>> I don't understand this issue at all. so, this is stupid dumb question.> Why can't we write following code?>>>                enum pid_type type;>                struct pid *pid;>                if (!waitqueue_active(&tty->read_wait))>                        tty->minimum_to_wake = 1;>                spin_lock_irqsave(&tty->ctrl_lock, flags);>                if (tty->pgrp) {>                        pid = tty->pgrp;>                        type = PIDTYPE_PGID;>                } else {>                        pid = task_pid(current);>                        type = PIDTYPE_PID;>                }>                get_pid(pid)                                    // insert here>                spin_unlock_irqrestore(&tty->ctrl_lock, flags);>                retval = __f_setown(filp, pid, type, 0);>                put_pid(pid)                                    // insert here>
Yeah, this seems reasonable for me, but not sure if this is the best fix.ÿôèº{.nÇ+‰·Ÿ®‰­†+%ŠËÿ±éݶ\x17¥Šwÿº{.nÇ+‰·¥Š{±þG«éÿŠ{ayº\x1dʇڙë,j\a­¢f£¢·hšïêÿ‘êçz_è®\x03(­éšŽŠÝ¢j"ú\x1a¶^[m§ÿÿ¾\a«þG«éÿ¢¸?™¨è­Ú&£ø§~á¶iO•æ¬z·švØ^\x14\x04\x1a¶^[m§ÿÿÃ\fÿ¶ìÿ¢¸?–I¥

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [2.6.33-rc5] starting emacs makes lockdep warning
  2010-01-26  8:45             ` Américo Wang
@ 2010-01-26  9:14               ` Eric W. Biederman
  2010-01-26  9:32                 ` Américo Wang
  0 siblings, 1 reply; 21+ messages in thread
From: Eric W. Biederman @ 2010-01-26  9:14 UTC (permalink / raw)
  To: Américo Wang
  Cc: KOSAKI Motohiro, Al Viro, Tavis Ormandy, Jeff Dike,
	Julien Tinnes, Matt Mackall, LKML, Oleg Nesterov, Alan Cox

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain; charset=utf-8, Size: 1942 bytes --]

Américo Wang <xiyou.wangcong@gmail.com> writes:

> On Tue, Jan 26, 2010 at 3:45 PM, KOSAKI Motohiro
> <kosaki.motohiro@jp.fujitsu.com> wrote:
>> Hi
>>
>>> On Tue, Jan 26, 2010 at 02:01:12PM +0800, Am??rico Wang wrote:
>>>
>>> > I agree, it seems that patch is useless, since we already
>>> > do lock_kernel() before calling __f_setown()...
>>>
>>> What's to prevent pid from being freed under us?  BKL won't...
>>
>> I don't understand this issue at all. so, this is stupid dumb question.
>> Why can't we write following code?
>>
>>
>>                enum pid_type type;
>>                struct pid *pid;
>>                if (!waitqueue_active(&tty->read_wait))
>>                        tty->minimum_to_wake = 1;
>>                spin_lock_irqsave(&tty->ctrl_lock, flags);
>>                if (tty->pgrp) {
>>                        pid = tty->pgrp;
>>                        type = PIDTYPE_PGID;
>>                } else {
>>                        pid = task_pid(current);
>>                        type = PIDTYPE_PID;
>>                }
>>                get_pid(pid)                                    // insert here
>>                spin_unlock_irqrestore(&tty->ctrl_lock, flags);
>>                retval = __f_setown(filp, pid, type, 0);
>>                put_pid(pid)                                    // insert here
>>
>
> Yeah, this seems reasonable for me, but not sure if this is the best fix.

That or tweak __f_setown to use irqsave/irqrestore variants for it's
locks, __f_setown is already atomic.  I prefer that direction because the
code is just a little simpler.

Eric

ÿôèº{.nÇ+‰·Ÿ®‰­†+%ŠËÿ±éݶ\x17¥Šwÿº{.nÇ+‰·¥Š{±þG«éÿŠ{ayº\x1dʇڙë,j\a­¢f£¢·hšïêÿ‘êçz_è®\x03(­éšŽŠÝ¢j"ú\x1a¶^[m§ÿÿ¾\a«þG«éÿ¢¸?™¨è­Ú&£ø§~á¶iO•æ¬z·švØ^\x14\x04\x1a¶^[m§ÿÿÃ\fÿ¶ìÿ¢¸?–I¥

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [2.6.33-rc5] starting emacs makes lockdep warning
  2010-01-26  9:14               ` Eric W. Biederman
@ 2010-01-26  9:32                 ` Américo Wang
  2010-01-26 12:33                   ` Eric W. Biederman
  0 siblings, 1 reply; 21+ messages in thread
From: Américo Wang @ 2010-01-26  9:32 UTC (permalink / raw)
  To: Eric W. Biederman
  Cc: KOSAKI Motohiro, Al Viro, Tavis Ormandy, Jeff Dike,
	Julien Tinnes, Matt Mackall, LKML, Oleg Nesterov, Alan Cox

[-- Attachment #1: Type: text/plain, Size: 2766 bytes --]

On Tue, Jan 26, 2010 at 5:14 PM, Eric W. Biederman
<ebiederm@xmission.com> wrote:
> Américo Wang <xiyou.wangcong@gmail.com> writes:
>
>> On Tue, Jan 26, 2010 at 3:45 PM, KOSAKI Motohiro
>> <kosaki.motohiro@jp.fujitsu.com> wrote:
>>> Hi
>>>
>>>> On Tue, Jan 26, 2010 at 02:01:12PM +0800, Am??rico Wang wrote:
>>>>
>>>> > I agree, it seems that patch is useless, since we already
>>>> > do lock_kernel() before calling __f_setown()...
>>>>
>>>> What's to prevent pid from being freed under us?  BKL won't...
>>>
>>> I don't understand this issue at all. so, this is stupid dumb question.
>>> Why can't we write following code?
>>>
>>>
>>>                enum pid_type type;
>>>                struct pid *pid;
>>>                if (!waitqueue_active(&tty->read_wait))
>>>                        tty->minimum_to_wake = 1;
>>>                spin_lock_irqsave(&tty->ctrl_lock, flags);
>>>                if (tty->pgrp) {
>>>                        pid = tty->pgrp;
>>>                        type = PIDTYPE_PGID;
>>>                } else {
>>>                        pid = task_pid(current);
>>>                        type = PIDTYPE_PID;
>>>                }
>>>                get_pid(pid)                                    // insert here
>>>                spin_unlock_irqrestore(&tty->ctrl_lock, flags);
>>>                retval = __f_setown(filp, pid, type, 0);
>>>                put_pid(pid)                                    // insert here
>>>
>>
>> Yeah, this seems reasonable for me, but not sure if this is the best fix.
>
> That or tweak __f_setown to use irqsave/irqrestore variants for it's
> locks, __f_setown is already atomic.  I prefer that direction because the
> code is just a little simpler.
>

Oh, very good advice!

Patch is below.

-------------->
Commit 703625118 causes a lockdep warning:

[ INFO: possible irq lock inversion dependency detected ]
2.6.33-rc5 #77
---------------------------------------------------------
emacs/1609 just changed the state of lock:
 (&(&tty->ctrl_lock)->rlock){+.....}, at: [<ffffffff8127c648>]
tty_fasync+0xe8/0x190
but this lock took another, HARDIRQ-unsafe lock in the past:
 (&(&sighand->siglock)->rlock){-.....}

This is due to we use write_lock_irq() in __f_setown() which turns
the IRQ on in write_unlock_irq(), causes this warning.

Switch it ot write_lock_irqsave() and write_unlock_irqrestore(),
as suggested by Eric.

Reported-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
Signed-off-by: WANG Cong <xiyou.wangcong@gmail.com>

----

[-- Attachment #2: fs-fcntl-__f_setown_use-irqsave-lock.diff --]
[-- Type: text/plain, Size: 822 bytes --]

diff --git a/fs/fcntl.c b/fs/fcntl.c
index 97e01dc..556b404 100644
--- a/fs/fcntl.c
+++ b/fs/fcntl.c
@@ -199,7 +199,8 @@ static int setfl(int fd, struct file * filp, unsigned long arg)
 static void f_modown(struct file *filp, struct pid *pid, enum pid_type type,
                      int force)
 {
-	write_lock_irq(&filp->f_owner.lock);
+	int flags;
+	write_lock_irqsave(&filp->f_owner.lock, flags);
 	if (force || !filp->f_owner.pid) {
 		put_pid(filp->f_owner.pid);
 		filp->f_owner.pid = get_pid(pid);
@@ -211,7 +212,7 @@ static void f_modown(struct file *filp, struct pid *pid, enum pid_type type,
 			filp->f_owner.euid = cred->euid;
 		}
 	}
-	write_unlock_irq(&filp->f_owner.lock);
+	write_unlock_irqrestore(&filp->f_owner.lock, flags);
 }
 
 int __f_setown(struct file *filp, struct pid *pid, enum pid_type type,

^ permalink raw reply related	[flat|nested] 21+ messages in thread

* Re: [2.6.33-rc5] starting emacs makes lockdep warning
  2010-01-26  9:32                 ` Américo Wang
@ 2010-01-26 12:33                   ` Eric W. Biederman
  2010-01-26 15:58                     ` [Patch] fix the lockdep warning in tty_fasync() Américo Wang
  0 siblings, 1 reply; 21+ messages in thread
From: Eric W. Biederman @ 2010-01-26 12:33 UTC (permalink / raw)
  To: Américo Wang
  Cc: KOSAKI Motohiro, Al Viro, Tavis Ormandy, Jeff Dike,
	Julien Tinnes, Matt Mackall, LKML, Oleg Nesterov, Alan Cox

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain; charset=utf-8, Size: 3925 bytes --]

Américo Wang <xiyou.wangcong@gmail.com> writes:

> On Tue, Jan 26, 2010 at 5:14 PM, Eric W. Biederman
> <ebiederm@xmission.com> wrote:
>> Américo Wang <xiyou.wangcong@gmail.com> writes:
>>
>>> On Tue, Jan 26, 2010 at 3:45 PM, KOSAKI Motohiro
>>> <kosaki.motohiro@jp.fujitsu.com> wrote:
>>>> Hi
>>>>
>>>>> On Tue, Jan 26, 2010 at 02:01:12PM +0800, Am??rico Wang wrote:
>>>>>
>>>>> > I agree, it seems that patch is useless, since we already
>>>>> > do lock_kernel() before calling __f_setown()...
>>>>>
>>>>> What's to prevent pid from being freed under us?  BKL won't...
>>>>
>>>> I don't understand this issue at all. so, this is stupid dumb question.
>>>> Why can't we write following code?
>>>>
>>>>
>>>>                enum pid_type type;
>>>>                struct pid *pid;
>>>>                if (!waitqueue_active(&tty->read_wait))
>>>>                        tty->minimum_to_wake = 1;
>>>>                spin_lock_irqsave(&tty->ctrl_lock, flags);
>>>>                if (tty->pgrp) {
>>>>                        pid = tty->pgrp;
>>>>                        type = PIDTYPE_PGID;
>>>>                } else {
>>>>                        pid = task_pid(current);
>>>>                        type = PIDTYPE_PID;
>>>>                }
>>>>                get_pid(pid)                                    // insert here
>>>>                spin_unlock_irqrestore(&tty->ctrl_lock, flags);
>>>>                retval = __f_setown(filp, pid, type, 0);
>>>>                put_pid(pid)                                    // insert here
>>>>
>>>
>>> Yeah, this seems reasonable for me, but not sure if this is the best fix.
>>
>> That or tweak __f_setown to use irqsave/irqrestore variants for it's
>> locks, __f_setown is already atomic.  I prefer that direction because the
>> code is just a little simpler.
>>
>
> Oh, very good advice!
>
> Patch is below.
>
> -------------->
> Commit 703625118 causes a lockdep warning:
>
> [ INFO: possible irq lock inversion dependency detected ]
> 2.6.33-rc5 #77
> ---------------------------------------------------------
> emacs/1609 just changed the state of lock:
>  (&(&tty->ctrl_lock)->rlock){+.....}, at: [<ffffffff8127c648>]
> tty_fasync+0xe8/0x190
> but this lock took another, HARDIRQ-unsafe lock in the past:
>  (&(&sighand->siglock)->rlock){-.....}
>
> This is due to we use write_lock_irq() in __f_setown() which turns
> the IRQ on in write_unlock_irq(), causes this warning.
>
> Switch it ot write_lock_irqsave() and write_unlock_irqrestore(),
> as suggested by Eric.
>
> Reported-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
> Signed-off-by: WANG Cong <xiyou.wangcong@gmail.com>
>
> ----
>
> diff --git a/fs/fcntl.c b/fs/fcntl.c
> index 97e01dc..556b404 100644
> --- a/fs/fcntl.c
> +++ b/fs/fcntl.c
> @@ -199,7 +199,8 @@ static int setfl(int fd, struct file * filp, unsigned long arg)
>  static void f_modown(struct file *filp, struct pid *pid, enum pid_type type,
>                       int force)
>  {
> -	write_lock_irq(&filp->f_owner.lock);
> +	int flags;

Minor nit.  This should be "unsigned long flags;"

> +	write_lock_irqsave(&filp->f_owner.lock, flags);
>  	if (force || !filp->f_owner.pid) {
>  		put_pid(filp->f_owner.pid);
>  		filp->f_owner.pid = get_pid(pid);
> @@ -211,7 +212,7 @@ static void f_modown(struct file *filp, struct pid *pid, enum pid_type type,
>  			filp->f_owner.euid = cred->euid;
>  		}
>  	}
> -	write_unlock_irq(&filp->f_owner.lock);
> +	write_unlock_irqrestore(&filp->f_owner.lock, flags);
>  }
>  
>  int __f_setown(struct file *filp, struct pid *pid, enum pid_type type,

Eric
ÿôèº{.nÇ+‰·Ÿ®‰­†+%ŠËÿ±éݶ\x17¥Šwÿº{.nÇ+‰·¥Š{±þG«éÿŠ{ayº\x1dʇڙë,j\a­¢f£¢·hšïêÿ‘êçz_è®\x03(­éšŽŠÝ¢j"ú\x1a¶^[m§ÿÿ¾\a«þG«éÿ¢¸?™¨è­Ú&£ø§~á¶iO•æ¬z·švØ^\x14\x04\x1a¶^[m§ÿÿÃ\fÿ¶ìÿ¢¸?–I¥

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [Patch] fix the lockdep warning in tty_fasync()
  2010-01-26 12:33                   ` Eric W. Biederman
@ 2010-01-26 15:58                     ` Américo Wang
  2010-01-27  1:09                       ` KOSAKI Motohiro
  0 siblings, 1 reply; 21+ messages in thread
From: Américo Wang @ 2010-01-26 15:58 UTC (permalink / raw)
  To: Eric W. Biederman
  Cc: Américo Wang, KOSAKI Motohiro, Al Viro, Tavis Ormandy,
	Jeff Dike, Julien Tinnes, Matt Mackall, LKML, Oleg Nesterov,
	Alan Cox

On Tue, Jan 26, 2010 at 04:33:38AM -0800, Eric W. Biederman wrote:
>>>
>>> That or tweak __f_setown to use irqsave/irqrestore variants for it's
>>> locks, __f_setown is already atomic.  I prefer that direction because the
>>> code is just a little simpler.
>>>
>>
>> Oh, very good advice!
>>
>> Patch is below.
>>
>> -------------->
>> Commit 703625118 causes a lockdep warning:
>>
>> [ INFO: possible irq lock inversion dependency detected ]
>> 2.6.33-rc5 #77
>> ---------------------------------------------------------
>> emacs/1609 just changed the state of lock:
>>  (&(&tty->ctrl_lock)->rlock){+.....}, at: [<ffffffff8127c648>]
>> tty_fasync+0xe8/0x190
>> but this lock took another, HARDIRQ-unsafe lock in the past:
>>  (&(&sighand->siglock)->rlock){-.....}
>>
>> This is due to we use write_lock_irq() in __f_setown() which turns
>> the IRQ on in write_unlock_irq(), causes this warning.
>>
>> Switch it ot write_lock_irqsave() and write_unlock_irqrestore(),
>> as suggested by Eric.
>>
>> Reported-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
>> Signed-off-by: WANG Cong <xiyou.wangcong@gmail.com>
>>
>> ----
>>
>> diff --git a/fs/fcntl.c b/fs/fcntl.c
>> index 97e01dc..556b404 100644
>> --- a/fs/fcntl.c
>> +++ b/fs/fcntl.c
>> @@ -199,7 +199,8 @@ static int setfl(int fd, struct file * filp, unsigned long arg)
>>  static void f_modown(struct file *filp, struct pid *pid, enum pid_type type,
>>                       int force)
>>  {
>> -	write_lock_irq(&filp->f_owner.lock);
>> +	int flags;
>
>Minor nit.  This should be "unsigned long flags;"
>

Right... Below is an updated version.

Thanks.

------------>

Commit 703625118 causes a lockdep warning:
 
[ INFO: possible irq lock inversion dependency detected ]
2.6.33-rc5 #77
---------------------------------------------------------
emacs/1609 just changed the state of lock:
 (&(&tty->ctrl_lock)->rlock){+.....}, at: [<ffffffff8127c648>]
tty_fasync+0xe8/0x190
but this lock took another, HARDIRQ-unsafe lock in the past:
 (&(&sighand->siglock)->rlock){-.....}

This is due to we use write_lock_irq() in __f_setown() which turns
the IRQ on in write_unlock_irq(), causes this warning.

Switch it to write_lock_irqsave() and write_unlock_irqrestore(),
as suggested by Eric.

Reported-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
Signed-off-by: WANG Cong <xiyou.wangcong@gmail.com>
Cc: "Eric W. Biederman" <ebiederm@xmission.com>

---
diff --git a/fs/fcntl.c b/fs/fcntl.c
index 97e01dc..82cc8a7 100644
--- a/fs/fcntl.c
+++ b/fs/fcntl.c
@@ -199,7 +199,8 @@ static int setfl(int fd, struct file * filp, unsigned long arg)
 static void f_modown(struct file *filp, struct pid *pid, enum pid_type type,
                      int force)
 {
-	write_lock_irq(&filp->f_owner.lock);
+	unsigned long flags;
+	write_lock_irqsave(&filp->f_owner.lock, flags);
 	if (force || !filp->f_owner.pid) {
 		put_pid(filp->f_owner.pid);
 		filp->f_owner.pid = get_pid(pid);
@@ -211,7 +212,7 @@ static void f_modown(struct file *filp, struct pid *pid, enum pid_type type,
 			filp->f_owner.euid = cred->euid;
 		}
 	}
-	write_unlock_irq(&filp->f_owner.lock);
+	write_unlock_irqrestore(&filp->f_owner.lock, flags);
 }
 
 int __f_setown(struct file *filp, struct pid *pid, enum pid_type type,



^ permalink raw reply related	[flat|nested] 21+ messages in thread

* check_usage_backwards() && forwards? (Was: [2.6.33-rc5] starting emacs makes lockdep warning)
  2010-01-26  3:20 [2.6.33-rc5] starting emacs makes lockdep warning KOSAKI Motohiro
  2010-01-26  5:25 ` Américo Wang
@ 2010-01-26 18:16 ` Oleg Nesterov
  2010-01-26 18:47   ` Peter Zijlstra
                     ` (2 more replies)
  1 sibling, 3 replies; 21+ messages in thread
From: Oleg Nesterov @ 2010-01-26 18:16 UTC (permalink / raw)
  To: KOSAKI Motohiro, Ingo Molnar, Peter Zijlstra
  Cc: LKML, Alan Cox, Américo Wang, Eric W. Biederman

(add  lockdep gurus)

Lockdep has found the real bug, but the output doesn't look right to me

On 01/26, KOSAKI Motohiro wrote:
>
> =========================================================
> [ INFO: possible irq lock inversion dependency detected ]
> 2.6.33-rc5 #77
> ---------------------------------------------------------
> emacs/1609 just changed the state of lock:
>  (&(&tty->ctrl_lock)->rlock){+.....}, at: [<ffffffff8127c648>] tty_fasync+0xe8/0x190
> but this lock took another, HARDIRQ-unsafe lock in the past:
>  (&(&sighand->siglock)->rlock){-.....}

"HARDIRQ-unsafe" and "this lock took another" looks wrong, afaics.

>   ... key      at: [<ffffffff81c054a4>] __key.46539+0x0/0x8
>   ... acquired at:
>    [<ffffffff81089af6>] __lock_acquire+0x1056/0x15a0
>    [<ffffffff8108a0df>] lock_acquire+0x9f/0x120
>    [<ffffffff81423012>] _raw_spin_lock_irqsave+0x52/0x90
>    [<ffffffff8127c1be>] __proc_set_tty+0x3e/0x150
>    [<ffffffff8127e01d>] tty_open+0x51d/0x5e0

The stack-trace shows that this lock (ctrl_lock) was taken under
->siglock (which is hopefully irq-safe).

Typo in check_usage_backwards() ?

Oleg.

--- a/kernel/lockdep.c
+++ b/kernel/lockdep.c
@@ -2147,7 +2147,7 @@ check_usage_backwards(struct task_struct
 		return ret;
 
 	return print_irq_inversion_bug(curr, &root, target_entry,
-					this, 1, irqclass);
+					this, 0, irqclass);
 }
 
 void print_irqtrace_events(struct task_struct *curr)


^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: check_usage_backwards() && forwards? (Was: [2.6.33-rc5] starting emacs makes lockdep warning)
  2010-01-26 18:16 ` check_usage_backwards() && forwards? (Was: [2.6.33-rc5] starting emacs makes lockdep warning) Oleg Nesterov
@ 2010-01-26 18:47   ` Peter Zijlstra
  2010-01-27  2:58   ` Américo Wang
  2010-01-27 13:15   ` [tip:core/urgent] lockdep: Fix check_usage_backwards() error message tip-bot for Oleg Nesterov
  2 siblings, 0 replies; 21+ messages in thread
From: Peter Zijlstra @ 2010-01-26 18:47 UTC (permalink / raw)
  To: Oleg Nesterov
  Cc: KOSAKI Motohiro, Ingo Molnar, LKML, Alan Cox, Américo Wang,
	Eric W. Biederman

On Tue, 2010-01-26 at 19:16 +0100, Oleg Nesterov wrote:
> (add  lockdep gurus)
> 
> Lockdep has found the real bug, but the output doesn't look right to me
> 
> On 01/26, KOSAKI Motohiro wrote:
> >
> > =========================================================
> > [ INFO: possible irq lock inversion dependency detected ]
> > 2.6.33-rc5 #77
> > ---------------------------------------------------------
> > emacs/1609 just changed the state of lock:
> >  (&(&tty->ctrl_lock)->rlock){+.....}, at: [<ffffffff8127c648>] tty_fasync+0xe8/0x190
> > but this lock took another, HARDIRQ-unsafe lock in the past:
> >  (&(&sighand->siglock)->rlock){-.....}
> 
> "HARDIRQ-unsafe" and "this lock took another" looks wrong, afaics.
> 
> >   ... key      at: [<ffffffff81c054a4>] __key.46539+0x0/0x8
> >   ... acquired at:
> >    [<ffffffff81089af6>] __lock_acquire+0x1056/0x15a0
> >    [<ffffffff8108a0df>] lock_acquire+0x9f/0x120
> >    [<ffffffff81423012>] _raw_spin_lock_irqsave+0x52/0x90
> >    [<ffffffff8127c1be>] __proc_set_tty+0x3e/0x150
> >    [<ffffffff8127e01d>] tty_open+0x51d/0x5e0
> 
> The stack-trace shows that this lock (ctrl_lock) was taken under
> ->siglock (which is hopefully irq-safe).
> 
> Typo in check_usage_backwards() ?

Yes, very much so, thanks!

> Oleg.
> 
> --- a/kernel/lockdep.c
> +++ b/kernel/lockdep.c
> @@ -2147,7 +2147,7 @@ check_usage_backwards(struct task_struct
>  		return ret;
>  
>  	return print_irq_inversion_bug(curr, &root, target_entry,
> -					this, 1, irqclass);
> +					this, 0, irqclass);
>  }
>  
>  void print_irqtrace_events(struct task_struct *curr)
> 



^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [Patch] fix the lockdep warning in tty_fasync()
  2010-01-26 15:58                     ` [Patch] fix the lockdep warning in tty_fasync() Américo Wang
@ 2010-01-27  1:09                       ` KOSAKI Motohiro
  2010-01-27  1:47                         ` Greg KH
  0 siblings, 1 reply; 21+ messages in thread
From: KOSAKI Motohiro @ 2010-01-27  1:09 UTC (permalink / raw)
  To: Americo Wang
  Cc: kosaki.motohiro, Eric W. Biederman, Al Viro, Tavis Ormandy,
	Jeff Dike, Julien Tinnes, Matt Mackall, LKML, Oleg Nesterov,
	Alan Cox, Greg KH

> Commit 703625118 causes a lockdep warning:
>  
> [ INFO: possible irq lock inversion dependency detected ]
> 2.6.33-rc5 #77
> ---------------------------------------------------------
> emacs/1609 just changed the state of lock:
>  (&(&tty->ctrl_lock)->rlock){+.....}, at: [<ffffffff8127c648>]
> tty_fasync+0xe8/0x190
> but this lock took another, HARDIRQ-unsafe lock in the past:
>  (&(&sighand->siglock)->rlock){-.....}
> 
> This is due to we use write_lock_irq() in __f_setown() which turns
> the IRQ on in write_unlock_irq(), causes this warning.
> 
> Switch it to write_lock_irqsave() and write_unlock_irqrestore(),
> as suggested by Eric.
> 
> Reported-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
> Signed-off-by: WANG Cong <xiyou.wangcong@gmail.com>
> Cc: "Eric W. Biederman" <ebiederm@xmission.com>
> 
> ---
> diff --git a/fs/fcntl.c b/fs/fcntl.c
> index 97e01dc..82cc8a7 100644
> --- a/fs/fcntl.c
> +++ b/fs/fcntl.c
> @@ -199,7 +199,8 @@ static int setfl(int fd, struct file * filp, unsigned long arg)
>  static void f_modown(struct file *filp, struct pid *pid, enum pid_type type,
>                       int force)
>  {
> -	write_lock_irq(&filp->f_owner.lock);
> +	unsigned long flags;
> +	write_lock_irqsave(&filp->f_owner.lock, flags);
>  	if (force || !filp->f_owner.pid) {
>  		put_pid(filp->f_owner.pid);
>  		filp->f_owner.pid = get_pid(pid);
> @@ -211,7 +212,7 @@ static void f_modown(struct file *filp, struct pid *pid, enum pid_type type,
>  			filp->f_owner.euid = cred->euid;
>  		}
>  	}
> -	write_unlock_irq(&filp->f_owner.lock);
> +	write_unlock_irqrestore(&filp->f_owner.lock, flags);
>  }
>  
>  int __f_setown(struct file *filp, struct pid *pid, enum pid_type type,

I've confirmed the warning disappear :)

Thanks.



^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [Patch] fix the lockdep warning in tty_fasync()
  2010-01-27  1:09                       ` KOSAKI Motohiro
@ 2010-01-27  1:47                         ` Greg KH
  0 siblings, 0 replies; 21+ messages in thread
From: Greg KH @ 2010-01-27  1:47 UTC (permalink / raw)
  To: KOSAKI Motohiro
  Cc: Americo Wang, Eric W. Biederman, Al Viro, Tavis Ormandy,
	Jeff Dike, Julien Tinnes, Matt Mackall, LKML, Oleg Nesterov,
	Alan Cox

On Wed, Jan 27, 2010 at 10:09:04AM +0900, KOSAKI Motohiro wrote:
> > Commit 703625118 causes a lockdep warning:
> >  
> > [ INFO: possible irq lock inversion dependency detected ]
> > 2.6.33-rc5 #77
> > ---------------------------------------------------------
> > emacs/1609 just changed the state of lock:
> >  (&(&tty->ctrl_lock)->rlock){+.....}, at: [<ffffffff8127c648>]
> > tty_fasync+0xe8/0x190
> > but this lock took another, HARDIRQ-unsafe lock in the past:
> >  (&(&sighand->siglock)->rlock){-.....}
> > 
> > This is due to we use write_lock_irq() in __f_setown() which turns
> > the IRQ on in write_unlock_irq(), causes this warning.
> > 
> > Switch it to write_lock_irqsave() and write_unlock_irqrestore(),
> > as suggested by Eric.
> > 
> > Reported-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
> > Signed-off-by: WANG Cong <xiyou.wangcong@gmail.com>
> > Cc: "Eric W. Biederman" <ebiederm@xmission.com>
> > 
> > ---
> > diff --git a/fs/fcntl.c b/fs/fcntl.c
> > index 97e01dc..82cc8a7 100644
> > --- a/fs/fcntl.c
> > +++ b/fs/fcntl.c
> > @@ -199,7 +199,8 @@ static int setfl(int fd, struct file * filp, unsigned long arg)
> >  static void f_modown(struct file *filp, struct pid *pid, enum pid_type type,
> >                       int force)
> >  {
> > -	write_lock_irq(&filp->f_owner.lock);
> > +	unsigned long flags;
> > +	write_lock_irqsave(&filp->f_owner.lock, flags);
> >  	if (force || !filp->f_owner.pid) {
> >  		put_pid(filp->f_owner.pid);
> >  		filp->f_owner.pid = get_pid(pid);
> > @@ -211,7 +212,7 @@ static void f_modown(struct file *filp, struct pid *pid, enum pid_type type,
> >  			filp->f_owner.euid = cred->euid;
> >  		}
> >  	}
> > -	write_unlock_irq(&filp->f_owner.lock);
> > +	write_unlock_irqrestore(&filp->f_owner.lock, flags);
> >  }
> >  
> >  int __f_setown(struct file *filp, struct pid *pid, enum pid_type type,
> 
> I've confirmed the warning disappear :)

Great, I did the same fix, it's now commit id
b04da8bfdfbbd79544cab2fadfdc12e87eb01600 in Linus's tree.

thanks for testing,

greg k-h

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: check_usage_backwards() && forwards? (Was: [2.6.33-rc5] starting  emacs makes lockdep warning)
  2010-01-26 18:16 ` check_usage_backwards() && forwards? (Was: [2.6.33-rc5] starting emacs makes lockdep warning) Oleg Nesterov
  2010-01-26 18:47   ` Peter Zijlstra
@ 2010-01-27  2:58   ` Américo Wang
  2010-01-27 13:15   ` [tip:core/urgent] lockdep: Fix check_usage_backwards() error message tip-bot for Oleg Nesterov
  2 siblings, 0 replies; 21+ messages in thread
From: Américo Wang @ 2010-01-27  2:58 UTC (permalink / raw)
  To: Oleg Nesterov
  Cc: KOSAKI Motohiro, Ingo Molnar, Peter Zijlstra, LKML, Alan Cox,
	Eric W. Biederman

On Wed, Jan 27, 2010 at 2:16 AM, Oleg Nesterov <oleg@redhat.com> wrote:
> (add  lockdep gurus)
>
> Lockdep has found the real bug, but the output doesn't look right to me
>
> On 01/26, KOSAKI Motohiro wrote:
>>
>> =========================================================
>> [ INFO: possible irq lock inversion dependency detected ]
>> 2.6.33-rc5 #77
>> ---------------------------------------------------------
>> emacs/1609 just changed the state of lock:
>>  (&(&tty->ctrl_lock)->rlock){+.....}, at: [<ffffffff8127c648>] tty_fasync+0xe8/0x190
>> but this lock took another, HARDIRQ-unsafe lock in the past:
>>  (&(&sighand->siglock)->rlock){-.....}
>
> "HARDIRQ-unsafe" and "this lock took another" looks wrong, afaics.
>
>>   ... key      at: [<ffffffff81c054a4>] __key.46539+0x0/0x8
>>   ... acquired at:
>>    [<ffffffff81089af6>] __lock_acquire+0x1056/0x15a0
>>    [<ffffffff8108a0df>] lock_acquire+0x9f/0x120
>>    [<ffffffff81423012>] _raw_spin_lock_irqsave+0x52/0x90
>>    [<ffffffff8127c1be>] __proc_set_tty+0x3e/0x150
>>    [<ffffffff8127e01d>] tty_open+0x51d/0x5e0
>
> The stack-trace shows that this lock (ctrl_lock) was taken under
> ->siglock (which is hopefully irq-safe).
>
> Typo in check_usage_backwards() ?
>
> Oleg.
>
> --- a/kernel/lockdep.c
> +++ b/kernel/lockdep.c
> @@ -2147,7 +2147,7 @@ check_usage_backwards(struct task_struct
>                return ret;
>
>        return print_irq_inversion_bug(curr, &root, target_entry,
> -                                       this, 1, irqclass);
> +                                       this, 0, irqclass);
>  }
>
>  void print_irqtrace_events(struct task_struct *curr)
>
>

Yes!! Almost definitely... You are so careful!
ACK, please submit it as a normal patch.

Thanks.

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [tip:core/urgent] lockdep: Fix check_usage_backwards() error message
  2010-01-26 18:16 ` check_usage_backwards() && forwards? (Was: [2.6.33-rc5] starting emacs makes lockdep warning) Oleg Nesterov
  2010-01-26 18:47   ` Peter Zijlstra
  2010-01-27  2:58   ` Américo Wang
@ 2010-01-27 13:15   ` tip-bot for Oleg Nesterov
  2 siblings, 0 replies; 21+ messages in thread
From: tip-bot for Oleg Nesterov @ 2010-01-27 13:15 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: linux-kernel, hpa, mingo, a.p.zijlstra, oleg, tglx, mingo

Commit-ID:  48d50674179981e41f432167b2441cec782d5484
Gitweb:     http://git.kernel.org/tip/48d50674179981e41f432167b2441cec782d5484
Author:     Oleg Nesterov <oleg@redhat.com>
AuthorDate: Tue, 26 Jan 2010 19:16:41 +0100
Committer:  Ingo Molnar <mingo@elte.hu>
CommitDate: Wed, 27 Jan 2010 08:34:02 +0100

lockdep: Fix check_usage_backwards() error message

Lockdep has found the real bug, but the output doesn't look right to me:

> =========================================================
> [ INFO: possible irq lock inversion dependency detected ]
> 2.6.33-rc5 #77
> ---------------------------------------------------------
> emacs/1609 just changed the state of lock:
>  (&(&tty->ctrl_lock)->rlock){+.....}, at: [<ffffffff8127c648>] tty_fasync+0xe8/0x190
> but this lock took another, HARDIRQ-unsafe lock in the past:
>  (&(&sighand->siglock)->rlock){-.....}

"HARDIRQ-unsafe" and "this lock took another" looks wrong, afaics.

>   ... key      at: [<ffffffff81c054a4>] __key.46539+0x0/0x8
>   ... acquired at:
>    [<ffffffff81089af6>] __lock_acquire+0x1056/0x15a0
>    [<ffffffff8108a0df>] lock_acquire+0x9f/0x120
>    [<ffffffff81423012>] _raw_spin_lock_irqsave+0x52/0x90
>    [<ffffffff8127c1be>] __proc_set_tty+0x3e/0x150
>    [<ffffffff8127e01d>] tty_open+0x51d/0x5e0

The stack-trace shows that this lock (ctrl_lock) was taken under
->siglock (which is hopefully irq-safe).

This is a clear typo in check_usage_backwards() where we tell the print a
fancy routine we're forwards.

Signed-off-by: Oleg Nesterov <oleg@redhat.com>
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
LKML-Reference: <20100126181641.GA10460@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
---
 kernel/lockdep.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/kernel/lockdep.c b/kernel/lockdep.c
index 5feaddc..c62ec14 100644
--- a/kernel/lockdep.c
+++ b/kernel/lockdep.c
@@ -2147,7 +2147,7 @@ check_usage_backwards(struct task_struct *curr, struct held_lock *this,
 		return ret;
 
 	return print_irq_inversion_bug(curr, &root, target_entry,
-					this, 1, irqclass);
+					this, 0, irqclass);
 }
 
 void print_irqtrace_events(struct task_struct *curr)

^ permalink raw reply related	[flat|nested] 21+ messages in thread

end of thread, other threads:[~2010-01-27 13:16 UTC | newest]

Thread overview: 21+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-01-26  3:20 [2.6.33-rc5] starting emacs makes lockdep warning KOSAKI Motohiro
2010-01-26  5:25 ` Américo Wang
2010-01-26  5:37   ` KOSAKI Motohiro
2010-01-26  5:49     ` KOSAKI Motohiro
2010-01-26  6:01       ` Américo Wang
2010-01-26  6:07         ` Al Viro
2010-01-26  6:24           ` Américo Wang
2010-01-26  6:54             ` Al Viro
2010-01-26  7:45           ` KOSAKI Motohiro
2010-01-26  8:45             ` Américo Wang
2010-01-26  9:14               ` Eric W. Biederman
2010-01-26  9:32                 ` Américo Wang
2010-01-26 12:33                   ` Eric W. Biederman
2010-01-26 15:58                     ` [Patch] fix the lockdep warning in tty_fasync() Américo Wang
2010-01-27  1:09                       ` KOSAKI Motohiro
2010-01-27  1:47                         ` Greg KH
2010-01-26  6:17       ` [2.6.33-rc5] starting emacs makes lockdep warning Eric W. Biederman
2010-01-26 18:16 ` check_usage_backwards() && forwards? (Was: [2.6.33-rc5] starting emacs makes lockdep warning) Oleg Nesterov
2010-01-26 18:47   ` Peter Zijlstra
2010-01-27  2:58   ` Américo Wang
2010-01-27 13:15   ` [tip:core/urgent] lockdep: Fix check_usage_backwards() error message tip-bot for Oleg Nesterov

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.