linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "David P. Reed" <dpreed@reed.com>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Rene Herman <rene.herman@keyaccess.nl>,
	Alan Cox <alan@lxorguk.ukuu.org.uk>, Ingo Molnar <mingo@elte.hu>,
	Islam Amer <pharon@gmail.com>,
	hpa@zytor.com, Pavel Machek <pavel@ucw.cz>,
	Ingo Molnar <mingo@redhat.com>, Andi Kleen <andi@firstfloor.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	Linux Kernel <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] x86: provide a DMI based port 0x80 I/O delay override
Date: Sun, 30 Dec 2007 16:20:19 -0500	[thread overview]
Message-ID: <47780B93.4050606@reed.com> (raw)
In-Reply-To: <alpine.LFD.1.00.0712301158410.32517@woody.linux-foundation.org>

I am so happy that there will be a way for people who don't build their 
own kernels to run Linux on their HP and Compaq laptops that have 
problems with gazillions of writes to port 80, and I'm also happy that 
some of the strange driver code will be cleaned up over time.  Thank you 
all.  Some thoughts you all might consider, take or leave, in this 
process, from an old engineering manager who once had to worry about QA 
for software on nearly every personal computer model in the 1980-1992 
period:

You know, there is a class of devices that are defined to use port 
0x80...  it's that historically useful class of devices that show/record 
the POST diagnostics.   It certainly was not designed for "delay" 
purposes.   In fact, some of those same silly devices are still used in 
industry during manufacturing test.   I wonder what would happen if 
Windows were not part of manufacturing test, and instead Linux were the 
"standard" for some category of machines...

When I was still working at Lotus in the late '80's, when we still 
supported machines like 286's, there were lots of problems with timing 
loops in drivers in applications (even Win 3.0 had some in hard disk 
drivers, as did some of our printer drivers, ...), as clock speeds 
continued to ramp.  There were major news stories of machines that 
"crashed when xyz application or zyx peripheral were added".  It was 
Intel, as I recall, that started "publicly" berating companies in the PC 
industry for using the "two short jumps" solutions, and suggesting that 
they measure the processor speed at bootup, using the BIOS standard for 
doing that with the int 15 BIOS elapsed time calls, and always use 
"calibrated" timing loops.   Which all of us who supported device 
drivers started to do  (remember, apps had device drivers in those days 
for many devices that talked directly with the registers).

I was impressed when I dug into Linux eventually, that this operating 
system "got it right" by measuring the timing during boot and creating a 
udelay function that really worked!

So I have to say, that when I was tracing down the problem that 
originally kicked off this thread, which was that just accessing the RTC 
using the standard CMOS_READ macros in a loop caused a hang, that these 
"outb al,80h" things were there.   And I noticed your skeptical comment 
in the code, Linus.  Knowing that there was never in any of the 
documented RTC chipsets a need for a pause between accesses (going back 
to my days at Software Arts working on just about every old machine 
there was...) I changed it on a lark to do no pause at all.   And my 
machine never hung...

Now what's interesting is that the outb to port 80 is *faster* than an 
outb to an unused port, on my machine.  So there's something there - 
actually accepting the bus transaction.   In the ancient 5150 PC, 80 was 
unused because it was the DMA controller port that drove memory refresh, 
and had no meaning.

Now my current hypothesis (not having access to quanta's design specs 
for a board they designed and have shipped in quantity, or having taken 
the laptop apart recently) is that there is logic there on port 80, 
doing something.  Perhaps even "POST diagnostic recording" as every PC 
since the XT has supported... perhaps supporting post-crash 
dignostics...   And that that something has a buffer, perhaps even in 
the "Embedded Controller" that may need emptying periodically.   It 
takes several tens of thousands of "outb" to port 80 to hang the 
hardware solid - so something is either rare or overflowing.  In any 
case, if this hypothesis is correct - the hardware may have an erratum, 
but the hardware is doing a very desirable thing - standardizing on an 
error mechanism that was already in the "standard" as an option...  It's 
Linux that is using a "standard" in a wrong way (a diagnostic port as a 
delay).

