diff options
author | Zane Shelley <zshelle@us.ibm.com> | 2017-04-24 15:42:15 -0500 |
---|---|---|
committer | Zane C. Shelley <zshelle@us.ibm.com> | 2017-04-26 12:03:02 -0400 |
commit | f8449c2deb1cbc0fe7543d6d4669dbb1d7abdfc2 (patch) | |
tree | a09fbae643ac327081f9e465e4ddd8fe0bcdaaa4 /src/usr | |
parent | 4d671bc5138f6fb077fbd7958c4678b71a374a37 (diff) | |
download | talos-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')
-rwxr-xr-x | src/usr/diag/prdf/common/plat/prdfTargetServices.C | 17 |
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 { |