diff options
author | Patrick Williams <iawillia@us.ibm.com> | 2014-02-03 15:07:59 -0600 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2014-02-05 15:33:13 -0600 |
commit | d452684d349994e0effa03f140a6232f06db6537 (patch) | |
tree | 7c771590d8c78826a577d95b0acbe421b40342bc /src/usr/initservice/istepdispatcher | |
parent | 6d29e3ffd4afb8e3de0b76108d6f3773637efe2a (diff) | |
download | talos-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.C | 76 | ||||
-rw-r--r-- | src/usr/initservice/istepdispatcher/istepdispatcher.H | 11 |
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 |