summaryrefslogtreecommitdiffstats
path: root/src/usr
diff options
context:
space:
mode:
authorZane Shelley <zshelle@us.ibm.com>2015-02-05 16:13:56 -0600
committerA. Patrick Williams III <iawillia@us.ibm.com>2015-03-01 16:46:48 -0600
commit8d8a1ea5d113eb0760f764e391f6c9f1856244ac (patch)
tree5d5dc10db90d79af2c00e7794e655409c58bd193 /src/usr
parentdaf669b47a3ebf6fe8f116a25cd026b11ba9e2c6 (diff)
downloadtalos-hostboot-8d8a1ea5d113eb0760f764e391f6c9f1856244ac.tar.gz
talos-hostboot-8d8a1ea5d113eb0760f764e391f6c9f1856244ac.zip
PRD: no Dynamic Memory Deallocation on checkstop attns
Change-Id: If9323bbf3ec407f8385fce5811473d966be38527 CQ: SW293858 Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/15574 Reviewed-by: Zane Shelley <zshelle@us.ibm.com> Tested-by: Jenkins Server Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/16075 Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/usr')
-rw-r--r--src/usr/diag/prdf/common/framework/service/prdfRasServices_common.C81
-rwxr-xr-xsrc/usr/diag/prdf/common/plat/pegasus/prdfCenMembuf.C43
-rwxr-xr-xsrc/usr/diag/prdf/common/runtime/prdfCenMbaDynMemDealloc_rt.C16
-rwxr-xr-xsrc/usr/diag/prdf/common/runtime/prdfCenMbaDynMemDealloc_rt.H7
-rw-r--r--src/usr/diag/prdf/common/runtime/prdfPlatServices_rt.H5
-rw-r--r--src/usr/diag/prdf/framework/service/prdfRasServices.C9
6 files changed, 131 insertions, 30 deletions
diff --git a/src/usr/diag/prdf/common/framework/service/prdfRasServices_common.C b/src/usr/diag/prdf/common/framework/service/prdfRasServices_common.C
index d4a3b5cae..9cd272c53 100644
--- a/src/usr/diag/prdf/common/framework/service/prdfRasServices_common.C
+++ b/src/usr/diag/prdf/common/framework/service/prdfRasServices_common.C
@@ -49,13 +49,20 @@
#include <iipSystem.h> //For RemoveStoppedChips
#ifdef __HOSTBOOT_MODULE
+
#include <stdio.h>
+
+ #ifdef __HOSTBOOT_RUNTIME
+ #include <prdfCenMbaDynMemDealloc_rt.H>
+ #endif
+
#else
#include <srcisrc.H>
#include <utilreg.H> //For registry functions
#include <evenmgt.H>
#include <rmgrBaseClientLib.H> //for rmgrSyncFile
#include <prdfSdcFileControl.H>
+ #include <prdfCenMbaDynMemDealloc_rt.H>
#endif
using namespace TARGETING;
@@ -1010,6 +1017,80 @@ bool ErrDataService::SdcRetrieve(sdcSaveFlagsEnum i_saveFlag, void * o_buffer)
#endif // if not __HOSTBOOT_MODULE
//------------------------------------------------------------------------------
+
+void ErrDataService::deallocateDimms( const SDC_MRU_LIST & i_mruList )
+{
+ #define PRDF_FUNC "[ErrDataService::deallocateDimms] "
+
+ #if !defined(__HOSTBOOT_MODULE) || defined(__HOSTBOOT_RUNTIME) // RT only
+
+ do
+ {
+ // First check if Dynamic Memory Deallocation is supported. Then check
+ // if it is enabled for predictive callouts.
+ if ( !DEALLOC::isEnabled() || !isPredDynDeallocEnabled() ) break;
+
+ TargetHandleList dimmList;
+ for ( SDC_MRU_LIST::const_iterator it = i_mruList.begin();
+ it != i_mruList.end(); ++it )
+ {
+ PRDcallout thiscallout = it->callout;
+ if ( PRDcalloutData::TYPE_TARGET == thiscallout.getType() )
+ {
+ TargetHandle_t calloutTgt = thiscallout.getTarget();
+ TYPE tgtType = getTargetType( calloutTgt );
+
+ if ( TYPE_L4 == tgtType )
+ {
+ calloutTgt = getConnectedParent( calloutTgt, TYPE_MEMBUF );
+ tgtType = TYPE_MEMBUF;
+ }
+
+ if ( (TYPE_MEMBUF == tgtType) ||
+ (TYPE_MBA == tgtType) ||
+ (TYPE_MCS == tgtType) )
+ {
+ TargetHandleList dimms = getConnected( calloutTgt,
+ TYPE_DIMM );
+ dimmList.insert( dimmList.end(), dimms.begin(),
+ dimms.end() );
+ }
+ else if ( TYPE_DIMM == tgtType )
+ {
+ dimmList.push_back( calloutTgt );
+ }
+ }
+ else if ( PRDcalloutData::TYPE_MEMMRU == thiscallout.getType() )
+ {
+ MemoryMru memMru (thiscallout.flatten());
+
+ TargetHandleList dimms = memMru.getCalloutList();
+ for ( TargetHandleList::iterator dimm = dimms.begin();
+ dimm != dimms.end(); ++dimm )
+ {
+ if ( TYPE_DIMM == getTargetType(*dimm) )
+ dimmList.push_back(*dimm);
+ }
+ }
+ }
+
+ if( 0 == dimmList.size() ) break;
+
+ int32_t rc = DEALLOC::dimmListGard( dimmList );
+ if ( SUCCESS != rc )
+ {
+ PRDF_ERR( PRDF_FUNC"dimmListGard failed" );
+ break;
+ }
+
+ } while(0);
+
+ #endif
+
+ #undef PRDF_FUNC
+}
+
+//------------------------------------------------------------------------------
// RasServices class
//------------------------------------------------------------------------------
diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMembuf.C b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMembuf.C
index dff8a9bbf..69946f6ac 100755
--- a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMembuf.C
+++ b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMembuf.C
@@ -819,29 +819,32 @@ int32_t AnalyzeFetchUe( ExtensibleChip * i_membChip,
MemoryMruData::CALLOUT_RANK );
i_sc.service_data->SetCallout( memmru );
- // Add a TPS request to the TD queue and ban any further TPS requests
- // for this rank.
- l_rc = mbadb->iv_tdCtlr.handleTdEvent( i_sc, rank,
- CenMbaTdCtlrCommon::TPS_EVENT,
- true );
- if ( SUCCESS != l_rc )
+ if ( CHECK_STOP != i_sc.service_data->GetAttentionType() )
{
- PRDF_ERR( PRDF_FUNC"handleTdEvent() failed: rank=m%ds%d",
- rank.getMaster(), rank.getSlave() );
- // We are not adding break here as we still want to do lmbGard
- // If you want to add any code after this which depends on result
- // of handleTdEvent result, add the code judicially.
- }
+ // Add a TPS request to the TD queue and ban any further TPS
+ // requests for this rank.
+ l_rc = mbadb->iv_tdCtlr.handleTdEvent( i_sc, rank,
+ CenMbaTdCtlrCommon::TPS_EVENT,
+ true );
+ if ( SUCCESS != l_rc )
+ {
+ PRDF_ERR( PRDF_FUNC"handleTdEvent() failed: rank=m%ds%d",
+ rank.getMaster(), rank.getSlave() );
+ // We are not adding break here as we still want to do lmbGard
+ // If you want to add any code after this which depends on
+ // result of handleTdEvent result, add the code judicially.
+ }
- #if !defined(__HOSTBOOT_MODULE) || defined(__HOSTBOOT_RUNTIME)
- // Send lmb gard message to hypervisor.
- int32_t lmbRc = DEALLOC::lmbGard( mbaChip, addr );
- if ( SUCCESS != lmbRc )
- {
- PRDF_ERR( PRDF_FUNC"lmbGard() failed" );
- l_rc = lmbRc; break;
+ #if !defined(__HOSTBOOT_MODULE) || defined(__HOSTBOOT_RUNTIME)
+ // Send lmb gard message to hypervisor.
+ int32_t lmbRc = DEALLOC::lmbGard( mbaChip, addr );
+ if ( SUCCESS != lmbRc )
+ {
+ PRDF_ERR( PRDF_FUNC"lmbGard() failed" );
+ l_rc = lmbRc; break;
+ }
+ #endif
}
- #endif
} while (0);
diff --git a/src/usr/diag/prdf/common/runtime/prdfCenMbaDynMemDealloc_rt.C b/src/usr/diag/prdf/common/runtime/prdfCenMbaDynMemDealloc_rt.C
index a2b941fb8..113e255dc 100755
--- a/src/usr/diag/prdf/common/runtime/prdfCenMbaDynMemDealloc_rt.C
+++ b/src/usr/diag/prdf/common/runtime/prdfCenMbaDynMemDealloc_rt.C
@@ -391,6 +391,14 @@ int32_t rankGard( ExtensibleChip * i_mbaChip, CenRank i_rank )
//------------------------------------------------------------------------------
+bool isEnabled()
+{
+ return ( isHyprRunning() && (isHyprConfigPhyp() || isHyprConfigOpal()) &&
+ !isMfgAvpEnabled() && !isMfgHdatAvpEnabled() );
+}
+
+//------------------------------------------------------------------------------
+
int32_t pageGard( ExtensibleChip * i_mbaChip, CenAddr i_addr )
{
#define PRDF_FUNC "[DEALLOC::pageGard] "
@@ -399,6 +407,8 @@ int32_t pageGard( ExtensibleChip * i_mbaChip, CenAddr i_addr )
int32_t o_rc = SUCCESS;
do
{
+ if ( !isEnabled() ) break; // nothing to do
+
o_rc = getSystemAddr( i_mbaChip, i_addr, sysAddr);
if( SUCCESS != o_rc )
{
@@ -426,6 +436,8 @@ int32_t lmbGard( ExtensibleChip * i_mbaChip, CenAddr i_addr, bool i_isFetch )
int32_t o_rc = SUCCESS;
do
{
+ if ( !isEnabled() ) break; // nothing to do
+
if( isHyprConfigOpal() )
{
o_rc = rankGard( i_mbaChip, i_addr.getRank() );
@@ -465,6 +477,8 @@ int32_t mbaGard( ExtensibleChip * i_mbaChip )
do
{
+ if ( !isEnabled() ) break; // nothing to do
+
CenAddr startAddr, endAddr;
TargetHandle_t mba = i_mbaChip->GetChipHandle();
o_rc = getMemAddrRange( mba, startAddr, endAddr );
@@ -507,6 +521,8 @@ int32_t dimmSlctGard( TargetHandle_t i_dimm )
do
{
+ if ( !isEnabled() ) break; // nothing to do
+
TargetHandle_t mba = getConnectedParent( i_dimm, TYPE_MBA );
ExtensibleChip * mbaChip = (ExtensibleChip *)systemPtr->GetChip( mba );
diff --git a/src/usr/diag/prdf/common/runtime/prdfCenMbaDynMemDealloc_rt.H b/src/usr/diag/prdf/common/runtime/prdfCenMbaDynMemDealloc_rt.H
index 862f9b1eb..f02f13860 100755
--- a/src/usr/diag/prdf/common/runtime/prdfCenMbaDynMemDealloc_rt.H
+++ b/src/usr/diag/prdf/common/runtime/prdfCenMbaDynMemDealloc_rt.H
@@ -5,7 +5,7 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2014 */
+/* Contributors Listed Below - COPYRIGHT 2014,2015 */
/* [+] International Business Machines Corp. */
/* */
/* */
@@ -40,6 +40,11 @@ namespace DEALLOC
{
/**
+ * @return True, if Dynamic Memory Deallocation is enabled. False, otherwise.
+ */
+bool isEnabled();
+
+/**
* @brief Sends a page gard message to PHYP.
* @param i_mbaChip MBA chip
* @param i_addr The address to page gard.
diff --git a/src/usr/diag/prdf/common/runtime/prdfPlatServices_rt.H b/src/usr/diag/prdf/common/runtime/prdfPlatServices_rt.H
index e2cbb6a4b..5699d327e 100644
--- a/src/usr/diag/prdf/common/runtime/prdfPlatServices_rt.H
+++ b/src/usr/diag/prdf/common/runtime/prdfPlatServices_rt.H
@@ -5,7 +5,7 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2014 */
+/* Contributors Listed Below - COPYRIGHT 2014,2015 */
/* [+] International Business Machines Corp. */
/* */
/* */
@@ -36,6 +36,9 @@ namespace PlatServices
//## Memory specific functions
//##############################################################################
+// TODO: RTC 124850 need to add support for this.
+inline bool isPredDynDeallocEnabled() { return false; }
+
/**
* @brief Communicates a page gard request to the hypervisor.
* @param i_systemAddress Any address in the target page.
diff --git a/src/usr/diag/prdf/framework/service/prdfRasServices.C b/src/usr/diag/prdf/framework/service/prdfRasServices.C
index 7099df6b8..747042550 100644
--- a/src/usr/diag/prdf/framework/service/prdfRasServices.C
+++ b/src/usr/diag/prdf/framework/service/prdfRasServices.C
@@ -5,7 +5,7 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2013,2014 */
+/* Contributors Listed Below - COPYRIGHT 2013,2015 */
/* [+] International Business Machines Corp. */
/* */
/* */
@@ -71,13 +71,6 @@ void ErrDataService::MnfgTrace( ErrorSignature * i_esig,
//------------------------------------------------------------------------------
-void ErrDataService::deallocateDimms( const SDC_MRU_LIST & i_mruList )
-{
- //No OP for HB
-}
-
-//------------------------------------------------------------------------------
-
void ErrDataService::updateSrc( uint32_t i_user1, uint32_t i_user2,
uint32_t i_user3, uint32_t i_user4,
uint16_t i_rc )
OpenPOWER on IntegriCloud