summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/include/usr/sbeio/sbe_retry_handler.H43
-rw-r--r--src/usr/sbeio/common/sbe_retry_handler.C95
2 files changed, 67 insertions, 71 deletions
diff --git a/src/include/usr/sbeio/sbe_retry_handler.H b/src/include/usr/sbeio/sbe_retry_handler.H
index deef15c32..747f2fb90 100644
--- a/src/include/usr/sbeio/sbe_retry_handler.H
+++ b/src/include/usr/sbeio/sbe_retry_handler.H
@@ -96,9 +96,9 @@ class SbeRetryHandler
SbeRetryHandler::SBE_REG_RETURN::SBE_AT_RUNTIME);
}
- inline uint32_t getCallerPLID()
+ inline uint32_t getMasterPLID()
{
- return iv_callerErrorLogPLID;
+ return iv_masterErrorLogPLID;
}
inline uint8_t getSwitchCount()
@@ -204,6 +204,30 @@ class SbeRetryHandler
void bestEffortCheck();
/**
+ * @brief It is possible that multiple error logs will get created throughout
+ * the process of trying to recover the SBE. We want all of these logs
+ * to share the same platform log id (PLID). This function will check
+ * if iv_masterErrorLogPLID is non-zero, if it is we will set the PLID
+ * of the error log passed into this function to be iv_masterErrorLogPLID.
+ * If iv_masterErrorLogPLID is zero, we will update iv_masterErrorLogPLID
+ * to be whatever the PLID is of the error log passed to this function
+ *
+ *
+ * @return - void
+ */
+ inline void updatePlids(errlHndl_t & i_errl)
+ {
+ if(iv_masterErrorLogPLID)
+ {
+ i_errl->plid(iv_masterErrorLogPLID);
+ }
+ else
+ {
+ iv_masterErrorLogPLID = i_errl->plid();
+ }
+ }
+
+ /**
* @brief This function handles the SBE timeout and loops
* required to start it.
*
@@ -219,10 +243,6 @@ class SbeRetryHandler
*
* @param[in] i_target - current proc target
*
- * @return - bool for flow control on return to caller, if false,
- * caller should go on with the processing flow, if true,
- * caller should interrupt the processing flow and get out
- * of loop or current iteration
*/
void sbe_get_ffdc_handler(TARGETING::Target * i_target);
@@ -294,12 +314,13 @@ class SbeRetryHandler
bool iv_secureModeDisabled;
/*
- * @brief PLID of the caller. 0 if caller does not
- * provide one. Not to be confused with the
- * PLID when error log is created in the usage
- * of this class.
+ * @brief If the caller of this class sets the PLID in the ctor
+ then the ctor will set that PLID to this instance variable.
+ If the caller does not pass a PLID into the ctor then the
+ first error log created while doing the retry will set this
+ PLID.
*/
- uint32_t iv_callerErrorLogPLID;
+ uint32_t iv_masterErrorLogPLID;
/*
* @brief Number of times we switch SBE sides. Max is defined by
diff --git a/src/usr/sbeio/common/sbe_retry_handler.C b/src/usr/sbeio/common/sbe_retry_handler.C
index 5cfa6f32f..14725e93a 100644
--- a/src/usr/sbeio/common/sbe_retry_handler.C
+++ b/src/usr/sbeio/common/sbe_retry_handler.C
@@ -118,7 +118,7 @@ SbeRetryHandler::SbeRetryHandler(SBE_MODE_OF_OPERATION i_sbeMode,
: iv_useSDB(false)
, iv_secureModeDisabled(false) //Per HW team this should always be 0
-, iv_callerErrorLogPLID(i_plid)
+, iv_masterErrorLogPLID(i_plid)
, iv_switchSidesCount(0)
, iv_currentAction(P9_EXTRACT_SBE_RC::ERROR_RECOVERED)
, iv_currentSBEState(SBE_REG_RETURN::SBE_NOT_AT_RUNTIME)
@@ -286,12 +286,9 @@ void SbeRetryHandler::main_sbe_handler( TARGETING::Target * i_target )
HWAS::DELAYED_DECONFIG,
HWAS::GARD_NULL );
- // Set the PLID of the error log to caller's PLID,
- // if provided
- if (iv_callerErrorLogPLID)
- {
- l_errl->plid(iv_callerErrorLogPLID);
- }
+ // Set the PLID of the error log to master PLID
+ // if the master PLID is set
+ updatePlids(l_errl);
errlCommit(l_errl, ISTEP_COMP_ID);
this->iv_currentSBEState = SBE_REG_RETURN::PROC_DECONFIG;
@@ -328,12 +325,10 @@ void SbeRetryHandler::main_sbe_handler( TARGETING::Target * i_target )
TARGETING::get_huid(i_target));
l_errl->collectTrace( SBEIO_COMP_NAME, 256);
- // Set the PLID of the error log to caller's PLID,
- // if provided
- if (iv_callerErrorLogPLID)
- {
- l_errl->plid(iv_callerErrorLogPLID);
- }
+ // Set the PLID of the error log to master PLID
+ // if the master PLID is set
+ updatePlids(l_errl);
+
errlCommit(l_errl, SBEIO_COMP_ID);
// Break out of loop, something bad happened and we dont want end
// up in a endless loop
@@ -378,12 +373,10 @@ void SbeRetryHandler::main_sbe_handler( TARGETING::Target * i_target )
l_errl->collectTrace( SBEIO_COMP_NAME, 256);
- // Set the PLID of the error log to caller's PLID,
- // if provided
- if (iv_callerErrorLogPLID)
- {
- l_errl->plid(iv_callerErrorLogPLID);
- }
+ // Set the PLID of the error log to master PLID
+ // if the master PLID is set
+ updatePlids(l_errl);
+
errlCommit(l_errl, SBEIO_COMP_ID);
// Break out of loop, something bad happened and we dont want end
// up in a endless loop
@@ -415,12 +408,9 @@ void SbeRetryHandler::main_sbe_handler( TARGETING::Target * i_target )
HWAS::NO_DECONFIG,
HWAS::GARD_Predictive);
- // Set the PLID of the error log to caller's PLID,
- // if provided
- if (iv_callerErrorLogPLID)
- {
- l_errl->plid(iv_callerErrorLogPLID);
- }
+ // Set the PLID of the error log to master PLID
+ // if the master PLID is set
+ updatePlids(l_errl);
errlCommit( l_errl, ISTEP_COMP_ID);
// If we got an errlog while attempting start_cbs
@@ -450,12 +440,9 @@ void SbeRetryHandler::main_sbe_handler( TARGETING::Target * i_target )
HWAS::NO_DECONFIG,
HWAS::GARD_Predictive);
- // Set the PLID of the error log to caller's PLID,
- // if provided
- if (iv_callerErrorLogPLID)
- {
- l_errl->plid(iv_callerErrorLogPLID);
- }
+ // Set the PLID of the error log to master PLID
+ // if the master PLID is set
+ updatePlids(l_errl);
errlCommit( l_errl, ISTEP_COMP_ID);
// If we got an errlog while attempting p9_sbe_hreset
@@ -514,12 +501,9 @@ void SbeRetryHandler::main_sbe_handler( TARGETING::Target * i_target )
l_errl->collectTrace("ISTEPS_TRACE",256);
l_errl->collectTrace(SBEIO_COMP_NAME,256);
- // Set the PLID of the error log to caller's PLID,
- // if provided
- if (iv_callerErrorLogPLID)
- {
- l_errl->plid(iv_callerErrorLogPLID);
- }
+ // Set the PLID of the error log to master PLID
+ // if the master PLID is set
+ updatePlids(l_errl);
errlCommit(l_errl, ISTEP_COMP_ID);
}
@@ -570,12 +554,9 @@ bool SbeRetryHandler::sbe_run_extract_msg_reg(TARGETING::Target * i_target)
SBE_TRACF("ERROR: call sbe_run_extract_msg_reg, PLID=0x%x", l_errl->plid() );
l_errl->collectTrace(SBEIO_COMP_NAME,256);
- // Set the PLID of the error log to caller's PLID,
- // if provided
- if (iv_callerErrorLogPLID)
- {
- l_errl->plid(iv_callerErrorLogPLID);
- }
+ // Set the PLID of the error log to master PLID
+ // if the master PLID is set
+ updatePlids(l_errl);
// capture the target data in the elog
ERRORLOG::ErrlUserDetailsTarget(i_target).addToLog( l_errl );
@@ -924,12 +905,9 @@ void SbeRetryHandler::sbe_get_ffdc_handler(TARGETING::Target * i_target)
l_errl->collectTrace( SBEIO_COMP_NAME, KILOBYTE/4);
l_errl->collectTrace( "ISTEPS_TRACE", KILOBYTE/4);
- // Set the PLID of the error log to caller's PLID,
- // if provided
- if (iv_callerErrorLogPLID)
- {
- l_errl->plid(iv_callerErrorLogPLID);
- }
+ // Set the PLID of the error log to master PLID
+ // if the master PLID is set
+ updatePlids(l_errl);
errlCommit(l_errl, ISTEP_COMP_ID);
}
@@ -972,7 +950,7 @@ void SbeRetryHandler::sbe_run_extract_rc(TARGETING::Target * i_target)
l_ret, iv_useSDB, iv_secureModeDisabled);
// Convert the returnCode into an UNRECOVERABLE error log which we will
- // associated w/ the caller's errlog via plid
+ // associate w/ the caller's errlog via plid
l_errl = rcToErrl(l_rc, ERRORLOG::ERRL_SEV_UNRECOVERABLE);
this->iv_currentAction = l_ret;
@@ -1003,12 +981,9 @@ void SbeRetryHandler::sbe_run_extract_rc(TARGETING::Target * i_target)
// Capture the target data in the elog
ERRORLOG::ErrlUserDetailsTarget(i_target).addToLog( l_errl );
- // Set the PLID of the error log to caller's PLID,
- // if provided
- if (iv_callerErrorLogPLID)
- {
- l_errl->plid(iv_callerErrorLogPLID);
- }
+ // Set the PLID of the error log to master PLID
+ // if the master PLID is set
+ updatePlids(l_errl);
// Commit error log
errlCommit( l_errl, HWPF_COMP_ID );
@@ -1227,11 +1202,11 @@ errlHndl_t SbeRetryHandler::switch_sbe_sides(TARGETING::Target * i_target)
this->iv_currentSideBootAttempts = 0;
}while(0);
- // Set the PLID of the error log to caller's PLID,
- // if provided
- if (l_errl && iv_callerErrorLogPLID)
+ if (l_errl)
{
- l_errl->plid(iv_callerErrorLogPLID);
+ // Set the PLID of the error log to master PLID
+ // if the master PLID is set
+ updatePlids(l_errl);
}
SBE_TRACF(EXIT_MRK "switch_sbe_sides()");
OpenPOWER on IntegriCloud