diff options
author | Nick Bofferding <bofferdn@us.ibm.com> | 2018-02-26 23:27:41 -0600 |
---|---|---|
committer | Daniel M. Crowell <dcrowell@us.ibm.com> | 2018-03-01 09:48:25 -0500 |
commit | a8b0039d4e3af6fb2a7cbc82b328fa73e14dbc30 (patch) | |
tree | 3f5685cc321a4c1af0a8bd6b7244233ca98793b3 /src/usr | |
parent | 2414e7c8e5de03e829022693f7813809313f40fc (diff) | |
download | talos-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')
-rw-r--r-- | src/usr/hwas/common/deconfigGard.C | 31 |
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); |