2010-07-08 03:55:09

by Fernando Lopez-Lezcano

[permalink] [raw]
Subject: 2.6.33.5 rt23: sleeping function called from invalid context

After a suspend/wake up cycle, just after upgrading to fc12 (I did not
see this with the same basic kernel - that is, compiled from the same
source + patches - under fc11).

BUG: sleeping function called from invalid context at
kernel/rtmutex.c:684
pcnt: 0 0 in_atomic(): 0, irqs_disabled(): 1, pid: 10582, name:
pm-suspend
Pid: 10582, comm: pm-suspend Not tainted
2.6.33.5-120.rt23.1.fc11.ccrma.i686.rtPAE #1
Call Trace:
[<c042eced>] __might_sleep+0xcc/0xd4
[<c0464f57>] rt_spin_lock_fastlock.clone.1+0x26/0x5f
[<c0792862>] rt_spin_lock+0x8/0xa
[<c040dddc>] read_persistent_clock+0x11/0x30
[<c045d1de>] timekeeping_suspend+0xe/0x4e
[<c0640c9e>] sysdev_suspend+0x15c/0x356
[<c0792906>] ? _mutex_unlock+0x8/0xa
[<c046afc1>] suspend_devices_and_enter+0xea/0x17f
[<c046b11e>] enter_state+0xc8/0x114
[<c046a9cf>] state_store+0x93/0xa7
[<c046a93c>] ? state_store+0x0/0xa7
[<c05a6505>] kobj_attr_store+0x16/0x22
[<c0515afa>] sysfs_write_file+0xbf/0xea
[<c0515a3b>] ? sysfs_write_file+0x0/0xea
[<c04d26ba>] vfs_write+0x80/0xdf
[<c0465134>] ? rt_up_read+0x13/0x15
[<c04d27ad>] sys_write+0x3b/0x5d
[<c040895f>] sysenter_do_call+0x12/0x28

-- Fernando


2010-07-08 17:37:22

by john stultz

[permalink] [raw]
Subject: Re: 2.6.33.5 rt23: sleeping function called from invalid context

On Wed, 2010-07-07 at 20:54 -0700, Fernando Lopez-Lezcano wrote:
> After a suspend/wake up cycle, just after upgrading to fc12 (I did not
> see this with the same basic kernel - that is, compiled from the same
> source + patches - under fc11).
>
> BUG: sleeping function called from invalid context at
> kernel/rtmutex.c:684
> pcnt: 0 0 in_atomic(): 0, irqs_disabled(): 1, pid: 10582, name:
> pm-suspend
> Pid: 10582, comm: pm-suspend Not tainted
> 2.6.33.5-120.rt23.1.fc11.ccrma.i686.rtPAE #1
> Call Trace:
> [<c042eced>] __might_sleep+0xcc/0xd4
> [<c0464f57>] rt_spin_lock_fastlock.clone.1+0x26/0x5f
> [<c0792862>] rt_spin_lock+0x8/0xa
> [<c040dddc>] read_persistent_clock+0x11/0x30
> [<c045d1de>] timekeeping_suspend+0xe/0x4e
> [<c0640c9e>] sysdev_suspend+0x15c/0x356
> [<c0792906>] ? _mutex_unlock+0x8/0xa
> [<c046afc1>] suspend_devices_and_enter+0xea/0x17f
> [<c046b11e>] enter_state+0xc8/0x114
> [<c046a9cf>] state_store+0x93/0xa7
> [<c046a93c>] ? state_store+0x0/0xa7
> [<c05a6505>] kobj_attr_store+0x16/0x22
> [<c0515afa>] sysfs_write_file+0xbf/0xea
> [<c0515a3b>] ? sysfs_write_file+0x0/0xea
> [<c04d26ba>] vfs_write+0x80/0xdf
> [<c0465134>] ? rt_up_read+0x13/0x15
> [<c04d27ad>] sys_write+0x3b/0x5d
> [<c040895f>] sysenter_do_call+0x12/0x28

Huh. Looks like the lock protecting the RTC/CMOS might need to be
converted to a raw spinlock, since suspend/resume is probably done with
irqs off.

A little baffled why the same kernel didn't see this with fc11.

Does this reproduce easily?

thanks
-john

2010-07-08 17:50:32

by Fernando Lopez-Lezcano

[permalink] [raw]
Subject: Re: 2.6.33.5 rt23: sleeping function called from invalid context

