Subject: port-i386/11432: microtime running backwards early in boot
To: None <gnats-bugs@gnats.netbsd.org>
From: Lennart Augustsson <augustss@glissando.sandburst.com>
List: netbsd-bugs
Date: 11/06/2000 14:10:26
>Number: 11432
>Category: port-i386
>Synopsis: microtime running backwards early in boot
>Confidential: no
>Severity: non-critical
>Priority: medium
>Responsible: port-i386-maintainer
>State: open
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Mon Nov 06 14:10:01 PST 2000
>Closed-Date:
>Last-Modified:
>Originator: Lennart Augustsson
>Release: NetBSD-current 2000-11-06
>Organization:
>Environment:
System: NetBSD glissando 1.5I NetBSD 1.5I (GLISSANDO) #2: Mon Nov 6 16:52:48 EST 2000 augustss@glissando:/usr/src/sys/arch/i386/compile/GLISSANDO i386
>Description:
Sometimes when you boot a kernel with a pchb with a random number
generator (82815 in my case) it prints a negative number for
Kb/s generated. The reason is that a later microtime() produces
a value which a less than an earlier microtime().
With a few printfs insert this can be observed:
pchb0: Intel 82815 Hub (rev. 0x02)
tv2 0,16186 tv1 0,18801
tv1 -1,997385
tv1 -1,-2615 -3059
pchb0: random number generator enabled, -3059Kb/s
Here's the code I used:
microtime(&tv1);
for (i = 0; i < 8192; i++) {
while ((bus_space_read_1(sc->sc_st, sc->sc_sh,
I82802_RNG_RNGST) &
I82802_RNG_RNGST_DATAV) == 0)
/* spin */;
(void) bus_space_read_1(sc->sc_st, sc->sc_sh,
I82802_RNG_DATA);
}
microtime(&tv2);
printf("tv2 %ld,%ld tv1 %ld,%ld\n", tv2.tv_sec, tv2.tv_usec, tv1.tv_sec, tv1.tv_usec);
timersub(&tv2, &tv1, &tv1);
printf("tv1 %ld,%ld\n", tv1.tv_sec, tv1.tv_usec);
if (tv1.tv_sec)
tv1.tv_usec +=
1000000 * tv1.tv_sec;
printf("tv1 %ld,%ld %ld\n", tv1.tv_sec, tv1.tv_usec, 8 * 1000000 / tv1.tv_usec);
printf("%s: random number generator enabled, %ldKb/s\n",
sc->sc_dev.dv_xname, 8 * 1000000 / tv1.tv_usec);
>How-To-Repeat:
Reboot a few times and observe the value.
>Fix:
I don't know. Perhaps some initialization is needed to make
microtime() behave.
>Release-Note:
>Audit-Trail:
>Unformatted: