On Sun, 15 Jul 2001 [EMAIL PROTECTED] 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 [EMAIL PROTECTED]
with "unsubscribe freebsd-current" in the body of the message

Reply via email to