On Thu, 2010-07-08 at 10:37 -0700, john stultz wrote:
> On Wed, 2010-07-07 at 20:54 -0700, Fernando Lopez-Lezcano wrote:
> > After a suspend/wake up cycle, just after upgrading to fc12 (I did not
> > see this with the same basic kernel - that is, compiled from the same
> > source + patches - under fc11).
> >
> > BUG: sleeping function called from invalid context at
> > kernel/rtmutex.c:684
> > pcnt: 0 0 in_atomic(): 0, irqs_disabled(): 1, pid: 10582, name:
> > pm-suspend
> > Pid: 10582, comm: pm-suspend Not tainted
> > 2.6.33.5-120.rt23.1.fc11.ccrma.i686.rtPAE #1
> > Call Trace:
> > [<c042eced>] __might_sleep+0xcc/0xd4
> > [<c0464f57>] rt_spin_lock_fastlock.clone.1+0x26/0x5f
> > [<c0792862>] rt_spin_lock+0x8/0xa
> > [<c040dddc>] read_persistent_clock+0x11/0x30
> > [<c045d1de>] timekeeping_suspend+0xe/0x4e
> > [<c0640c9e>] sysdev_suspend+0x15c/0x356
> > [<c0792906>] ? _mutex_unlock+0x8/0xa
> > [<c046afc1>] suspend_devices_and_enter+0xea/0x17f
> > [<c046b11e>] enter_state+0xc8/0x114
> > [<c046a9cf>] state_store+0x93/0xa7
> > [<c046a93c>] ? state_store+0x0/0xa7
> > [<c05a6505>] kobj_attr_store+0x16/0x22
> > [<c0515afa>] sysfs_write_file+0xbf/0xea
> > [<c0515a3b>] ? sysfs_write_file+0x0/0xea
> > [<c04d26ba>] vfs_write+0x80/0xdf
> > [<c0465134>] ? rt_up_read+0x13/0x15
> > [<c04d27ad>] sys_write+0x3b/0x5d
> > [<c040895f>] sysenter_do_call+0x12/0x28
>
> Huh. Looks like the lock protecting the RTC/CMOS might need to be
> converted to a raw spinlock, since suspend/resume is probably done with
> irqs off.
>
> A little baffled why the same kernel didn't see this with fc11.

Same here, maybe I did not notice before?

> Does this reproduce easily?

Happens every time I suspend/resume (I think). No apparent side
effects.

-- Fernando

2010-07-09 01:44:59

by john stultz

[permalink] [raw]
Subject: Re: 2.6.33.5 rt23: sleeping function called from invalid context

On Thu, 2010-07-08 at 10:37 -0700, john stultz wrote:
> On Wed, 2010-07-07 at 20:54 -0700, Fernando Lopez-Lezcano wrote:
> > After a suspend/wake up cycle, just after upgrading to fc12 (I did not
> > see this with the same basic kernel - that is, compiled from the same
> > source + patches - under fc11).
> >
> > BUG: sleeping function called from invalid context at
> > kernel/rtmutex.c:684
> > pcnt: 0 0 in_atomic(): 0, irqs_disabled(): 1, pid: 10582, name:
> > pm-suspend
> > Pid: 10582, comm: pm-suspend Not tainted
> > 2.6.33.5-120.rt23.1.fc11.ccrma.i686.rtPAE #1
> > Call Trace:
> > [<c042eced>] __might_sleep+0xcc/0xd4
> > [<c0464f57>] rt_spin_lock_fastlock.clone.1+0x26/0x5f
> > [<c0792862>] rt_spin_lock+0x8/0xa
> > [<c040dddc>] read_persistent_clock+0x11/0x30
> > [<c045d1de>] timekeeping_suspend+0xe/0x4e
> > [<c0640c9e>] sysdev_suspend+0x15c/0x356
> > [<c0792906>] ? _mutex_unlock+0x8/0xa
> > [<c046afc1>] suspend_devices_and_enter+0xea/0x17f
>
> Huh. Looks like the lock protecting the RTC/CMOS might need to be
> converted to a raw spinlock, since suspend/resume is probably done with
> irqs off.

Oof. The rtc_lock is used all over the place. Not sure if we really want
to convert it to a raw_spinlock.

However, sysdev_suspend() wants interrupts off on all the .suspend
calls. I'm surprised we haven't hit this issue with more drivers. Maybe
no one is testing suspend w/ -rt? Or am I just missing an obvious
solution?

Thomas, any thoughts on this?

thanks
-john


2010-07-14 22:07:26

by Fernando Lopez-Lezcano

[permalink] [raw]
Subject: Re: 2.6.33.5 rt23: sleeping function called from invalid context

