Re: QUESTION: Network hangs with BP6 and 2.4.x kernels, hardware related?

Manfred Spraul
2001-01-12T18:10:30Z

[-- Attachment #1: Type: text/plain, Size: 499 bytes --]

Frank de Lange wrote:
>
> On Fri, Jan 12, 2001 at 06:16:36PM +0100, Manfred Spraul wrote:
> > I would first concentrate on the differences between 2.2 and 2.4:
> >
> > Frank, could you try what happens with the NMI oopser disabled?
>
> Here's the results with nmi_watchdog=0
>
>
> After network hang (nmi_watchdog=0)
> ===================================
>

It still hangs.

Frank, I've attached a proposed kick_IOAPIC pin. Could you try it?
I'm rebooting with that patch right now.
--
Manfred

[-- Attachment #2: patch-frank --]
[-- Type: text/plain, Size: 1629 bytes --]

1) add to the end of io_apic.c:

static void print_line(struct IO_APIC_route_entry* entry)
{
printk(KERN_EMERG " %02x %03X %02X ",
0,
entry->dest.logical.logical_dest,
entry->dest.physical.physical_dest
);

printk("%1d %1d %1d %1d %1d %1d %1d %02X\n",
entry->mask,
entry->trigger,
entry->irr,
entry->polarity,
entry->delivery_status,
entry->dest_mode,
entry->delivery_mode,
entry->vector
);
}

void kick_IOAPIC_pin(int pin)
{
unsigned long flags;
struct IO_APIC_route_entry entry;

local_irq_save(flags);

*(((int *)&entry) + 1) = io_apic_read(0, 0x11 + 2 * pin);
*(((int *)&entry) + 0) = io_apic_read(0, 0x10 + 2 * pin);

printk(KERN_EMERG " NR Log Phy Mask Trig IRR Pol"
" Stat Dest Deli Vect: \n");
printk(KERN_EMERG "Before:\n");
print_line(&entry);

entry.trigger = 0;
io_apic_write(0, 0x11 + 2 * pin, *(((int *)&entry) + 1));
io_apic_write(0, 0x10 + 2 * pin, *(((int *)&entry) + 0));
udelay(10);
printk(KERN_EMERG "After switching to edge:\n");
print_line(&entry);

entry.trigger = 1;
io_apic_write(0, 0x11 + 2 * pin, *(((int *)&entry) + 1));
io_apic_write(0, 0x10 + 2 * pin, *(((int *)&entry) + 0));
udelay(10);
printk(KERN_EMERG "After switch back:\n");
print_line(&entry);

local_irq_restore(flags);
}

2) add to sysrq.c:
--- 2.4/drivers/char/sysrq.c Mon Dec 4 02:48:19 2000
+++ build-2.4/drivers/char/sysrq.c Fri Jan 12 18:37:57 2001
@@ -137,6 +137,9 @@
send_sig_all(SIGKILL, 1);
orig_log_level = 8;
break;
+ case 'q':
+ kick_IOAPIC_pin(19);
+
default: /* Unknown: help */
if (kbd)
printk("unRaw ");