diff options
author | Zane Shelley <zshelle@us.ibm.com> | 2014-05-08 22:01:16 -0500 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2014-05-16 09:25:07 -0500 |
commit | ad70fe682980c82f7e71d8680a1c09f629f9dbdf (patch) | |
tree | 21674a6bf98f67516718bc0285895ca61ce03f2d | |
parent | 0c54dd7f4f91571d7f2227ff958a33a1832e5bcd (diff) | |
download | talos-hostboot-ad70fe682980c82f7e71d8680a1c09f629f9dbdf.tar.gz talos-hostboot-ad70fe682980c82f7e71d8680a1c09f629f9dbdf.zip |
PRD: TPS bugs
Change-Id: I0afbac0b0c985d2efc74d9ad4c99b7d2cbb6c572
CQ: SW260816
Backport: release-fips810
Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/11033
Tested-by: Jenkins Server
Reviewed-by: Zane Shelley <zshelle@us.ibm.com>
Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/11058
Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
5 files changed, 42 insertions, 6 deletions
diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaCeTable.C b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaCeTable.C index 3dfe9b263..539df11ab 100644 --- a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaCeTable.C +++ b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaCeTable.C @@ -58,8 +58,10 @@ bool CenMbaCeTable::addEntry( const CenAddr & i_addr, CeTable::iterator it = std::find( iv_table.begin(), iv_table.end(), data ); if ( iv_table.end() != it ) { - // Update the count - data.count = it->count + 1; + // Update the count only if the entry is active. Otherwise, use the + // reset count from the contructor. + if ( it->active ) + data.count = it->count + 1; // Update the DRAM pins data.dramPins |= it->dramPins; @@ -89,7 +91,7 @@ bool CenMbaCeTable::addEntry( const CenAddr & i_addr, for ( CeTable::iterator it = iv_table.begin(); it != iv_table.end(); it++ ) { - if ( it->addr.getRank() == thisRank ) + if ( it->active && (it->addr.getRank() == thisRank) ) rankCount++; } @@ -131,6 +133,9 @@ bool CenMbaCeTable::addEntry( const CenAddr & i_addr, void CenMbaCeTable::deactivateAll() { + // NOTE: We don't want to reset the count here because it will be used for + // FFDC. Instead the count will be reset in addEntry() if the entry is + // not active. for ( CeTable::iterator it = iv_table.begin(); it != iv_table.end(); it++ ) it->active = false; } @@ -139,6 +144,9 @@ void CenMbaCeTable::deactivateAll() void CenMbaCeTable::deactivateRank( const CenRank & i_rank ) { + // NOTE: We don't want to reset the count here because it will be used for + // FFDC. Instead the count will be reset in addEntry() if the entry is + // not active. for ( CeTable::iterator it = iv_table.begin(); it != iv_table.end(); it++ ) { if ( it->addr.getRank() == i_rank ) diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaTdCtlr_common.H b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaTdCtlr_common.H index a111ab26b..1b5d548ef 100644 --- a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaTdCtlr_common.H +++ b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaTdCtlr_common.H @@ -98,6 +98,7 @@ class CenMbaTdCtlrCommon enum StopConditions { COND_TARGETED_CMD = + mss_MaintCmd::STOP_ON_RETRY_CE_ETE | mss_MaintCmd::STOP_ON_END_ADDRESS | mss_MaintCmd::ENABLE_CMD_COMPLETE_ATTENTION, diff --git a/src/usr/diag/prdf/common/plat/prdfLineDelete.C b/src/usr/diag/prdf/common/plat/prdfLineDelete.C index 35c622d5a..6ea383fec 100755 --- a/src/usr/diag/prdf/common/plat/prdfLineDelete.C +++ b/src/usr/diag/prdf/common/plat/prdfLineDelete.C @@ -5,7 +5,7 @@ /* */ /* IBM CONFIDENTIAL */ /* */ -/* COPYRIGHT International Business Machines Corp. 2005,2013 */ +/* COPYRIGHT International Business Machines Corp. 2005,2014 */ /* */ /* p1 */ /* */ @@ -63,6 +63,23 @@ namespace LineDelete return ( iv_thPolicy.threshold <= count ); } + bool PrdfCacheCETable::addrThReached( PrdfCacheAddress i_addr, + STEP_CODE_DATA_STRUCT & i_sdc ) + { + bool o_reached = false; + + if ( cv_flushTimerInited && !isIntervalElapsed(i_sdc) ) + { + uint32_t * count = cv_ceTable.find( i_addr ); + if ( NULL != count ) + { + o_reached = ( iv_thPolicy.threshold <= *count ); + } + } + + return o_reached; + } + /* PrdfCacheCETable::isIntervalElapsed() */ bool PrdfCacheCETable::isIntervalElapsed( STEP_CODE_DATA_STRUCT & i_sdc ) diff --git a/src/usr/diag/prdf/common/plat/prdfLineDelete.H b/src/usr/diag/prdf/common/plat/prdfLineDelete.H index 635c058be..ba8527f9f 100755 --- a/src/usr/diag/prdf/common/plat/prdfLineDelete.H +++ b/src/usr/diag/prdf/common/plat/prdfLineDelete.H @@ -5,7 +5,7 @@ /* */ /* IBM CONFIDENTIAL */ /* */ -/* COPYRIGHT International Business Machines Corp. 2005,2013 */ +/* COPYRIGHT International Business Machines Corp. 2005,2014 */ /* */ /* p1 */ /* */ @@ -116,6 +116,17 @@ namespace LineDelete */ bool addAddress(PrdfCacheAddress, STEP_CODE_DATA_STRUCT &); + /** + * @brief Checks if the threshold had been reached for the given + * address. + * @param i_addr The CE address. + * @param i_sdc The Service Data Collector. + * @return TRUE if threshold has been reached and time interval has not + * elapsed, FALSE otherwise. + */ + bool addrThReached( PrdfCacheAddress i_addr, + STEP_CODE_DATA_STRUCT & i_sdc ); + /** @fn PrdfCacheCETable::isIntervalElapsed() * @param STEP_CODE_DATA_STRUCT & i_sdc * @return TRUE if the interval time has elapsed. diff --git a/src/usr/diag/prdf/common/util/UtilSMap.H b/src/usr/diag/prdf/common/util/UtilSMap.H index a5da03c8d..7c7e867df 100755 --- a/src/usr/diag/prdf/common/util/UtilSMap.H +++ b/src/usr/diag/prdf/common/util/UtilSMap.H @@ -196,7 +196,6 @@ class UtilSMap } }; - private: data_type * find(const key_type & k) { if (NULL == iv_memblock) |