summaryrefslogtreecommitdiffstats
path: root/src/usr/diag/prdf
diff options
context:
space:
mode:
authorZane Shelley <zshelle@us.ibm.com>2017-04-24 15:42:15 -0500
committerZane C. Shelley <zshelle@us.ibm.com>2017-04-26 12:03:02 -0400
commitf8449c2deb1cbc0fe7543d6d4669dbb1d7abdfc2 (patch)
treea09fbae643ac327081f9e465e4ddd8fe0bcdaaa4 /src/usr/diag/prdf
parent4d671bc5138f6fb077fbd7958c4678b71a374a37 (diff)
downloadtalos-hostboot-f8449c2deb1cbc0fe7543d6d4669dbb1d7abdfc2.tar.gz
talos-hostboot-f8449c2deb1cbc0fe7543d6d4669dbb1d7abdfc2.zip
PRD: getConnectedChild() bug for MCA->DIMM connections
Change-Id: I07a4d0af30e90cfb9ab7c2bd783bcf5fc6b7b4df CQ: SW386449 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/39614 Reviewed-by: Caleb N. Palmer <cnpalmer@us.ibm.com> Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Reviewed-by: Brian J. Stegmiller <bjs@us.ibm.com> Reviewed-by: Zane C. Shelley <zshelle@us.ibm.com> Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/39667 Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Diffstat (limited to 'src/usr/diag/prdf')
-rwxr-xr-xsrc/usr/diag/prdf/common/plat/prdfTargetServices.C17
1 files changed, 11 insertions, 6 deletions
diff --git a/src/usr/diag/prdf/common/plat/prdfTargetServices.C b/src/usr/diag/prdf/common/plat/prdfTargetServices.C
index f9d2e4d60..52dfc0679 100755
--- a/src/usr/diag/prdf/common/plat/prdfTargetServices.C
+++ b/src/usr/diag/prdf/common/plat/prdfTargetServices.C
@@ -761,14 +761,19 @@ TargetHandle_t getConnectedChild( TargetHandle_t i_target, TYPE i_connType,
}
else if ( TYPE_MCA == trgtType && TYPE_DIMM == i_connType )
{
- // i_connPos is the DIMM select (0-1)
+ // i_connPos is the DIMM select (0-1). Note that we don't use
+ // getTargetPosition() on the DIMM because that does not return a
+ // value that is relative to the processor as we were expecting.
+ // There really isn't a good position attribute that matches the
+ // position in the affinity path. We can use ATTR_REL_POS, which
+ // will always match the DIMM select. This does not let us match the
+ // parent unit like all of the other checks in this functions.
+ // Fortunately, it will be very difficult to have a bug where the
+ // getConnected code returns DIMMs on a different MCA target. So
+ // this is an acceptible risk.
itr = std::find_if( list.begin(), list.end(),
[&](const TargetHandle_t & t)
- {
- uint32_t dimmPos = getTargetPosition(t);
- return (trgtPos == (dimmPos / MAX_DIMM_PER_PORT)) &&
- (i_connPos == (dimmPos % MAX_DIMM_PER_PORT));
- } );
+ { return ( i_connPos == t->getAttr<ATTR_REL_POS>() ); } );
}
else
{
OpenPOWER on IntegriCloud