Re: [PATCH] x86: provide a DMI based port 0x80 I/O delay override.

From: Ingo Molnar
Date: Tue Jan 01 2008 - 13:52:31 EST



* Alan Cox <alan@xxxxxxxxxxxxxxxxxxx> wrote:

> > there strong counter-arguments against doing the clean thing and
> > adding an udelay(2) (or udelay(1)) to replace those _p() uses in ISA
> > drivers?
>
> #1 udelay has to be for the worst case bus clock (6MHz) while the
> #device may be at 10Mhz or even 12MHz ISA. So it slows it down stuff
> unneccessarily- and stuff that really really is slow enough as is.

udelay is supposed to be reliable. If someone runs a new kernel and has
no TSC (which might happen even on modern hardware or with notsc) _and_
finds that udelay is not calibrated well enough then that's a kernel bug
we want to fix.

> #2 Most of the ancient wind up relics with ISA bus don't have a tsc so
> their udelay value is kind of iffy.

iffy in what way? Again, we might be hiding real udelay bugs.

> #3 Not changing it is the lowest risk for a lot of the old ISA code
> #that never occurs on newer boxes

Not changing the kernel _at all_ is what is the "lowest risk" option. If
the kernel is changed, it should be tested - and if we have a buggy
udelay, that should be fixed - because it could cause many other bugs in
other drivers.

yes, there are always risks in changing something, but using udelay is a
common-sense consolidation of code.

> > _will_ change a bit, no matter what we do. Alignments change, the
> > compiler output will change (old compilers get deprecated so a new
> > compiler might have to be picked), cache effects change - and this
> > is inevitable. The important thing is to not eliminate the delays -
> > but we sure dont have to keep them cycle accurate (we couldnt even
> > if we wanted to). The only way to get the _exact same_ behavior is
> > to not change the kernel at all.
>
> ISA bus cycles are *slow*, the subtle processor cache and gcc
> triggered timing changes are lost in the noise.

gcc triggered timing changes can easily add up to a LOT more -
especially if a loop is involved and especially on older hardware.
Remember, 1 microsecond is just a handful of instructions on real old
hardware. The kernel's timings are _not_ immutable, never were, never
will be.

Ingo
--
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/