On Thu, 2010-07-08 at 18:44 -0700, john stultz wrote:
> On Thu, 2010-07-08 at 10:37 -0700, john stultz wrote:
> > On Wed, 2010-07-07 at 20:54 -0700, Fernando Lopez-Lezcano wrote:
> > > After a suspend/wake up cycle, just after upgrading to fc12 (I did not
> > > see this with the same basic kernel - that is, compiled from the same
> > > source + patches - under fc11).
> > >
> > > BUG: sleeping function called from invalid context at
> > > kernel/rtmutex.c:684
> > > pcnt: 0 0 in_atomic(): 0, irqs_disabled(): 1, pid: 10582, name:
> > > pm-suspend
> > > Pid: 10582, comm: pm-suspend Not tainted
> > > 2.6.33.5-120.rt23.1.fc11.ccrma.i686.rtPAE #1
> > > Call Trace:
> > > [<c042eced>] __might_sleep+0xcc/0xd4
> > > [<c0464f57>] rt_spin_lock_fastlock.clone.1+0x26/0x5f
> > > [<c0792862>] rt_spin_lock+0x8/0xa
> > > [<c040dddc>] read_persistent_clock+0x11/0x30
> > > [<c045d1de>] timekeeping_suspend+0xe/0x4e
> > > [<c0640c9e>] sysdev_suspend+0x15c/0x356
> > > [<c0792906>] ? _mutex_unlock+0x8/0xa
> > > [<c046afc1>] suspend_devices_and_enter+0xea/0x17f
> >
> > Huh. Looks like the lock protecting the RTC/CMOS might need to be
> > converted to a raw spinlock, since suspend/resume is probably done with
> > irqs off.
>
> Oof. The rtc_lock is used all over the place. Not sure if we really want
> to convert it to a raw_spinlock.
>
> However, sysdev_suspend() wants interrupts off on all the .suspend
> calls. I'm surprised we haven't hit this issue with more drivers. Maybe
> no one is testing suspend w/ -rt? Or am I just missing an obvious
> solution?
>
> Thomas, any thoughts on this?

(BTW, this is still happening in rt26...)
-- Fernando


2010-07-14 22:12:27

by Thomas Gleixner

[permalink] [raw]
Subject: Re: 2.6.33.5 rt23: sleeping function called from invalid context

On Wed, 14 Jul 2010, Fernando Lopez-Lezcano wrote:
> On Thu, 2010-07-08 at 18:44 -0700, john stultz wrote:
> > On Thu, 2010-07-08 at 10:37 -0700, john stultz wrote:
> > > On Wed, 2010-07-07 at 20:54 -0700, Fernando Lopez-Lezcano wrote:
> > > > After a suspend/wake up cycle, just after upgrading to fc12 (I did not
> > > > see this with the same basic kernel - that is, compiled from the same
> > > > source + patches - under fc11).
> > > >
> > > > BUG: sleeping function called from invalid context at
> > > > kernel/rtmutex.c:684
> > > > pcnt: 0 0 in_atomic(): 0, irqs_disabled(): 1, pid: 10582, name:
> > > > pm-suspend
> > > > Pid: 10582, comm: pm-suspend Not tainted
> > > > 2.6.33.5-120.rt23.1.fc11.ccrma.i686.rtPAE #1
> > > > Call Trace:
> > > > [<c042eced>] __might_sleep+0xcc/0xd4
> > > > [<c0464f57>] rt_spin_lock_fastlock.clone.1+0x26/0x5f
> > > > [<c0792862>] rt_spin_lock+0x8/0xa
> > > > [<c040dddc>] read_persistent_clock+0x11/0x30
> > > > [<c045d1de>] timekeeping_suspend+0xe/0x4e
> > > > [<c0640c9e>] sysdev_suspend+0x15c/0x356
> > > > [<c0792906>] ? _mutex_unlock+0x8/0xa
> > > > [<c046afc1>] suspend_devices_and_enter+0xea/0x17f
> > >
> > > Huh. Looks like the lock protecting the RTC/CMOS might need to be
> > > converted to a raw spinlock, since suspend/resume is probably done with
> > > irqs off.
> >
> > Oof. The rtc_lock is used all over the place. Not sure if we really want
> > to convert it to a raw_spinlock.
> >
> > However, sysdev_suspend() wants interrupts off on all the .suspend
> > calls. I'm surprised we haven't hit this issue with more drivers. Maybe
> > no one is testing suspend w/ -rt? Or am I just missing an obvious
> > solution?
> >
> > Thomas, any thoughts on this?

Yep, it's basically the same scenario which we have during bootup
where we know that we cannot run into lock contention, so we can apply
the same rules. Still working on a sane solution for this.

> (BTW, this is still happening in rt26...)

See announce mail :)

> There are some pending issues:
> - rtc_lock suspend/resume (working on a patch)
> ...

Thanks,

tglx