Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 16 Jul 2001 20:35:13 +1000 (EST)
From:      Bruce Evans <bde@zeta.org.au>
To:        Tor.Egge@fast.no
Cc:        juriy@aviaport.ru, freebsd-current@FreeBSD.ORG, peter@FreeBSD.ORG
Subject:   Re: kernel with SSE is unstable
Message-ID:  <Pine.BSF.4.21.0107162017400.58001-100000@besplex.bde.org>
In-Reply-To: <200107151627.SAA01763@midten.fast.no>

next in thread | previous in thread | raw e-mail | index | archive | help
On Sun, 15 Jul 2001 Tor.Egge@fast.no wrote:

> > In my system kernel(WITH SSE) falls when I use commands netstat and swapinfo.
> > kernel without SSE works fine.
> 
> I got a very similar panic when trying an UP kernel with SSE enabled.
> 
> mi_switch() sets curproc->p_oncpu to NOCPU before calling
> cpu_switch().  cpu_switch() might call npxsave() which calls fpusave
> with NOCPU as the 'oncpu' argument.
> 
> A suggested patch is enclosed.

> Index: sys/i386/isa/npx.c
> ===================================================================
> RCS file: /home/ncvs/src/sys/i386/isa/npx.c,v
> retrieving revision 1.104
> diff -u -r1.104 npx.c
> --- sys/i386/isa/npx.c	2001/07/12 12:21:53	1.104
> +++ sys/i386/isa/npx.c	2001/07/15 16:23:02
> @@ -160,8 +160,8 @@
>  #endif
>  static	int	npx_probe	__P((device_t dev));
>  static	int	npx_probe1	__P((device_t dev));
> -static	void	fpusave		__P((union savefpu *, u_char));
> -static	void	fpurstor	__P((union savefpu *, u_char));
> +static	void	fpusave		__P((union savefpu *));
> +static	void	fpurstor	__P((union savefpu *));

Good.

I want all use of the cpu number removed.  It seems to be just to avoid
alignment problems that shouldn't happen in practice (the save area
should always be suitably aligned if it isn't already, and I think it
is already).

>  static void
> -fpusave(addr, oncpu)
> +fpusave(addr)
>  	union savefpu *addr;
> -	u_char oncpu;
>  {
>  	static struct savexmm svxmm[MAXCPU];
> +	u_char oncpu = PCPU_GET(cpuid);
>  	
>  	if (!cpu_fxsr)
>  		fnsave(addr);

Also, `struct savexmm' is not too large to put on the stack.

Bruce


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.4.21.0107162017400.58001-100000>