So I say all this, mainly to point out that Linux has done timing loops 
right (udelay and ndelay) - except one place where there was some 
skepticism expressed, right there in the code.   Linus may have some 
idea why it was thought important to do an essential delay with a bus 
transaction that had uncertain timing.   My hypothesis is that 
"community" projects have the danger of "magical theories" and 
"coolness" overriding careful engineering design practices.

Cleaning up that "clever hack" that seemed so good at the time is hugely 
difficult, especially when the driver writer didn't write down why he 
used it.  

Thus I would suggest that the _p functions be deprecated, and if there 
needs to be a timing-delay after in/out instructions, define 
in_pause(port, nsec_delay) with an explicit delay.   And if the delay is 
dependent on bus speeds, define a bus-speed ratio calibration.

Thus in future driver writing, people will be forced to think clearly 
about what the timing characteristics of their device on its bus must 
be.   That presupposes that driver writers understand the timing 
issues.   If they do not, they should not be writing drivers.






  parent reply	other threads:[~2007-12-30 21:21 UTC|newest]

Thread overview: 186+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-12-30  3:34 [PATCH] x86: provide a DMI based port 0x80 I/O delay override Rene Herman
2007-12-30  9:30 ` Linus Torvalds
2007-12-30 12:48   ` Andi Kleen
2007-12-30 13:05     ` Ingo Molnar
2007-12-30 16:08       ` Andi Kleen
2007-12-30 16:28         ` Ingo Molnar
2007-12-30 18:21           ` Andi Kleen
2007-12-30 13:03   ` Ingo Molnar
2007-12-30 14:14   ` Rene Herman
2007-12-30 14:47   ` Alan Cox
2007-12-30 15:28     ` Ingo Molnar
2007-12-30 15:38       ` Alan Cox
2007-12-30 16:01         ` Ingo Molnar
2007-12-30 16:48           ` Alan Cox
2007-12-30 17:08             ` Ingo Molnar
2007-12-30 18:14             ` Rene Herman
2007-12-30 18:39               ` Alan Cox
2007-12-30 19:33                 ` Rene Herman
2007-12-30 20:00                   ` Linus Torvalds
2007-12-30 20:09                     ` Rene Herman
2007-12-30 21:20                     ` David P. Reed [this message]
2007-12-30 21:36                       ` Alan Cox
2007-12-30 23:14                         ` David P. Reed
2007-12-31  0:23                           ` H. Peter Anvin
2007-12-31 11:59                             ` Alan Cox
2007-12-31 18:19                               ` H. Peter Anvin
2007-12-31 12:23               ` Alan Cox
2007-12-31 14:35                 ` Rene Herman
2007-12-31 15:56                   ` Alan Cox
2007-12-31 20:22                     ` Ondrej Zary
2007-12-31 21:25                       ` Alan Cox
2007-12-31 21:47                         ` H. Peter Anvin
2007-12-31 23:24                           ` Alan Cox
2007-12-31 23:41                             ` H. Peter Anvin
2008-01-02  3:01                     ` Rene Herman
2007-12-30 17:10         ` Juergen Beisert
2007-12-30 20:50           ` H. Peter Anvin
2007-12-31  1:03             ` David P. Reed
2007-12-31  1:40               ` H. Peter Anvin
2007-12-30 15:47       ` Rene Herman
2007-12-30 16:07         ` Ingo Molnar
2007-12-30 16:27           ` Rene Herman
2007-12-30 17:06             ` Ingo Molnar
2007-12-30 17:54               ` Rene Herman
2007-12-30 18:29               ` Alan Cox
2007-12-30 18:43                 ` Andi Kleen
2007-12-30 20:46                 ` Ingo Molnar
2007-12-30 21:07                   ` Rene Herman
2007-12-30 21:25                     ` Ingo Molnar
2007-12-30 21:29                   ` Alan Cox
2007-12-30 22:03                     ` Ingo Molnar
2007-12-31 13:11                   ` Pavel Machek
2008-01-01 16:48                     ` Ingo Molnar
2007-12-30 18:40         ` Linus Torvalds
2007-12-30 20:34           ` Ingo Molnar
2007-12-30 21:28             ` Alan Cox
2007-12-30 21:54               ` Ingo Molnar
2007-12-30 21:13           ` Alan Cox
2007-12-31 15:29             ` Christer Weinigel
2007-12-31 13:21           ` Pavel Machek
2007-12-31 12:29             ` Alan Cox
     [not found] <9BdU5-1YW-9@gated-at.bofh.it>
     [not found] ` <9BeZN-3Gf-5@gated-at.bofh.it>
     [not found]   ` <9BnTB-1As-31@gated-at.bofh.it>
     [not found]     ` <9BrX4-8go-1@gated-at.bofh.it>
     [not found]       ` <9BuBG-4eR-51@gated-at.bofh.it>
     [not found]         ` <9BvRd-6aL-71@gated-at.bofh.it>
     [not found]           ` <9GRQW-1DX-13@gated-at.bofh.it>
     [not found]             ` <9GSah-23W-1@gated-at.bofh.it>
     [not found]               ` <9GSDy-2GD-23@gated-at.bofh.it>
     [not found]                 ` <9GTpK-40d-15@gated-at.bofh.it>
     [not found]                   ` <9GUvy-5H2-11@gated-at.bofh.it>
     [not found]                     ` <9GVKU-7SS-25@gated-at.bofh.it>
2008-01-07 19:38                       ` Bodo Eggert
2008-01-07 19:46                         ` H. Peter Anvin
2008-01-07 22:02                           ` Bodo Eggert
2008-01-07 22:10                             ` H. Peter Anvin
2008-01-07 22:27                               ` Bodo Eggert
2008-01-07 22:59                                 ` Rene Herman
2008-01-07 23:24                                   ` H. Peter Anvin
2008-01-07 23:26                                     ` Rene Herman
2008-01-08  0:10                                       ` [linux-kernel] " David P. Reed
2008-01-09 21:01                                         ` Matthieu castet
2008-01-08 12:51                                       ` Bodo Eggert
2008-01-08 14:09                                         ` Rene Herman
2008-01-08 14:31                                         ` Alan Cox
2008-01-07 23:25                             ` Alan Cox
2008-01-08 13:17                               ` Bodo Eggert
2008-01-08 14:38                                 ` Alan Cox
2008-01-08  3:15                         ` Christer Weinigel
     [not found] <fa.PuxU73ceCfHAUeWLO4W21Zbrm7A@ifi.uio.no>
     [not found] ` <fa.ipKZdmvkNYmQ40C0cO+2u3eYohw@ifi.uio.no>
     [not found]   ` <fa.ppsa4qOLo1V8UlDNTucnaqIJmKA@ifi.uio.no>
     [not found]     ` <fa.3IG7z0AfHuLo9eQjn7Gkl/+/lnA@ifi.uio.no>
     [not found]       ` <fa.slc2tTnUBrTGO2aTi/C5UGHEEEM@ifi.uio.no>
     [not found]         ` <fa.8g+KfLLge6wS5cEnKhZJmdkIVAI@ifi.uio.no>
2007-12-30 18:22           ` Robert Hancock
     [not found]       ` <fa.XY5q1SY4QX+yjnE6p8T3kbTt/8I@ifi.uio.no>
     [not found]         ` <fa.KEBfnq5vGkAJSEhZSx7+yy+Hdbs@ifi.uio.no>
     [not found]           ` <fa.MLKgXLxgzIKzm4bQXjEOqg9oDwU@ifi.uio.no>
     [not found]             ` <fa.KbCnGLPlUEYe/Ibajd+hTY7A7Qw@ifi.uio.no>
