Hi Ingo,
The balance_irq/move code in 2.5.21 currently deadlocks on my UP
box due to the following;
balance_irq() {
entry = irq_balance + irq;
[...]
rdtscl(random_number);
random_number &= 1;
[...]
entry->cpu = move(entry->cpu, allowed_mask, now, random_number);
}
move() {
do {
[...]
cpu=0x0 curr_cpu=0x1 smp_num_cpus=0x1 allowed_mask=0x1 direction=0x0
[...]
} while (!IRQ_ALLOWED(cpu,allowed_mask) ||
(search_idle && !IDLE_ENOUGH(cpu,now)));
}
Please apply
Regards,
Zwane Mwaikambo
Diffed against 2.5.21
--- linux-2.5.19/arch/i386/kernel/io_apic.c.orig Fri Jun 14 11:53:15 2002
+++ linux-2.5.19/arch/i386/kernel/io_apic.c Fri Jun 14 11:55:01 2002
@@ -248,13 +248,14 @@
static inline void balance_irq(int irq)
{
#if CONFIG_SMP
- irq_balance_t *entry = irq_balance + irq;
+ irq_balance_t *entry;
unsigned long now = jiffies;
- if (unlikely(entry->timestamp != now)) {
+ if ((entry->timestamp != now) && (smp_num_cpus > 1)) {
unsigned long allowed_mask;
int random_number;
+ entry = irq_balance + irq;
rdtscl(random_number);
random_number &= 1;
-- http://function.linuxpower.ca- 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/
This archive was generated by hypermail 2b29 : Sat Jun 15 2002 - 22:00:30 EST