diff options
author | Dan Crowell <dcrowell@us.ibm.com> | 2016-12-07 16:25:47 -0600 |
---|---|---|
committer | Daniel M. Crowell <dcrowell@us.ibm.com> | 2016-12-13 16:51:56 -0500 |
commit | eb64e33f992c8688b137f589703eb10fadfb0c7c (patch) | |
tree | e6b965d6231121d57f9905d154458b93914b7649 /src/usr/hwas/common/deconfigGard.C | |
parent | 82fb588f9974b943bc44025e157b75b6fdc0b3d2 (diff) | |
download | talos-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/common/deconfigGard.C')
-rw-r--r-- | src/usr/hwas/common/deconfigGard.C | 40 |
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 |