Subject: Re: port-xen/30977: FPU troubles
To: None <gnats-bugs@netbsd.org>
From: Paul Ripke <stix@stix.id.au>
List: port-xen
Date: 11/23/2005 08:15:04
I've finally got around to trying xen (NetBSD-3.0BETA, xen 2.0.7) and
have run into this PR in DOM0.
First sign was xearth coredumping on login. Next was only "clicking"
from xmms, and I've had xpdf core, too.
A little debugging shows that the FPU state is not being correctly
saved or restored during "some" context switches. The following code
appears to exhibit the behaviour reliably:
marvin:ksh$ cat fp2.c
#include <assert.h>
#include <pthread.h>
#include <stdio.h>
#include <time.h>
void *
runloop(void *p)
{
int i;
double fi;
i = 1;
while (1) {
fi = i;
if ((int)fi != i) {
printf("%9ld %9d %9d\n", clock(), i, (int)fi);
}
i++;
}
}
int
main(int argc, char **argv)
{
pthread_t a, b;
setlinebuf(stdout);
assert(pthread_create(&a, NULL, &runloop, NULL) == 0);
assert(pthread_create(&b, NULL, &runloop, NULL) == 0);
assert(pthread_join(a, NULL) == 0);
return 0;
}
marvin:ksh$ gcc -O -Wall -lpthread -o fp2 fp2.c
marvin:ksh$ ./fp2 | head
19 2810714 4887424
34 4782167 -2147483648
152 29109559 -2147483648
189 36046059 -2147483648
217 43217401 -2147483648
295 58190482 60223234
334 65918432 -2147483648
415 84428916 -2147483648
478 93211664 97457195
507 102074913 -2147483648
I've dug through NetBSD code (on the assumption xen is doing the
right thing), but I'm not 100% sure exactly what I'm looking for.
I guess this would be a nice bug to squash for 3.0 (assuming the
bug is in NetBSD).
Cheers,
--
Paul Ripke