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

Andi Kleen
2007-12-07T10:45:12Z

"David P. Reed" <dpreed@reed.com> writes:
>
> ANy help/suggestions?

Use a variable for the port and and do a early quirk to change
the port to something safe on your chipset?

Ok there might be code using outb_p() before the early quirks,
but should be possible to find using instrumentation.

Also the port assignment might not be chipset specific, but BIOS
specific, then you would need to match the DMI identifier. The
disadvantage of that is that there are usually other BIOS
with other identifiers but the same problem around.

> Changing the delay instruction sequence from the outb to short jumps
> might be the safe thing. But Linus, et al. may have experience with
> that on other architectures like older Pentiums etc.

I don't think that makes sense to do on anything modern. The trouble
is that the jumps will effectively execute near "infinitely fast" on any
modern CPU compared to the bus. But the delay really needs to be something
that is about IO port speed. Ok in theory you could try to measure
a outb using RDTSC and then use udelay, but first you would need
a safe port for that already and then RDTSC is not necessarily constant.

-Andi