Module Name: src Committed By: macallan Date: Fri Aug 2 05:08:07 UTC 2019
Modified Files: src/sys/arch/powerpc/oea: cpu_subr.c Log Message: first step to address PR54331: poll h->hatch_running for a bit instead of blindly relying on a fixed timeout for secondary CPUs to wake up and get ready needs more testing, possibly pullup To generate a diff of this commit: cvs rdiff -u -r1.99 -r1.100 src/sys/arch/powerpc/oea/cpu_subr.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/powerpc/oea/cpu_subr.c diff -u src/sys/arch/powerpc/oea/cpu_subr.c:1.99 src/sys/arch/powerpc/oea/cpu_subr.c:1.100 --- src/sys/arch/powerpc/oea/cpu_subr.c:1.99 Wed Feb 6 07:32:50 2019 +++ src/sys/arch/powerpc/oea/cpu_subr.c Fri Aug 2 05:08:07 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: cpu_subr.c,v 1.99 2019/02/06 07:32:50 mrg Exp $ */ +/* $NetBSD: cpu_subr.c,v 1.100 2019/08/02 05:08:07 macallan Exp $ */ /*- * Copyright (c) 2001 Matt Thomas. @@ -34,7 +34,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: cpu_subr.c,v 1.99 2019/02/06 07:32:50 mrg Exp $"); +__KERNEL_RCSID(0, "$NetBSD: cpu_subr.c,v 1.100 2019/08/02 05:08:07 macallan Exp $"); #include "opt_ppcparam.h" #include "opt_ppccache.h" @@ -1381,6 +1381,17 @@ cpu_spinup(device_t self, struct cpu_inf __asm volatile ("dcbst 0,%0"::"r"(&h->hatch_running):"memory"); __asm volatile ("sync; isync"); #endif + int hatch_bail = 0; + while ((h->hatch_running < 1) && (hatch_bail < 100000)) { + delay(1); + hatch_bail++; +#ifdef CACHE_PROTO_MEI + __asm volatile ("dcbi 0,%0"::"r"(&h->hatch_running):"memory"); + __asm volatile ("sync; isync"); + __asm volatile ("dcbst 0,%0"::"r"(&h->hatch_running):"memory"); + __asm volatile ("sync; isync"); +#endif + } if (h->hatch_running < 1) { #ifdef CACHE_PROTO_MEI __asm volatile ("dcbi 0,%0"::"r"(&cpu_spinstart_ack):"memory");