diff options
author | Christian Geddes <crgeddes@us.ibm.com> | 2018-06-27 12:42:57 -0500 |
---|---|---|
committer | Daniel M. Crowell <dcrowell@us.ibm.com> | 2018-06-28 22:53:11 -0400 |
commit | 62f32b295f6baa128b0eef166121b21d22f19bbc (patch) | |
tree | 016e47ad449e8577f5ea4d59f8c70f9fd867bcc8 /src/usr/errl/runtime | |
parent | f2bdbd447c94c8be8a476e423fb017afdd48d497 (diff) | |
download | talos-hostboot-62f32b295f6baa128b0eef166121b21d22f19bbc.tar.gz talos-hostboot-62f32b295f6baa128b0eef166121b21d22f19bbc.zip |
Allow HWSV to handle gard callouts during runtime for FSP systems
There was a bug in the runtime code where if a errorlog was created
and it had a deconfigure callout as well as a gard callout it would
attempt to create a gard record for the callout. This caused PNOR
reads which are not permitted in HBRT on systems with FSPs.
Change-Id: Ie2e1019889e0087396acfa07c7ce93e24643f322
CQ: SW430100
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/61505
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com>
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src/usr/errl/runtime')
-rw-r--r-- | src/usr/errl/runtime/rt_errlmanager.C | 39 |
1 files changed, 23 insertions, 16 deletions
diff --git a/src/usr/errl/runtime/rt_errlmanager.C b/src/usr/errl/runtime/rt_errlmanager.C index 2714659b7..1435401d6 100644 --- a/src/usr/errl/runtime/rt_errlmanager.C +++ b/src/usr/errl/runtime/rt_errlmanager.C @@ -36,6 +36,7 @@ #include <targeting/common/targetservice.H> #include <pnor/pnorif.H> #include <hwas/common/deconfigGard.H> +#include <initservice/initserviceif.H> // spBaseServiceEnabled() namespace ERRORLOG { @@ -357,27 +358,33 @@ bool rt_processCallout(errlHndl_t &io_errl, } - if ((pCalloutUD->type == HWAS::HW_CALLOUT) && - (pCalloutUD->gardErrorType != HWAS::GARD_NULL)) + // Gard callouts are handled by the HWSV if there is an FSP + // if we attempt to create a gard record it requires us to read + // PNOR which we cannot do on FSP based machines + if(!INITSERVICE::spBaseServicesEnabled()) { - TARGETING::Target *pTarget = NULL; - uint8_t * l_uData = (uint8_t *)(pCalloutUD + 1); - bool l_err = HWAS::retrieveTarget(l_uData, pTarget, io_errl); + if ((pCalloutUD->type == HWAS::HW_CALLOUT) && + (pCalloutUD->gardErrorType != HWAS::GARD_NULL)) + { + TARGETING::Target *pTarget = NULL; + uint8_t * l_uData = (uint8_t *)(pCalloutUD + 1); + bool l_err = HWAS::retrieveTarget(l_uData, pTarget, io_errl); - if (!l_err) - { - errlHndl_t errl = HWAS::theDeconfigGard().platCreateGardRecord - (pTarget, - io_errl->eid(), - pCalloutUD->gardErrorType); - if (errl) + if (!l_err) { - TRACFCOMP( g_trac_errl, ERR_MRK - "rt_processCallout: error from platCreateGardRecord"); - errlCommit(errl, HWAS_COMP_ID); + errlHndl_t errl = HWAS::theDeconfigGard().platCreateGardRecord + (pTarget, + io_errl->eid(), + pCalloutUD->gardErrorType); + if (errl) + { + TRACFCOMP( g_trac_errl, ERR_MRK + "rt_processCallout: error from platCreateGardRecord"); + errlCommit(errl, HWAS_COMP_ID); + } } - } + } } return true; } |