Re: [patch, -rc5-mm3] fix irqpoll some more

Steven Rostedt
2006-06-06T14:40:45Z

On Tue, 2006-06-06 at 15:53 +0200, Ingo Molnar wrote:
> * Steven Rostedt <rostedt@goodmis.org> wrote:
>
> > On Mon, 2006-06-05 at 10:49 +0200, Ingo Molnar wrote:
> >
> > > + /*
> > > + * HACK:
> > > + *
> > > + * In the first pass we dont touch handlers that are behind
> > > + * a disabled IRQ line. In the second pass (having no other
> > > + * choice) we ignore the disabled state of IRQ lines. We've
> > > + * got a screaming interrupt, so we have the choice between
> > > + * a real lockup happening due to that screaming interrupt,
> > > + * against a theoretical locking that becomes possible if we
> > > + * ignore a disabled IRQ line.
> >
> > FYI, with irqpoll on in my i386 SMP machine, I hit this theoretical
> > locking every time in the vortex driver.
>
> you got a lockup/deadlock every time, due to the bug that the lock
> validator pointed out?
>

The one with the spin_lock being used outside of interrupts disabled?
Yep. But remember, this only happens with irqpoll where it doesn't
honor disabled interrupts, so this was expected behavior.

Here's the back trace. I had to disable your lockdep to turn NMI back
on.

[<c0103d37>] show_stack_log_lvl+0xa7/0xf0
[<c0103f40>] show_registers+0x1c0/0x260
[<c0104357>] die_nmi+0xd7/0x160
[<c0110835>] nmi_watchdog_tick+0x1c5/0x210
[<c0104079>] do_nmi+0x99/0x2a0
[<c01035ee>] nmi_stack_correct+0x1d/0x22
[<f8898933>] boomerang_interrupt+0x33/0x460 [3c59x]
[<c01435d5>] note_interrupt+0x155/0x260
[<c0143dfd>] handle_edge_irq+0x11d/0x150
[<c010529f>] do_IRQ+0x4f/0xa0
[<c0103462>] common_interrupt+0x1a/0x20
[<f8895c46>] mdio_read+0xb6/0xf0 [3c59x]
[<f885a2e1>] mii_link_ok+0x21/0x50 [mii]
[<f885a3a6>] mii_check_media+0x36/0x200 [mii]
[<f88956ab>] vortex_check_media+0x3b/0x90 [3c59x]
[<f8895b1e>] vortex_timer+0x41e/0x490 [3c59x]
[<c0128799>] run_timer_softirq+0xc9/0x1a0
[<c0123ff4>] __do_softirq+0x74/0xf0
[<c01240c5>] do_softirq+0x55/0x60
[<c012422d>] irq_exit+0x4d/0x50
[<c01100e4>] smp_apic_timer_interrupt+0x64/0x70
[<c01034f3>] apic_timer_interrupt+0x1f/0x24
[<c010160d>] cpu_idle+0x4d/0xb0
[<c010f170>] start_secondary+0x450/0x500
[<00000000>] 0x0

-- Steve