*BSD News Article 7207


Return to BSD News archive

Path: sserve!manuel.anu.edu.au!munnari.oz.au!sgiblab!darwin.sura.net!paladin.american.edu!news.univie.ac.at!hp4at!mcsun!sunic!chalmers.se!cs.chalmers.se!augustss
From: augustss@cs.chalmers.se (Lennart Augustsson)
Newsgroups: comp.unix.bsd
Subject: [386BSD] DELAY in isa.c
Message-ID: <1992Oct29.220653.4520@cs.chalmers.se>
Date: 29 Oct 92 22:06:53 GMT
Sender: news@cs.chalmers.se (News administrator)
Organization: Dept. of CS, Chalmers, Sweden
Lines: 41


Is the definition of DELAY in i386/isa/isa.c really correct?

It reads

DELAY(n) {
	int tick = getit(0,0) & 1;

	while (n--) {
		/* wait approximately 1 micro second */
		while (tick == getit(0,0) & 1) ;
                               ^^^^^^^^^^^^^^
		
		tick = getit(0,0) & 1;
	}
}

Shouldn't that be

		while (tick == (getit(0,0) & 1)) ;

In C == binds tighter than &.  So doing the & with 1 is a noop,
and I suspect this is not what was intended.  (Looping while the LSB
of the timer remain intact seems much more sensible.)

BTW, I would have written the whole thing as

DELAY(n) {
	int tick;

	while (n--) {
		tick = getit(0,0) & 1;
		/* wait approximately 1 micro second */
		while (tick == (getit(0,0) & 1)) 
			;
	}
}
-- 

	-- Lennart Augustsson
[This signature is intentionally left blank.]