diff options
author | Nick Bofferding <bofferdn@us.ibm.com> | 2013-10-30 16:41:53 -0500 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2013-11-13 14:40:10 -0600 |
commit | 1aa8f7551005dd48078b91be173e8bcc7e339061 (patch) | |
tree | a2e4c5deb1a7e51f76eab9d02170e8e7340ec951 /src/usr/targeting/common/targetservice.C | |
parent | 8ad97ccb3e986b673f040af80bc269b57a6f9341 (diff) | |
download | talos-hostboot-1aa8f7551005dd48078b91be173e8bcc7e339061.tar.gz talos-hostboot-1aa8f7551005dd48078b91be173e8bcc7e339061.zip |
Support cross-node association traversal
- Added specialized abstract pointer format for address translation
- Added special decoding for addresses referencing other nodes
Change-Id: I31b681a649effb103b8abfa4aefa13f26e76f348
RTC: 88619
Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/7195
Tested-by: Jenkins Server
Reviewed-by: Brian H. Horton <brianh@linux.ibm.com>
Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/usr/targeting/common/targetservice.C')
-rw-r--r-- | src/usr/targeting/common/targetservice.C | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/src/usr/targeting/common/targetservice.C b/src/usr/targeting/common/targetservice.C index 923b46459..fd95ea9ff 100644 --- a/src/usr/targeting/common/targetservice.C +++ b/src/usr/targeting/common/targetservice.C @@ -842,9 +842,20 @@ void TargetService::_getAssociationsViaDfs( if(TARG_ADDR_TRANSLATION_REQUIRED) { - pDestinationTarget = static_cast<Target*>( - TARG_GET_SINGLETON(TARGETING::theAttrRP).translateAddr( - pDestinationTarget, i_pSourceTarget)); + NODE_ID node = (*pDestinationTargetItr).TranslationEncoded.nodeId; + if(!node) + { + pDestinationTarget = static_cast<Target*>( + TARG_GET_SINGLETON(TARGETING::theAttrRP).translateAddr( + pDestinationTarget, i_pSourceTarget)); + } + else + { + // Node IDs indexed from 1, so decrement to compensate + pDestinationTarget = static_cast<Target*>( + TARG_GET_SINGLETON(TARGETING::theAttrRP).translateAddr( + pDestinationTarget, --node)); + } } if( (!i_pPredicate) |