lkml.org 
[lkml]   [2006]   [Jun]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
Subjecti8259.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/
\
 
 \ /
  Last update: 2006-06-29 22:32    [W:0.162 / U:0.156 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site