Module Name: src Committed By: macallan Date: Mon Feb 11 07:51:46 UTC 2019
Modified Files: src/sys/arch/sparc64/sparc64: vm_machdep.c Log Message: retry timed out IPIs, complain and dump timing info into dmesg ok martin@ To generate a diff of this commit: cvs rdiff -u -r1.101 -r1.102 src/sys/arch/sparc64/sparc64/vm_machdep.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/sparc64/sparc64/vm_machdep.c diff -u src/sys/arch/sparc64/sparc64/vm_machdep.c:1.101 src/sys/arch/sparc64/sparc64/vm_machdep.c:1.102 --- src/sys/arch/sparc64/sparc64/vm_machdep.c:1.101 Fri Nov 6 15:30:59 2015 +++ src/sys/arch/sparc64/sparc64/vm_machdep.c Mon Feb 11 07:51:46 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: vm_machdep.c,v 1.101 2015/11/06 15:30:59 martin Exp $ */ +/* $NetBSD: vm_machdep.c,v 1.102 2019/02/11 07:51:46 macallan Exp $ */ /* * Copyright (c) 1996-2002 Eduardo Horvath. All rights reserved. @@ -50,7 +50,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: vm_machdep.c,v 1.101 2015/11/06 15:30:59 martin Exp $"); +__KERNEL_RCSID(0, "$NetBSD: vm_machdep.c,v 1.102 2019/02/11 07:51:46 macallan Exp $"); #include "opt_multiprocessor.h" @@ -305,12 +305,13 @@ fpusave_lwp(struct lwp *l, bool save) } for (ci = cpus; ci != NULL; ci = ci->ci_next) { - int spincount; + int spincount, retrycount=0; if (ci == curcpu() || !CPUSET_HAS(cpus_active, ci->ci_index)) continue; if (ci->ci_fplwp != l) continue; +again: sparc64_send_ipi(ci->ci_cpuid, save ? sparc64_ipi_save_fpstate : sparc64_ipi_drop_fpstate, (uintptr_t)l, 0); @@ -319,9 +320,13 @@ fpusave_lwp(struct lwp *l, bool save) while (ci->ci_fplwp == l) { membar_Sync(); spincount++; - if (spincount > 10000000) - panic("fpusave_lwp ipi didn't"); + if (spincount > 10000000) { + printf("fpusave_lwp ipi didn't (%d)\n", retrycount); + retrycount++; + goto again; + } } + if (retrycount > 0) printf("spincount %d\n", spincount); break; } #else