2007-12-31 18:21               ` Robert Hancock
     [not found] <9FXbU-3M4-11@gated-at.bofh.it>
     [not found] ` <9G2Om-4hg-1@gated-at.bofh.it>
     [not found]   ` <9G7O3-3O2-7@gated-at.bofh.it>
     [not found]     ` <9G8qN-4TX-13@gated-at.bofh.it>
2007-12-30 17:50       ` Bodo Eggert
2007-12-30 18:10         ` Ingo Molnar
2007-12-30 20:56           ` H. Peter Anvin
2007-12-30 21:00             ` Ingo Molnar
2007-12-30 21:32               ` Bodo Eggert
2007-12-30 21:33               ` Alan Cox
2007-12-30 22:02                 ` Ingo Molnar
2007-12-30 21:44               ` H. Peter Anvin
2007-12-30 21:58                 ` Rene Herman
2007-12-30 20:53         ` H. Peter Anvin
2007-12-30 21:31           ` Alan Cox
2007-12-31 14:39             ` Bodo Eggert
2007-12-31 15:56               ` Alan Cox
     [not found] <469578CD.3080609@reed.com>
     [not found] ` <1184216528.12353.203.camel@chaos>
     [not found]   ` <1184218962.12353.209.camel@chaos>
     [not found]     ` <46964352.7040301@reed.com>
     [not found]       ` <1184253339.12353.223.camel@chaos>
     [not found]         ` <469697C6.50903@reed.com>
     [not found]           ` <1184274754.12353.254.camel@chaos>
2007-12-14  2:59             ` [PATCH] x86_64: fix problems due to use of "outb" to port 80 on some AMD64x2 laptops, etc David P. Reed
2007-12-14 13:15               ` Ingo Molnar
2007-12-14 18:02                 ` H. Peter Anvin
2007-12-14 21:06                   ` Pavel Machek
2007-12-14 22:13                     ` H. Peter Anvin
2007-12-14 23:29                       ` Alan Cox
2007-12-15  8:08                         ` Paul Rolland
2007-12-15  8:13                           ` Rene Herman
2007-12-15 20:27                             ` H. Peter Anvin
2007-12-15 23:26                               ` [PATCH] x86: " Rene Herman
2007-12-15 23:51                                 ` H. Peter Anvin
2007-12-16 13:15                                   ` [PATCH] x86: provide a DMI based port 0x80 I/O delay override Rene Herman
2007-12-16 15:22                                     ` Ingo Molnar
2007-12-17  1:43                                       ` Rene Herman
2007-12-17  2:05                                         ` H. Peter Anvin
2007-12-17  2:19                                           ` Rene Herman
2007-12-17  3:35                                             ` H. Peter Anvin
2007-12-17 13:02                                               ` Rene Herman
2007-12-17 17:14                                                 ` H. Peter Anvin
2007-12-17 19:43                                                   ` David P. Reed
2007-12-17 19:55                                                     ` H. Peter Anvin
2007-12-17 21:02                                                       ` David P. Reed
2007-12-17 21:17                                                         ` H. Peter Anvin
2007-12-17 21:25                                                     ` Alan Cox
2008-01-01 15:57                                                       ` David P. Reed
2008-01-01 21:16                                                         ` H. Peter Anvin
2008-01-01 15:59                                                       ` David P. Reed
2008-01-01 16:15                                                         ` Alan Cox
2008-01-01 16:43                                                           ` Ingo Molnar
2008-01-01 17:32                                                             ` Alan Cox
2008-01-01 18:45                                                               ` Ingo Molnar
2008-01-01 20:14                                                                 ` Christer Weinigel
2008-01-01 21:13                                                                   ` Alan Cox
2008-01-01 21:07                                                                 ` Alan Cox
2008-01-02 10:04                                                                   ` Ingo Molnar
2008-01-02 13:47                                                                     ` Alan Cox
2008-01-02 15:35                                                                       ` Rene Herman
2008-01-02 15:50                                                                         ` Rene Herman
2008-01-01 17:32                                                             ` Christer Weinigel
2008-01-01 18:46                                                               ` Ingo Molnar
2008-01-01 19:35                                                                 ` Christer Weinigel
2008-01-01 19:59                                                                   ` Rene Herman
2008-01-01 20:55                                                                     ` Christer Weinigel
2008-01-01 21:24                                                                       ` H. Peter Anvin
2008-01-01 21:01                                                                   ` Ingo Molnar
2008-01-01 21:26                                                                     ` Alan Cox
2008-01-01 21:42                                                                     ` Christer Weinigel
2008-01-01 21:42                                                                       ` Rene Herman
2008-01-01 21:50                                                                       ` H. Peter Anvin
2008-01-01 21:21                                                                   ` H. Peter Anvin
2008-01-01 23:05                                                                     ` Christer Weinigel
2008-01-01 23:12                                                                       ` Alan Cox
2008-01-02  0:23                                                                         ` Christer Weinigel
2008-01-02 10:00                                                                     ` Ingo Molnar
2008-01-01 17:32                                                           ` David P. Reed
2008-01-01 17:38                                                             ` Alan Cox
2008-01-01 21:15                                                           ` H. Peter Anvin
2008-01-01 21:35                                                             ` Rene Herman
2008-01-01 21:44                                                               ` H. Peter Anvin
2008-01-01 22:35                                                                 ` Rene Herman
2008-01-01 22:39                                                                   ` H. Peter Anvin
2008-01-01 23:11                                                                     ` Rene Herman
2008-01-02  0:25                                                                       ` Rene Herman
2008-01-02  0:55                                                                       ` Christer Weinigel
2008-01-02  1:00                                                                         ` Rene Herman
2008-01-02  2:27                                                                         ` H. Peter Anvin
2008-01-09 17:27                                                                 ` Maciej W. Rozycki
2008-01-09 18:18                                                                   ` H. Peter Anvin
2008-01-01 17:31                                                         ` Pavel Machek
2008-01-01 17:33                                                           ` David P. Reed
2007-12-17  4:09                                             ` H. Peter Anvin
2007-12-17 10:57                                         ` Ingo Molnar
2007-12-17 11:29                                           ` Ingo Molnar
2007-12-17 13:34                                             ` David P. Reed
2007-12-17 12:15                                           ` Rene Herman
2007-12-17 13:09                                             ` Ingo Molnar
2007-12-17 13:22                                               ` Rene Herman
2007-12-17 13:31                                                 ` Pavel Machek
2007-12-17 13:31                                                   ` Rene Herman
2007-12-17 13:32                                                 ` David P. Reed
2007-12-17 13:36                                                   ` Rene Herman
2007-12-17 14:39                                                   ` Ingo Molnar
2007-12-17 16:12                                                     ` Alan Cox
2007-12-17 16:48                                                       ` Ingo Molnar
2007-12-17 20:48                                                       ` Rene Herman
2007-12-17 20:57                                                         ` H. Peter Anvin
2007-12-17 21:33                                                           ` Rene Herman
2007-12-17 21:40                                                             ` H. Peter Anvin
2007-12-17 21:46                                                               ` Ingo Molnar
2007-12-17 21:50                                                               ` Rene Herman
2007-12-17 21:41                                                         ` Ingo Molnar
2007-12-17 21:47                                                           ` Rene Herman
2007-12-17 21:56                                                             ` Ingo Molnar
2007-12-17 22:01                                                               ` Rene Herman
2007-12-17 22:18                                                                 ` David P. Reed
2007-12-17 19:38                                                     ` David P. Reed
2007-12-17 19:55                                                       ` H. Peter Anvin
2007-12-17 21:28                                                       ` Ingo Molnar
2007-12-16 21:42                                     ` H. Peter Anvin
2007-12-17  1:48                                       ` Rene Herman
2007-12-17  1:53                                         ` H. Peter Anvin
2007-12-16 23:12                                     ` David P. Reed
2007-12-17  1:56                                       ` Rene Herman
2007-12-17  2:04                                         ` H. Peter Anvin
2007-12-17  2:15                                           ` Rene Herman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=47780B93.4050606@reed.com \
    --to=dpreed@reed.com \
    --cc=alan@lxorguk.ukuu.org.uk \
    --cc=andi@firstfloor.org \
    --cc=hpa@zytor.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=mingo@redhat.com \
    --cc=pavel@ucw.cz \
    --cc=pharon@gmail.com \
    --cc=rene.herman@keyaccess.nl \
    --cc=tglx@linutronix.de \
    --cc=torvalds@linux-foundation.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).