Re: sleeping functions called in invalid context during resume

Ingo Molnar
2006-11-17T07:21:47Z

* Stephen Hemminger <shemminger@osdl.org> wrote:

> > > BUG: sleeping function called from invalid context at drivers/base/power/resume.c:99
> > > in_atomic():1, irqs_disabled():0
> > >
> > > Call Trace:
> > > [<ffffffff80266117>] show_trace+0x34/0x47
> > > [<ffffffff8026613c>] dump_stack+0x12/0x17
> > > [<ffffffff803734e5>] device_resume+0x19/0x51
> > > [<ffffffff80292157>] enter_state+0x19b/0x1b5
> > > [<ffffffff802921cf>] state_store+0x5e/0x79
> > > [<ffffffff802cc157>] sysfs_write_file+0xc5/0xf8
> > > [<ffffffff80215059>] vfs_write+0xce/0x174
> > > [<ffffffff802159a5>] sys_write+0x45/0x6e
> > > [<ffffffff802593de>] system_call+0x7e/0x83
> > > DWARF2 unwinder stuck at system_call+0x7e/0x83
> > >
>
> Ingo, the later version of your lockdep patch (with the x86_64 fix),
> worked. There is nothing locked during these errors.
>
> The problem was the APIC error is leaving preempt-disabled.

ah, that could be the case - do you have a fix-patch for that?

preempt-disabled leaks are only caught via CONFIG_PREEMPT_TRACE (not via
lockdep), which debug feature you can find in the -rt tree:

http://redhat.com/~mingo/realtime-preempt/

(there's no easy standalone patch for now.)

it will be enabled if you select CONFIG_DEBUG_PREEMPT.

> I have no idea what causes:
>
> APIC error on CPU0: 00(00)
>
> Is it an ACPI problem?

a 00 error code? Never seen that ... How frequently does it happen?

Ingo