Skip to content

Commit

Permalink
Allow HWSV to handle gard callouts during runtime for FSP systems
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
crgeddes authored and dcrowell77 committed Jun 29, 2018
1 parent f2bdbd4 commit 62f32b2
Showing 1 changed file with 23 additions and 16 deletions.
39 changes: 23 additions & 16 deletions src/usr/errl/runtime/rt_errlmanager.C
Original file line number Diff line number Diff line change
Expand Up @@ -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
{
Expand Down Expand Up @@ -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;
}
Expand Down

0 comments on commit 62f32b2

Please sign in to comment.