Messages in this thread | | | Date | Fri, 12 May 2006 03:59:33 -0400 (EDT) | From | Steven Rostedt <> | Subject | Re: [RFC][PATCH -rt] irqd starvation on SMP by a single process? |
| |
On Fri, 12 May 2006, Ingo Molnar wrote:
> ah. This actually uncovered a real bug. We were calling __do_softirq() > with interrupts enabled (and being preemptible) - which is certainly > bad.
Hmm, I wonder if this is also affecting Mark's problem.
But since I showed that if hardirqs_disabled and running PREEMPT not PREEMPT_RT, disable_irq can call schedule. This is done in drivers/net/3c59x.c. It has a watchdog timeout calling disable_irq, which calls synchronize_irq which might schedule:
void synchronize_irq(unsigned int irq) { struct irq_desc *desc = irq_desc + irq;
if (irq >= NR_IRQS) return;
if (hardirq_preemption && !(desc->status & IRQ_NODELAY)) wait_event(desc->wait_for_handler, !(desc->status & IRQ_INPROGRESS)); else while (desc->status & IRQ_INPROGRESS) cpu_relax(); }
-- Steve
> > this was hidden before because the smp_processor_id() debugging code > handles tasks bound to a single CPU as per-cpu-safe. > > could you check the (totally untested) patch below and see if that fixes > things for you? I've also added your affinity change. > - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |