Re: Real-Time Preemption, -RT-2.6.12-final-V0.7.50-24

Steven Rostedt
2005-06-28T07:57:44Z

[Please CC Ingo Molnar on all RT kernel issues]

On Mon, 27 Jun 2005, Daniel Walker wrote:

> On Mon, 2005-06-27 at 12:01 -0700, Chuck Harding wrote:
> > What can be causing the following message to appear in dmesg and
> > how can I fix it?
> >
> > BUG: scheduling with irqs disabled: kapmd/0x00000000/46
> > caller is schedule_timeout+0x51/0x9e
> > [<c02b3bc9>] schedule+0x96/0xf6 (8)
> > [<c02b43f7>] schedule_timeout+0x51/0x9e (28)
> > [<c01222ed>] process_timeout+0x0/0x5 (32)
> > [<c0112063>] apm_mainloop+0x7a/0x96 (24)
> > [<c0115e45>] default_wake_function+0x0/0x16 (12)
> > [<c0115e45>] default_wake_function+0x0/0x16 (32)
> > [<c0111485>] apm_driver_version+0x1c/0x38 (16)
> > [<c01126f7>] apm+0x0/0x289 (8)
> > [<c01127a6>] apm+0xaf/0x289 (8)
> > [<c010133c>] kernel_thread_helper+0x0/0xb (20)
> > [<c0101341>] kernel_thread_helper+0x5/0xb (4)
> >
> > This was also present in earlier final-V0.7.50 version I've tried
> > (since -00) I don't get hangs but that doesn't look like it should
> > be happening. Thanks.
>
> If you have PREEMPT_RT enabled, it looks like interrupts are hard
> disabled then there is a schedule_timeout() requested. You could try
> turning off power management and see if you still have problems.
>

Although turning off apm works, this is a fix to the symptom and not a
cure. Has someone already taken a look at this code? Since
apm_bios_call_simple calls local_save_flags and afterwards
raw_lock_irq_restore is then called. Shouldn't that have been
raw_local_save_flags?

That apm_bios_call_simple_asm also looks pretty scary! I haven't yet
figured out how APM_FUNC_VERSION becomes a normal function.

-- Steve