--- arch/i386/kernel/i8259.c.orig 2004-08-04 01:44:05.000000000 +0200 +++ arch/i386/kernel/i8259.c 2004-08-04 01:45:43.000000000 +0200 @@ -251,14 +251,18 @@ static void restore_ELCR(char *trigger) static void save_ELCR(char *trigger) { /* IRQ 0,1,2,8,13 are marked as reserved */ - trigger[0] = inb(0x4d0) & 0xF8; - trigger[1] = inb(0x4d1) & 0xDE; + trigger[0] = inb(0x4d0); + trigger[1] = inb(0x4d1); } static int i8259A_resume(struct sys_device *dev) { - init_8259A(0); + unsigned long flags; + init_8259A(0); + + spin_lock_irqsave(&i8259A_lock, flags); restore_ELCR(irq_trigger); + spin_unlock_irqrestore(&i8259A_lock, flags); return 0; }