Module Name:    src
Committed By:   mrg
Date:           Sun Feb 20 10:02:02 UTC 2011

Modified Files:
        src/sys/arch/sparc/sparc: cpu.c cpuvar.h genassym.cf locore.s

Log Message:
remove the evcnt for NULL struct fpstate * ipi, and switch over to an
explicit panic() if we get one.

i'm pretty sure that converting xmpsg_lock from IPL_VM to IPL_SCHED
fixed this problem properly.  i have not seen the evcnt trigger since
that change, nor have several others queried.


To generate a diff of this commit:
cvs rdiff -u -r1.230 -r1.231 src/sys/arch/sparc/sparc/cpu.c
cvs rdiff -u -r1.88 -r1.89 src/sys/arch/sparc/sparc/cpuvar.h
cvs rdiff -u -r1.64 -r1.65 src/sys/arch/sparc/sparc/genassym.cf
cvs rdiff -u -r1.262 -r1.263 src/sys/arch/sparc/sparc/locore.s

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/sparc/sparc/cpu.c
diff -u src/sys/arch/sparc/sparc/cpu.c:1.230 src/sys/arch/sparc/sparc/cpu.c:1.231
--- src/sys/arch/sparc/sparc/cpu.c:1.230	Tue Feb 15 09:05:14 2011
+++ src/sys/arch/sparc/sparc/cpu.c	Sun Feb 20 10:02:01 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: cpu.c,v 1.230 2011/02/15 09:05:14 mrg Exp $ */
+/*	$NetBSD: cpu.c,v 1.231 2011/02/20 10:02:01 mrg Exp $ */
 
 /*
  * Copyright (c) 1996
@@ -52,7 +52,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cpu.c,v 1.230 2011/02/15 09:05:14 mrg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cpu.c,v 1.231 2011/02/20 10:02:01 mrg Exp $");
 
 #include "opt_multiprocessor.h"
 #include "opt_lockdebug.h"
@@ -342,14 +342,9 @@
 
 	/*
 	 * Setup the per-cpu counters.
-	 *
-	 * The "savefp null" counter should go away when the NULL
-	 * struct fpstate * bug is fixed.
 	 */
 	evcnt_attach_dynamic(&cpi->ci_savefpstate, EVCNT_TYPE_MISC,
 			     NULL, cpu_name(cpi), "savefp ipi");
-	evcnt_attach_dynamic(&cpi->ci_savefpstate_null, EVCNT_TYPE_MISC,
-			     NULL, cpu_name(cpi), "savefp null ipi");
 	evcnt_attach_dynamic(&cpi->ci_xpmsg_mutex_fail, EVCNT_TYPE_MISC,
 			     NULL, cpu_name(cpi), "IPI mutex_trylock fail");
 	evcnt_attach_dynamic(&cpi->ci_xpmsg_mutex_fail_call, EVCNT_TYPE_MISC,

Index: src/sys/arch/sparc/sparc/cpuvar.h
diff -u src/sys/arch/sparc/sparc/cpuvar.h:1.88 src/sys/arch/sparc/sparc/cpuvar.h:1.89
--- src/sys/arch/sparc/sparc/cpuvar.h:1.88	Tue Feb 15 09:05:14 2011
+++ src/sys/arch/sparc/sparc/cpuvar.h	Sun Feb 20 10:02:01 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: cpuvar.h,v 1.88 2011/02/15 09:05:14 mrg Exp $ */
+/*	$NetBSD: cpuvar.h,v 1.89 2011/02/20 10:02:01 mrg Exp $ */
 
 /*
  *  Copyright (c) 1996 The NetBSD Foundation, Inc.
@@ -337,7 +337,6 @@
 	vaddr_t	ci_free_sva1, ci_free_eva1, ci_free_sva2, ci_free_eva2;
 
 	struct evcnt ci_savefpstate;
-	struct evcnt ci_savefpstate_null;
 	struct evcnt ci_xpmsg_mutex_fail;
 	struct evcnt ci_xpmsg_mutex_fail_call;
 	struct evcnt ci_intrcnt[16];

Index: src/sys/arch/sparc/sparc/genassym.cf
diff -u src/sys/arch/sparc/sparc/genassym.cf:1.64 src/sys/arch/sparc/sparc/genassym.cf:1.65
--- src/sys/arch/sparc/sparc/genassym.cf:1.64	Thu Jan 27 06:24:59 2011
+++ src/sys/arch/sparc/sparc/genassym.cf	Sun Feb 20 10:02:01 2011
@@ -1,4 +1,4 @@
-#	$NetBSD: genassym.cf,v 1.64 2011/01/27 06:24:59 mrg Exp $
+#	$NetBSD: genassym.cf,v 1.65 2011/02/20 10:02:01 mrg Exp $
 
 #
 # Copyright (c) 1998 The NetBSD Foundation, Inc.
@@ -171,7 +171,6 @@
 define	CPUINFO_MTX_OLDSPL	offsetof(struct cpu_info, ci_mtx_oldspl)
 define	CPUINFO_IDEPTH		offsetof(struct cpu_info, ci_idepth)
 define	CPUINFO_SAVEFPSTATE	offsetof(struct cpu_info, ci_savefpstate)
-define	CPUINFO_SAVEFPSTATE_NULL offsetof(struct cpu_info, ci_savefpstate_null)
 
 # PTE bits and related information
 define	PG_W		PG_W

Index: src/sys/arch/sparc/sparc/locore.s
diff -u src/sys/arch/sparc/sparc/locore.s:1.262 src/sys/arch/sparc/sparc/locore.s:1.263
--- src/sys/arch/sparc/sparc/locore.s:1.262	Tue Feb 15 11:30:21 2011
+++ src/sys/arch/sparc/sparc/locore.s	Sun Feb 20 10:02:01 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: locore.s,v 1.262 2011/02/15 11:30:21 mrg Exp $	*/
+/*	$NetBSD: locore.s,v 1.263 2011/02/20 10:02:01 mrg Exp $	*/
 
 /*
  * Copyright (c) 1996 Paul Kranenburg
@@ -5912,24 +5912,13 @@
 	 std	%f30, [%o0 + FS_REGS + (4*30)]
 
 /*
- * We really should panic here but while we figure out what the bug is
- * that a remote CPU gets a NULL struct fpstate *, this lets the system
- * work at least seemingly stably.
+ * We got a NULL struct fpstate * on the IPI.  We panic.
  */
 Lfp_null_fpstate:
-#if 1
-	sethi	%hi(CPUINFO_VA), %o5
-	ldd	[%o5 + CPUINFO_SAVEFPSTATE_NULL], %o2
-	inccc   %o3
-	addx    %o2, 0, %o2
-	retl
-	 std	%o2, [%o5 + CPUINFO_SAVEFPSTATE_NULL]
-#else
 	ld	[%o5 + CPUINFO_CPUNO], %o1
 	sethi	%hi(Lpanic_savefpstate), %o0
 	call	_C_LABEL(panic)
 	 or	%o0, %lo(Lpanic_savefpstate), %o0
-#endif
 1:
 
 /*

Reply via email to