Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Path: utzoo!watmath!clyde!burl!ulysses!bellcore!decvax!decwrl!pyramid!hplabs!tektronix!teklds!copper!stevesu From: stevesu@copper.UUCP Newsgroups: net.unix-wizards Subject: Re: busy looping in kernel, time question Message-ID: <291@copper.UUCP> Date: Sun, 20-Apr-86 17:28:54 EST Article-I.D.: copper.291 Posted: Sun Apr 20 17:28:54 1986 Date-Received: Wed, 23-Apr-86 12:40:25 EST References: <234@Shasta.ARPA> <14809@onfcanim.UUCP> Organization: Tektronix, Inc., Beaverton, OR Lines: 72 In article <234@Shasta.ARPA> alex@lancelot writes: > > Assume I want to busy loop in the kernel for 100 milliseconds, how >many times (approx) should I go around a loop which increments an int? A fixed-time busy-wait is okay, but everybody should beware of busy-waits waiting for something to happen. Some devices (most notably certain floppy disk controllers -- why is is that everything about floppy disks is unilaterally disgusting) require that you write something to a register, wait for a bit to come high saying that the first bit has been digested, after which you can write some more information. This is typically done with code like while(ryaddr->ryics & RY_TR) == 0); This code comes from a particularly noxious device driver we have for a horrid floppy controller whose manufacturer I won't mention since I'm not feeling libelous today. Under certain poorly understood circumstances, the use of these floppy drives follows the following novel course of events: 1. User inserts disk, forgetting to install write-enable sticker. 2. User attempts to write to disk 3. User's terminal hangs 4. User can't get his terminal back, with control-C, control-\, or kill -9 from another terminal, because the process is sleeping down in the device driver and nothing, not even root, can kill it 5. User gives up and tries to get his floppy disk back. The door to the drive won't open... 6. User discovers that by powering down the floppy drive, the drive will relinquish his disk 7. User wonders why, when he emerges from the room containing the floppy drive, all the other users are complaining that the machine seems to be dead 8. The kernel is in fact in an infinite loop at high interrupt priority, waiting for the TR bit which is now never going to come, even when the floppy drive is powered back on, because the drive will have forgotten that it was in the middle of a transaction. These difficulties could be avoided if peripheral manufacturers would condescend to market controller boards with sane interfaces. Until then, though, if you have to write a device driver for a demented controller, please break out of the busy-wait loop after 100 iterations or so and return EIO or something. Yeah, you may dump the floppy user on the floor, but he deserves it for using floppies in the first place, and anyway he'll probably be able to get his disk out without a screwdriver, and all the other users won't have to wait for the machine to be manually halted and rebooted. Steve Summit tektronix!copper!stevesu P.S. Join the Coalition to Banish Floppies! They're slow; they don't hold enough data; they're unreliable; they have universally disgusting controllers; and people who use them bring the machine to its knees so I can't get any work done. Everybody should use 9-track magtape (and none of those grotty streaming drives, either). P.P.S. I know floppies and streamers are cheap. In both senses of the word. "You gets what you pays for."