summaryrefslogtreecommitdiffstats
path: root/src/usr/hwas/common
diff options
context:
space:
mode:
authorNick Bofferding <bofferdn@us.ibm.com>2018-02-26 23:27:41 -0600
committerDaniel M. Crowell <dcrowell@us.ibm.com>2018-03-01 09:48:25 -0500
commita8b0039d4e3af6fb2a7cbc82b328fa73e14dbc30 (patch)
tree3f5685cc321a4c1af0a8bd6b7244233ca98793b3 /src/usr/hwas/common
parent2414e7c8e5de03e829022693f7813809313f40fc (diff)
downloadtalos-hostboot-a8b0039d4e3af6fb2a7cbc82b328fa73e14dbc30.tar.gz
talos-hostboot-a8b0039d4e3af6fb2a7cbc82b328fa73e14dbc30.zip
Clear FCO deconfigures before applying gard records
When an EX is deconfigured, its parent EQ is deconfigured by association if all resources under it happen to be deconfigured, even if some of those resources are FCO deconfigures. Later, FCO deconfigures are removed to determine a new FCO allocation. If an FCO resource is allocated under that deconfigured EQ, the system may not boot, as those resources will appear to be orphaned. This change reorders FCO/gard processing to clear the FCO deconfigures, apply gard records, then allocate FCO resources, so that the EQ in the noted scenario remains configured, allowing child FCO resources to be used. CQ: SW417765 Change-Id: I22817b0bae0df0dfabd7e02ec8afa91033e092ca Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/54738 CI-Ready: Nicholas E. Bofferding <bofferdn@us.ibm.com> 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> Reviewed-by: ILYA SMIRNOV <ismirno@us.ibm.com> CI-Ready: Marshall J. Wilks <mjwilks@us.ibm.com> Reviewed-by: Michael Baiocchi <mbaiocch@us.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Reviewed-by: DHRUVARAJ SUBHASH CHANDRAN <dhruvaraj@in.ibm.com> Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src/usr/hwas/common')
-rw-r--r--src/usr/hwas/common/deconfigGard.C31
1 files changed, 28 insertions, 3 deletions
diff --git a/src/usr/hwas/common/deconfigGard.C b/src/usr/hwas/common/deconfigGard.C
index 656847599..e349207be 100644
--- a/src/usr/hwas/common/deconfigGard.C
+++ b/src/usr/hwas/common/deconfigGard.C
@@ -81,6 +81,8 @@ errlHndl_t collectGard(const PredicateBase *i_pPredicate)
break;
}
+ (void)theDeconfigGard().clearFcoDeconfigures();
+
errl = theDeconfigGard().
deconfigureTargetsFromGardRecordsForIpl(i_pPredicate);
if (errl)
@@ -804,6 +806,32 @@ errlHndl_t DeconfigGard::deconfigureTargetsFromGardRecordsForIpl(
return l_pErr;
} // deconfigureTargetsFromGardRecordsForIpl
+void DeconfigGard::clearFcoDeconfigures()
+{
+ // Get top level target
+ Target* pSys = nullptr;
+ targetService().getTopLevelTarget(pSys);
+ HWAS_ASSERT(pSys!=nullptr,"Top level target was nullptr");
+
+ // Find all the nodes below it
+ PredicateCTM isNode(CLASS_ENC, TYPE_NODE);
+ PredicateHwas isFunctional;
+ isFunctional.functional(true);
+ PredicatePostfixExpr isFunctionalNode;
+ isFunctionalNode.push(&isNode).push(&isFunctional).And();
+
+ TargetHandleList nodeHandleList;
+ targetService().getAssociated(nodeHandleList, pSys,
+ TargetService::CHILD, TargetService::IMMEDIATE,
+ &isFunctionalNode);
+
+ // Clear the FCO deconfigures for each one
+ for(auto const& pNode : nodeHandleList)
+ {
+ _clearFCODeconfigure(pNode);
+ }
+}
+
//******************************************************************************
errlHndl_t DeconfigGard::processFieldCoreOverride()
{
@@ -841,9 +869,6 @@ errlHndl_t DeconfigGard::processFieldCoreOverride()
{
const TargetHandle_t pNode = *pNode_it;
- //Clear all FCO based deconfigure before
- //re-calculating FCO.
- _clearFCODeconfigure(pNode);
// Get FCO value
uint32_t l_fco = 0;
l_pErr = platGetFCO(pNode, l_fco);
OpenPOWER on IntegriCloud