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
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 ");

Reply via email to