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);