[PATCH][2.5] 2.5.21 deadlocks on UP (SMP kernel) w/ IOAPIC

From: Zwane Mwaikambo (zwane@linux.realnet.co.sz)
Date: Fri Jun 14 2002 - 04:40:04 EST


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