Messages in this thread Patch in this message | | | Date | Thu, 29 Jun 2006 22:29:57 +0200 | From | Andreas Mohr <> | Subject | i8259.c dummy I/O operation? |
| |
Hi all,
I just wanted to direct attention to further somewhat wasteful aspects in kernel code ;)
Since this extra inb() is in IRQ handler hotpath (called at least a couple hundred times per second without dynticks patch), it hurts quite obviously, potentially with several hundred CPU cycles per I/O due to slow PIC access (haven't actually profiled it, though).
This dummy op can be found in i8259.c of i386/, x86_64/ and mips/.
There seem to be no adverse effects on three systems that I tested it on: - P4 HT - P3/700 - Athlon on VIA chipset
Comments? Further testing on various chipsets by more people would also be useful, I think... (however testing might be dangerous, of course, since it's a quite invasive change and might even corrupt data or so!)
Thanks,
Andreas Mohr
P.S.: the outb() change is just a minor comment correction...
diff -urN linux-2.6.17-mm4.orig/arch/i386/kernel/i8259.c linux-2.6.17-mm4.my/arch/i386/kernel/i8259.c --- linux-2.6.17-mm4.orig/arch/i386/kernel/i8259.c 2006-06-29 11:57:11.000000000 +0200 +++ linux-2.6.17-mm4.my/arch/i386/kernel/i8259.c 2006-06-29 21:17:33.000000000 +0200 @@ -191,13 +191,13 @@ cached_irq_mask |= irqmask; handle_real_irq: + /* we used to first do a dummy inb() on PIC_SLAVE_IMR/PIC_MASTER_IMR + here, but this doesn't seem to actually be necessary... */ if (irq & 8) { - inb(PIC_SLAVE_IMR); /* DUMMY - (do we need this?) */ outb(cached_slave_mask, PIC_SLAVE_IMR); outb(0x60+(irq&7),PIC_SLAVE_CMD);/* 'Specific EOI' to slave */ outb(0x60+PIC_CASCADE_IR,PIC_MASTER_CMD); /* 'Specific EOI' to master-IRQ2 */ } else { - inb(PIC_MASTER_IMR); /* DUMMY - (do we need this?) */ outb(cached_master_mask, PIC_MASTER_IMR); outb(0x60+irq,PIC_MASTER_CMD); /* 'Specific EOI to master */ } @@ -272,7 +272,7 @@ * out of. */ outb(0xff, PIC_MASTER_IMR); /* mask all of 8259A-1 */ - outb(0xff, PIC_SLAVE_IMR); /* mask all of 8259A-1 */ + outb(0xff, PIC_SLAVE_IMR); /* mask all of 8259A-2 */ return 0; } - 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/
| |