From eb910e9ed06690191f339b9cd2c34f74da030fbe Mon Sep 17 00:00:00 2001 From: Patrick Williams Date: Thu, 19 Apr 2012 10:54:55 -0500 Subject: Fix weak consistency bug in cpumgr. Change-Id: Ie0ba82a759afee2e4809924b32c7ef0fefcd0ad1 Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/914 Tested-by: Jenkins Server Reviewed-by: Douglas R. Gilbert Reviewed-by: Daniel M. Crowell Reviewed-by: A. Patrick Williams III --- src/kernel/cpumgr.C | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/kernel/cpumgr.C b/src/kernel/cpumgr.C index eb1ad3ac2..33290ebf1 100644 --- a/src/kernel/cpumgr.C +++ b/src/kernel/cpumgr.C @@ -212,12 +212,14 @@ void CpuManager::executePeriodics(cpu_t * i_cpu) { // set up barrier based on # cpus cv_barrier; // TODO whatif other cpus become active? - isync(); - cv_barrier.init(cv_cpuCount); + isync(); // Ensure all instructions complete before this point, so + // we don't get a stale shutdown_requested. if(!cv_shutdown_requested) { + cv_barrier.init(cv_cpuCount); + lwsync(); // Ensure barrier init is globally visible before + // setting defrag = true. cv_defrag = true; - lwsync(); } } } -- cgit v1.2.3