home *** CD-ROM | disk | FTP | other *** search
- Newsgroups: comp.unix.bsd
- Path: sparky!uunet!elroy.jpl.nasa.gov!ames!sgi!rigden.wpd.sgi.com!rpw3
- From: rpw3@rigden.wpd.sgi.com (Rob Warnock)
- Subject: Re: Possable pccons.c bug in 0.1
- Message-ID: <ou7s85c@sgi.sgi.com>
- Sender: rpw3@rigden.wpd.sgi.com
- Organization: Silicon Graphics, Inc. Mountain View, CA
- Date: Sun, 23 Aug 1992 11:37:52 GMT
- Lines: 44
-
- veit@du9ds3.uni-duisburg.de writes:
- +---------------
- | (Josh Osborne) writes:
- | > was = *cp;
- | > *cp = (u_short) 0xA55A;
- | > if (*cp != 0xA55A) {
- | >I *think* it looks like the if should be
- | > if (was != 0xA55A) ...
- |
- | "was" saves the old value at the address "cp" is pointing to. It is
- | restored in the else path if there is RAM at this address. With a
- | Hercules card, there is none there.
- | The only problem that might be there is that the cc must be prevented to
- | put the value "*cp" into a register (after storing it). This might be done
- | by making "cp" "volatile".
- +---------------
-
- There's another potential bug with this style of code, which is somewhat
- hardware-dependent, but more & more common these days. Just as such code
- might fail to detect the missing RAM in the absence of "volatile u_short *cp",
- so also it is that in machines that use mostly CMOS logic instead of TTL
- (or even *with* TTL, in very fast machines) it is possible that the value
- 0xA55A is still "floating" on the CPU bus or the device's internal bus, and
- the "if (*cp != 0xA55A)" will read back the *floating* value rather than
- some "pulled-up" all 1's or "pulled-down" all 0's.
-
- That is, with fast CMOS logic, you can't presume *anything* about which way
- *if any* busses will be "pulled" when they are not actively driven. This is
- especially true if the instructions to do the test are in the cache, or were
- pre-fetched from memory before the "*cp = (u_short) 0xA55A;" was done. I have
- seen values "float" on data busses for as long as several dozen cycles after
- the last active tri-state driver shut off!
-
- Kernel programmers, be warned!
-
-
- -Rob
-
- -----
- Rob Warnock, MS-9U/510 rpw3@sgi.com
- Silicon Graphics, Inc. (415)390-1673
- 2011 N. Shoreline Blvd.
- Mountain View, CA 94043
-
-