summaryrefslogtreecommitdiffstats
path: root/src/usr/hwas
diff options
context:
space:
mode:
authorDan Crowell <dcrowell@us.ibm.com>2016-12-07 16:25:47 -0600
committerDaniel M. Crowell <dcrowell@us.ibm.com>2016-12-13 16:51:56 -0500
commiteb64e33f992c8688b137f589703eb10fadfb0c7c (patch)
treee6b965d6231121d57f9905d154458b93914b7649 /src/usr/hwas
parent82fb588f9974b943bc44025e157b75b6fdc0b3d2 (diff)
downloadtalos-hostboot-eb64e33f992c8688b137f589703eb10fadfb0c7c.tar.gz
talos-hostboot-eb64e33f992c8688b137f589703eb10fadfb0c7c.zip
Deconfigure other PHBs in the same group
Enforce valid PHB configurations by deconfiguring higher units (lower stack number) Change-Id: I14e146b8abc63ac1e320c66faae7034aeb12be82 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/33553 Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Reviewed-by: Matthew A. Ploetz <maploetz@us.ibm.com> Reviewed-by: Matt Derksen <v2cibmd@us.ibm.com> Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src/usr/hwas')
-rw-r--r--src/usr/hwas/common/deconfigGard.C40
1 files changed, 33 insertions, 7 deletions
diff --git a/src/usr/hwas/common/deconfigGard.C b/src/usr/hwas/common/deconfigGard.C
index 34a146bb9..bf47e2a4d 100644
--- a/src/usr/hwas/common/deconfigGard.C
+++ b/src/usr/hwas/common/deconfigGard.C
@@ -1868,21 +1868,47 @@ void DeconfigGard::_deconfigureByAssoc(
{
TargetHandleList pParentPECList;
getParentAffinityTargetsByState(pParentPECList, &i_target,
- CLASS_UNIT, TYPE_PEC, UTIL_FILTER_PRESENT);
+ CLASS_UNIT, TYPE_PEC, UTIL_FILTER_PRESENT);
HWAS_ASSERT((pParentPECList.size() == 1),
- "HWAS _deconfigureByAssoc: pParentPECList != 1");
+ "HWAS _deconfigureByAssoc: pParentPECList != 1");
Target *l_parentPEC = pParentPECList[0];
if (isFunctional(l_parentPEC))
{
if (!anyChildFunctional(*l_parentPEC))
{
- _deconfigureTarget(*l_parentPEC,
- i_errlEid, NULL, i_deconfigRule);
- _deconfigureByAssoc(*l_parentPEC,
- i_errlEid,i_deconfigRule);
+ _deconfigureTarget(*l_parentPEC,
+ i_errlEid, NULL, i_deconfigRule);
+ _deconfigureByAssoc(*l_parentPEC,
+ i_errlEid,i_deconfigRule);
}
- }
+
+ // Due to shared resources, need to deconfig any PHB
+ // with a higher unit position as the one that we just
+ // lost
+ ATTR_CHIP_UNIT_type l_myUnit =
+ i_target.getAttr<ATTR_CHIP_UNIT>();
+ TargetHandleList pChildList;
+ targetService().getAssociated(pChildList,
+ l_parentPEC,
+ TargetService::CHILD,
+ TargetService::ALL,
+ &isFunctional);
+ for (TargetHandleList::iterator pChild_it =
+ pChildList.begin();
+ pChild_it != pChildList.end();
+ ++pChild_it)
+ {
+ if( (*pChild_it)->getAttr<ATTR_CHIP_UNIT>() > l_myUnit )
+ {
+ _deconfigureTarget(*(*pChild_it),
+ i_errlEid, NULL,
+ i_deconfigRule);
+ _deconfigureByAssoc(*(*pChild_it),
+ i_errlEid,i_deconfigRule);
+ }
+ }
+ }
break;
} // TYPE_PHB
OpenPOWER on IntegriCloud