>>> On 12.04.14 at 07:56, <kys@xxxxxxxxxxxxx> wrote: > --- a/arch/x86/kernel/i8259.c > +++ b/arch/x86/kernel/i8259.c > @@ -299,11 +299,30 @@ static void unmask_8259A(void) > static void init_8259A(int auto_eoi) > { > unsigned long flags; > + unsigned char probe_val = ~(1 << PIC_CASCADE_IR); > + unsigned char new_val; > > i8259A_auto_eoi = auto_eoi; > > raw_spin_lock_irqsave(&i8259A_lock, flags); > > + /* > + * Check to see if we have a PIC. > + * Mask all except the cascade and read > + * back the value we just wrote. If we don't > + * have a PIC, we will read 0xff as opposed to the > + * value we wrote. > + */ > + outb(0xff, PIC_SLAVE_IMR); /* mask all of 8259A-2 */ > + outb(probe_val, PIC_MASTER_IMR); > + new_val = inb(PIC_MASTER_IMR); > + if (probe_val != new_val) { > + printk(KERN_INFO "Using NULL legacy PIC\n"); > + legacy_pic = &null_legacy_pic; > + raw_spin_unlock_irqrestore(&i8259A_lock, flags); > + return; > + } > + > outb(0xff, PIC_MASTER_IMR); /* mask all of 8259A-1 */ > outb(0xff, PIC_SLAVE_IMR); /* mask all of 8259A-2 */ And I guess you should delete this last line now that this is already being done slightly earlier - having it done twice is possibly going to confuse future readers (in that they might ask themselves or others whether this really needs to be done twice). Jan _______________________________________________ devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel