From 1ad8af50954d5eb8785a2dd0803db4245c01f396 Mon Sep 17 00:00:00 2001 From: Zane Shelley Date: Sat, 26 Oct 2013 16:40:14 -0500 Subject: PRD: add fast scrub on next good rank (runtime TD) Change-Id: I1cb888daa1eb0fbee41415e54ffd475b2d65b80c Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/6893 Tested-by: Jenkins Server Reviewed-by: Sachin Gupta Reviewed-by: Prem Shanker Jha Reviewed-by: Christopher T. Phan Reviewed-by: A. Patrick Williams III Reviewed-by: Zane Shelley Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/7210 --- .../prdf/common/framework/service/prdfTargetServices.C | 2 +- src/usr/diag/prdf/plat/pegasus/prdfCenMbaTdCtlr.C | 14 +++++++++----- 2 files changed, 10 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/usr/diag/prdf/common/framework/service/prdfTargetServices.C b/src/usr/diag/prdf/common/framework/service/prdfTargetServices.C index 41ebd1356..82089523c 100755 --- a/src/usr/diag/prdf/common/framework/service/prdfTargetServices.C +++ b/src/usr/diag/prdf/common/framework/service/prdfTargetServices.C @@ -1039,7 +1039,7 @@ int32_t getMasterRanks( TargetHandle_t i_memTrgt, for ( uint32_t rs = 0; rs < 4; rs++ ) { - if ( 0 != (rankMask & (0x08 >> rs)) ) + if ( 0 != (rankMask & (0x80 >> rs)) ) { o_ranks.push_back( CenRank((ds << 2) | rs) ); } diff --git a/src/usr/diag/prdf/plat/pegasus/prdfCenMbaTdCtlr.C b/src/usr/diag/prdf/plat/pegasus/prdfCenMbaTdCtlr.C index e43c15190..d26a75214 100644 --- a/src/usr/diag/prdf/plat/pegasus/prdfCenMbaTdCtlr.C +++ b/src/usr/diag/prdf/plat/pegasus/prdfCenMbaTdCtlr.C @@ -164,11 +164,15 @@ int32_t CenMbaTdCtlr::handleCmdCompleteEvent( STEP_CODE_DATA_STRUCT & io_sc ) // There may have been a code bug, callout 2nd level support. io_sc.service_data->SetCallout( NextLevelSupport_ENUM, MRU_HIGH ); - // Callout the mark. If nothing was added to the callout list (no valid - // marks), callout the MBA. - CalloutUtil::calloutMark( mba, iv_rank, iv_mark, io_sc ); + // Callout the rank if no other callouts have been made (besides 2nd + // Level Support). Note that iv_mark is not always guaranteed to be + // valid for every error scenario. For simplicity, callout the rank that + // was targeted with low priority. if ( 1 == io_sc.service_data->GetMruList().size() ) - io_sc.service_data->SetCallout( mba ); + { + MemoryMru memmru ( mba, iv_rank, MemoryMruData::CALLOUT_RANK ); + io_sc.service_data->SetCallout( memmru, MRU_LOW ); + } // Just in case it was a legitimate maintenance command complete (error // log not committed) but something else failed. @@ -1551,7 +1555,7 @@ int32_t CenMbaTdCtlr::exitTdSequence() } // Clear out the mark, just in case. This is so we don't accidentally - // callout this mark on another rank in an error patch scenario. + // callout this mark on another rank in an error path scenario. iv_mark = CenMark(); } while (0); -- cgit v1.2.1