Module Name: src
Committed By: maxv
Date: Fri Jun 29 19:34:35 UTC 2018
Modified Files:
src/sys/arch/x86/x86: fpu.c
Log Message:
Add more KASSERTs.
Should help PR/53399.
To generate a diff of this commit:
cvs rdiff -u -r1.43 -r1.44 src/sys/arch/x86/x86/fpu.c
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/x86/x86/fpu.c
diff -u src/sys/arch/x86/x86/fpu.c:1.43 src/sys/arch/x86/x86/fpu.c:1.44
--- src/sys/arch/x86/x86/fpu.c:1.43 Sat Jun 23 10:06:02 2018
+++ src/sys/arch/x86/x86/fpu.c Fri Jun 29 19:34:35 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: fpu.c,v 1.43 2018/06/23 10:06:02 maxv Exp $ */
+/* $NetBSD: fpu.c,v 1.44 2018/06/29 19:34:35 maxv Exp $ */
/*
* Copyright (c) 2008 The NetBSD Foundation, Inc. All
@@ -96,7 +96,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: fpu.c,v 1.43 2018/06/23 10:06:02 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: fpu.c,v 1.44 2018/06/29 19:34:35 maxv Exp $");
#include "opt_multiprocessor.h"
@@ -359,6 +359,20 @@ fpu_eagerswitch(struct lwp *oldlwp, stru
int s;
s = splhigh();
+#ifdef DIAGNOSTIC
+ if (oldlwp != NULL) {
+ struct pcb *pcb = lwp_getpcb(oldlwp);
+ struct cpu_info *ci = curcpu();
+ if (pcb->pcb_fpcpu == NULL) {
+ KASSERT(ci->ci_fpcurlwp != oldlwp);
+ } else if (pcb->pcb_fpcpu == ci) {
+ KASSERT(ci->ci_fpcurlwp == oldlwp);
+ } else {
+ panic("%s: oldlwp's state installed elsewhere",
+ __func__);
+ }
+ }
+#endif
fpusave_cpu(true);
if (!(newlwp->l_flag & LW_SYSTEM))
fpu_eagerrestore(newlwp);