Re: RFC: outb 0x80 in inb_p, outb_p harmful on some modern AMD64 with MCP51 laptops

H. Peter Anvin
2007-12-11T01:47:19Z

David Newall wrote:
> H. Peter Anvin wrote:
>> David Newall wrote:
>>> Where did the 8us delay come from? The documentation and source is
>>> careful not to say how long the delay is. Would changing it to, say
>>> 1us, be technically wrong? Is code that requires 8us correct?
>>
>> I think a single ISA bus transaction is 1 µs, so two of them back to
>> back should be 2 µs, not 8 µs...
>
> Exactly. You think it's 2us, but the documentation doesn't say. The _p
> functions are generic inasmuch as they provide an unspecified delay.
> Drivers which work across platforms, and which use _p, therefore have
> different delays on different platforms. Should the length of the delay
> be unimportant? I wouldn't have thought so. If it is important, does
> that mean that such drivers are buggy on some platforms?
>

What it specifically does is it generates a delay which is proportional
to the ISA/LPC clock.

> I really *hate* the idea that access to non-present hardware is used to
> generate a delay. That sucks so badly. It's worthy of a school-aged
> hacker, not of a world-leading operating system. It's so not
> best-practice that it's worst-practice.
>

Perhaps you do, but it's the de facto standard on the platform. Every
BIOS uses the same technique, because it works.

*Now*, the real question is how many drivers actually need these delays.
My guess is most don't at all.

-hpa