diff options
author | Rick Ward <rward15@us.ibm.com> | 2018-03-29 13:47:19 -0500 |
---|---|---|
committer | William G. Hoffa <wghoffa@us.ibm.com> | 2018-04-04 10:47:20 -0400 |
commit | ad517636c3d03b685abc57a5eb3a54ce22c8f2e8 (patch) | |
tree | a4de939449aa526cbee6239a5fcb44fb2455a5f5 /src/usr/hwas/common/deconfigGard.C | |
parent | 3a4e19354e06e9ff07a11aac205164ac21a5509d (diff) | |
download | talos-hostboot-ad517636c3d03b685abc57a5eb3a54ce22c8f2e8.tar.gz talos-hostboot-ad517636c3d03b685abc57a5eb3a54ce22c8f2e8.zip |
Verify deconfig-by-association assumptions still apply to CDIMM scenario.
Corrected the deconfig code so that it will only deconfig a MBA if all
of its DIMMs have been deconfig'd. Added a testcase to confirm the
behavior.
Change-Id: Iaf1111073c7229e3d3b72f17b9b905dd244ceb9a
RTC: 176408
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/56481
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: Richard J. Knight <rjknight@us.ibm.com>
Reviewed-by: Prachi Gupta <pragupta@us.ibm.com>
Reviewed-by: SWATHI M. BHATTIPROLU <bhmadhur@in.ibm.com>
Reviewed-by: William G. Hoffa <wghoffa@us.ibm.com>
Diffstat (limited to 'src/usr/hwas/common/deconfigGard.C')
-rw-r--r-- | src/usr/hwas/common/deconfigGard.C | 30 |
1 files changed, 24 insertions, 6 deletions
diff --git a/src/usr/hwas/common/deconfigGard.C b/src/usr/hwas/common/deconfigGard.C index 44493ae5f..2e0383b91 100644 --- a/src/usr/hwas/common/deconfigGard.C +++ b/src/usr/hwas/common/deconfigGard.C @@ -1806,12 +1806,30 @@ void DeconfigGard::_deconfigureByAssoc( if (!pParentMbaList.empty()) { const Target *l_parentMba = pParentMbaList[0]; - HWAS_INF("_deconfigureByAssoc DIMM parent MBA: %.8X", - get_huid(l_parentMba)); - _deconfigureTarget(const_cast<Target &> (*l_parentMba), - i_errlEid, NULL, i_deconfigRule); - _deconfigureByAssoc(const_cast<Target &> (*l_parentMba), - i_errlEid, i_deconfigRule); + + // get children DIMM that are functional + // NOTE cannot use anyChildFunctional to determine this + // because we need to look at affinity path + TargetHandleList pDimmList; + PredicateCTM predDimm(CLASS_LOGICAL_CARD, TYPE_DIMM); + PredicatePostfixExpr funcDimms; + funcDimms.push(&predDimm).push(&isFunctional).And(); + targetService().getAssociated(pDimmList, + l_parentMba, + TargetService::CHILD_BY_AFFINITY, + TargetService::ALL, + &funcDimms); + + // if parent MBA has no functional memory + if (pDimmList.empty()) + { + HWAS_INF("_deconfigureByAssoc DIMM parent MBA: %.8X", + get_huid(l_parentMba)); + _deconfigureTarget(const_cast<Target &> (*l_parentMba), + i_errlEid, NULL, i_deconfigRule); + _deconfigureByAssoc(const_cast<Target &> (*l_parentMba), + i_errlEid, i_deconfigRule); + } } TargetHandleList pParentMcaList; |