v2.6.34: IDE on IRQ15 starving Serial on IRQ10, not on v2.4

From: Matteo Fortini
Date: Wed Oct 20 2010 - 06:40:57 EST


Hi,
we were having serial buffer overruns on a 4800bps 16550A with a Geode GX1 SBC,
the serial port is on IRQ10, so it should have higher priority than IDE (which is on IRQ15).

The PIC is in XT-PIC-XT mode, we have no APIC unfortunately.

The overruns are triggered easily with a dd if=/dev/hda of=/dev/null

IDE is a CF card using PIO mode 4, no DMA enabled.

We tried various build options, like preemption etc., and we tried both ide and libata.

We traced this down to the fact that the IDE subsystem is keeping the serial IRQ pending for the whole max request time, which is 256 requests in our current setup.

We fixed it by changing the value at drivers/ide/ide-probe.c:751 from 256 to e.g. 32, which gave the IDE disk less time to keep the others pending, but we feel this could be some other issue.

The unmaskirq option as in hdparm -u1 /dev/hda was not fixing the problem, and changing the transfer mode to 32bit w/sync didn't either.

The strange thing is that the behavior is completely different in Linux 2.4.x: we can see with a scope that the IDE request is continuously interrupted by the serial port, which should be the default with the 8259 PIC.

Thank you,
Matteo
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/