summaryrefslogtreecommitdiffstats
path: root/src/usr/initservice/istepdispatcher
diff options
context:
space:
mode:
authorPatrick Williams <iawillia@us.ibm.com>2014-02-03 15:07:59 -0600
committerA. Patrick Williams III <iawillia@us.ibm.com>2014-02-05 15:33:13 -0600
commitd452684d349994e0effa03f140a6232f06db6537 (patch)
tree7c771590d8c78826a577d95b0acbe421b40342bc /src/usr/initservice/istepdispatcher
parent6d29e3ffd4afb8e3de0b76108d6f3773637efe2a (diff)
downloadtalos-hostboot-d452684d349994e0effa03f140a6232f06db6537.tar.gz
talos-hostboot-d452684d349994e0effa03f140a6232f06db6537.zip
Fail IPL on deconfig + no-reconfig.
Change-Id: Iab0d929dea90d137c334a90c86db9e1868adcef1 CQ: SW244451 Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/8542 Tested-by: Jenkins Server Reviewed-by: Brian H. Horton <brianh@linux.ibm.com> Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com> Reviewed-by: MIKE J. JONES <mjjones@us.ibm.com> Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/usr/initservice/istepdispatcher')
-rw-r--r--src/usr/initservice/istepdispatcher/istepdispatcher.C76
-rw-r--r--src/usr/initservice/istepdispatcher/istepdispatcher.H11
2 files changed, 57 insertions, 30 deletions
diff --git a/src/usr/initservice/istepdispatcher/istepdispatcher.C b/src/usr/initservice/istepdispatcher/istepdispatcher.C
index f67b39bbd..8483e471c 100644
--- a/src/usr/initservice/istepdispatcher/istepdispatcher.C
+++ b/src/usr/initservice/istepdispatcher/istepdispatcher.C
@@ -374,6 +374,12 @@ errlHndl_t IStepDispatcher::executeAllISteps()
istep, substep);
continue;
}
+ else // We should reconfigure loop but can't.
+ // Need to terminate and let the FSP reconfigure.
+ {
+ err = failedDueToDeconfig(istep, substep,
+ newIstep, newSubstep);
+ }
}
if (err)
@@ -1128,36 +1134,14 @@ void IStepDispatcher::handleIStepRequestMsg(msg_t * & io_pMsg)
uint8_t newIstep = 0;
uint8_t newSubstep = 0;
- if (checkReconfig(istep, substep, newIstep, newSubstep))
- {
- // Within the Reconfig Loop. In non-istep-mode it would loop back
- // to the start of the loop, this cannot be done here (this is
- // istep-mode) so create an error.
- TRACFCOMP(g_trac_initsvc, ERR_MRK"handleIstepRequestMsg: IStep success and deconfigs, creating error");
-
- /*@
- * @errortype
- * @reasoncode ISTEP_FAILED_DUE_TO_DECONFIG
- * @severity ERRORLOG::ERRL_SEV_UNRECOVERABLE
- * @moduleid ISTEP_INITSVC_MOD_ID
- * @userdata1 Istep that failed
- * @userdata2 SubStep that failed
- * @devdesc IStep Mode. IStep reported success but HW
- * deconfigured within Reconfig Loop.
- */
- err = new ERRORLOG::ErrlEntry(
- ERRORLOG::ERRL_SEV_UNRECOVERABLE,
- ISTEP_INITSVC_MOD_ID,
- ISTEP_FAILED_DUE_TO_DECONFIG,
- istep, substep);
- err->collectTrace("HWAS_I", 1024);
- }
- else
- {
- // Not within the Reconfig Loop. In non-istep-mode it is considered
- // a success so it is the same here
- TRACFCOMP(g_trac_initsvc, ERR_MRK"handleIstepRequestMsg: IStep success and deconfigs, returning success");
- }
+ // Even though we cannot do a reconfig in istep mode, call function
+ // to get FFDC on where we might have gone.
+ checkReconfig(istep, substep, newIstep, newSubstep);
+
+ // In istep mode we cannot do a reconfigure of any sort, so create
+ // an error.
+ TRACFCOMP(g_trac_initsvc, ERR_MRK"handleIstepRequestMsg: IStep success and deconfigs, creating error");
+ err = failedDueToDeconfig(istep, substep, newIstep, newSubstep);
}
@@ -1527,4 +1511,36 @@ errlHndl_t IStepDispatcher::handleCoalesceHostMsg()
return err;
}
+// ----------------------------------------------------------------------------
+// IStepDispatcher::failedDueToDeconfig()
+// ----------------------------------------------------------------------------
+errlHndl_t IStepDispatcher::failedDueToDeconfig(
+ uint8_t i_step, uint8_t i_substep,
+ uint8_t i_dStep, uint8_t i_dSubstep)
+{
+ errlHndl_t err = NULL;
+
+ /*@
+ * @errortype
+ * @reasoncode ISTEP_FAILED_DUE_TO_DECONFIG
+ * @severity ERRORLOG::ERRL_SEV_UNRECOVERABLE
+ * @moduleid ISTEP_INITSVC_MOD_ID
+ * @userdata1[0:31] Istep that failed
+ * @userdata1[32:63] SubStep that failed
+ * @userdata2[0:31] Desired istep for reconfig loop.
+ * @userdata2[32:63] Desired substep for reconfig loop.
+ * @devdesc Deconfigured occured during an istep and reconfig loop
+ * was not able to be performed by Hostboot.
+ */
+ err = new ERRORLOG::ErrlEntry(
+ ERRORLOG::ERRL_SEV_UNRECOVERABLE,
+ ISTEP_INITSVC_MOD_ID,
+ ISTEP_FAILED_DUE_TO_DECONFIG,
+ TWO_UINT32_TO_UINT64(i_step, i_substep),
+ TWO_UINT32_TO_UINT64(i_dStep, i_dSubstep));
+ err->collectTrace("HWAS_I", 1024);
+
+ return err;
+}
+
} // namespace
diff --git a/src/usr/initservice/istepdispatcher/istepdispatcher.H b/src/usr/initservice/istepdispatcher/istepdispatcher.H
index de235cc7e..9b5ceaa8d 100644
--- a/src/usr/initservice/istepdispatcher/istepdispatcher.H
+++ b/src/usr/initservice/istepdispatcher/istepdispatcher.H
@@ -341,6 +341,17 @@ private:
*/
static void * startMsgHndlrThread ( void * p);
+ /**
+ * @brief Create a common error log indicating a failure due to deconfig.
+ *
+ * @param[in] i_step - Current istep.
+ * @param[in] i_substep - Current substep.
+ * @param[in] i_dStep - Desired istep if we could do a reconfig.
+ * @param[in] i_dSubstep - Desired substep if we could do a reconfig.
+ */
+ static errlHndl_t failedDueToDeconfig(uint8_t i_step, uint8_t i_substep,
+ uint8_t i_dStep, uint8_t i_dSubstep);
+
// Instance variables
// Mutexes
OpenPOWER on IntegriCloud