Re: 2.6.13-rc6-rt6

Ingo Molnar
2005-08-17T06:47:03Z

* Steven Rostedt <rostedt@goodmis.org> wrote:

> On Wed, 2005-08-17 at 00:20 -0400, Steven Rostedt wrote:
> > Ingo,
> >
> > FYI, I ran this on my laptop (Pentium4 HT) and it locked up shortly
> > after it started INIT. I rebooted, and now it's up and running
> > with no problems!?! I'll reboot it a few more times to see if it will
> > lock up again.
>
> With a small change it locks up all the time :-)

unfortunately the space of "patches that break the kernel" is infinitely
larger (and infinitely easier to generate) than the space of "patches
that improve the kernel" - so i'll skip your patch for now ;-)

> > Oh, I also did get the message when it started:
> >
> > WARNING: kstopmachine/859 changed soft IRQ-flags.
> > [<c0149e0b>] stop_machine+0x11b/0x160 (8)
> > [<c0149e7e>] do_stop+0xe/0x70 (32)
> > [<c0139c5a>] kthread+0xba/0xc0 (16)
> > [<c0139ba0>] kthread+0x0/0xc0 (28)
> > [<c0101385>] kernel_thread_helper+0x5/0x10 (16)
>
> I replaced this with raw_local_irq_disable and it really locks up
> everytime now. I need to look into how this is best done.

how come it is stopping the machine during bootup? Or does the lockup
occur during shutdown? changing the local_irq_disable() to
raw_local_irq_disable() looks wrong because sooner or later we hit
complete(). You are probably locking up earlier than that though,
perhaps in stopmachine_set_state()?

but stop_machine() looks quite preempt-unsafe to begin with. The
local_irq_disable() would not be needed at all if prior the
for_each_online_cpu() loop we'd use set_cpus_allowed. The current method
of achieving 'no preemption' is simply racy even during normal
CONFIG_PREEMPT.

Ingo