summaryrefslogtreecommitdiffstats
path: root/src/usr/hwas/common/deconfigGard.C
diff options
context:
space:
mode:
authorRick Ward <rward15@us.ibm.com>2018-03-29 13:47:19 -0500
committerWilliam G. Hoffa <wghoffa@us.ibm.com>2018-04-04 10:47:20 -0400
commitad517636c3d03b685abc57a5eb3a54ce22c8f2e8 (patch)
treea4de939449aa526cbee6239a5fcb44fb2455a5f5 /src/usr/hwas/common/deconfigGard.C
parent3a4e19354e06e9ff07a11aac205164ac21a5509d (diff)
downloadtalos-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.C30
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;
OpenPOWER on IntegriCloud