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