Subject: Re: port-xen/30977: FPU troubles
To: None <bouyer@netbsd.org, gnats-admin@netbsd.org,>
From: Manuel Bouyer <bouyer@antioche.eu.org>
List: netbsd-bugs
Date: 01/03/2006 20:25:03
The following reply was made to PR port-xen/30977; it has been noted by GNATS.

From: Manuel Bouyer <bouyer@antioche.eu.org>
To: Paul Ripke <stix@stix.id.au>
Cc: Quentin Garnier <cube@cubidou.net>, gnats-bugs@NetBSD.org,
	port-xen@NetBSD.org
Subject: Re: port-xen/30977: FPU troubles
Date: Tue, 3 Jan 2006 21:23:43 +0100

 --+HP7ph2BbKc20aGI
 Content-Type: text/plain; charset=us-ascii
 Content-Disposition: inline
 
 On Tue, Jan 03, 2006 at 09:21:52PM +0100, Manuel Bouyer wrote:
 > On Mon, Dec 19, 2005 at 09:34:01AM +1100, Paul Ripke wrote:
 > > OK, I've had a closer look at this, and come up with the included patch,
 > > which appears to work fine for me, with threaded and non-threaded 
 > > programs.
 > > I can't repeat the behaviour of the FPU state being not being restored,
 > > restored to the wrong thread, or wiped.
 > 
 > This is great, many thanks ! I commited the attached patch, which
 
  here is the patch
 
 -- 
 Manuel Bouyer <bouyer@antioche.eu.org>
      NetBSD: 26 ans d'experience feront toujours la difference
 --
 
 --+HP7ph2BbKc20aGI
 Content-Type: text/plain; charset=us-ascii
 Content-Disposition: attachment; filename="xen.diff"
 
 Index: npx.c
 ===================================================================
 RCS file: /cvsroot/src/sys/arch/xen/i386/npx.c,v
 retrieving revision 1.6
 diff -u -r1.6 npx.c
 --- i386/npx.c	24 Dec 2005 20:07:48 -0000	1.6
 +++ i386/npx.c	3 Jan 2006 19:09:33 -0000
 @@ -146,7 +146,7 @@
  #define	stts()			lcr0(rcr0() | CR0_TS)
  #else
  #define	clts()
 -#define	stts()			HYPERVISOR_fpu_taskswitch()
 +#define	stts()
  #endif
  
  int npxdna(struct cpu_info *);
 @@ -749,7 +749,7 @@
  
  	oci = l->l_addr->u_pcb.pcb_fpcpu;
  	if (oci == NULL)
 -		return;
 +		goto end;
  
  	IPRINTF(("%s: fp %s lwp %p\n", ci->ci_dev->dv_xname,
  	    save? "save" : "flush", l));
 @@ -792,4 +792,6 @@
  	KASSERT(ci->ci_fpcurlwp == l);
  	npxsave_cpu(ci, save);
  #endif
 +end:
 +	HYPERVISOR_fpu_taskswitch();
  }
 
 --+HP7ph2BbKc20aGI--