diff options
| author | Matt Derksen <mderkse1@us.ibm.com> | 2018-10-15 10:22:11 -0500 |
|---|---|---|
| committer | Daniel M. Crowell <dcrowell@us.ibm.com> | 2018-11-29 17:06:46 -0600 |
| commit | b3290cc00d1768adf99a2c01472626b6eaeea17d (patch) | |
| tree | 4b07a473f7cf448d2eac5c6f808be427380ab34c /src/usr/targeting/common/predicates | |
| parent | 546c014e9b53011575917fcb66238ba28fcf5fe5 (diff) | |
| download | blackbird-hostboot-b3290cc00d1768adf99a2c01472626b6eaeea17d.tar.gz blackbird-hostboot-b3290cc00d1768adf99a2c01472626b6eaeea17d.zip | |
Fix predicateHwasChanged to only check subscribed bits
Found issue while running testGard11 in hwasGardTest.H
OBUS bricks were coming back changed but they did not change.
Change-Id: Icf2d27b06f8bf44dc2e0aefb881d9e2b50dcc677
Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/67476
Reviewed-by: Nicholas E. Bofferding <bofferdn@us.ibm.com>
Reviewed-by: Christian R. Geddes <crgeddes@us.ibm.com>
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Tested-by: FSP CI Jenkins <fsp-CI-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>
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src/usr/targeting/common/predicates')
| -rw-r--r-- | src/usr/targeting/common/predicates/predicatehwaschanged.C | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/src/usr/targeting/common/predicates/predicatehwaschanged.C b/src/usr/targeting/common/predicates/predicatehwaschanged.C index f694a4f85..1b801dbd6 100644 --- a/src/usr/targeting/common/predicates/predicatehwaschanged.C +++ b/src/usr/targeting/common/predicates/predicatehwaschanged.C @@ -39,6 +39,8 @@ // Other Host Boot Components // Targeting Component +#include <targeting/adapters/types.H> +#include <targeting/common/trace.H> #include <targeting/common/attributes.H> #include <targeting/common/target.H> #include <targeting/common/predicates/predicates.H> @@ -47,7 +49,6 @@ //****************************************************************************** // Macros //****************************************************************************** - #undef TARG_NAMESPACE #undef TARG_CLASS #undef TARG_FN @@ -58,6 +59,7 @@ namespace TARGETING { +extern TARG_TD_t g_trac_targeting; #define TARG_NAMESPACE "TARGETING::" #define TARG_CLASS "PredicateHwasChanged::" @@ -78,6 +80,8 @@ PredicateHwasChanged::~PredicateHwasChanged() PredicateHwasChanged& PredicateHwasChanged::reset() { + // resets to an invalid cleared state, + // user needs to identify a bit to check after this reset memset(&iv_valid,0x00,sizeof(iv_valid)); memset(&iv_desired,0x00,sizeof(iv_desired)); return *this; @@ -95,12 +99,25 @@ bool PredicateHwasChanged::operator()( hwasStateChangedFlag actual = { rawValue: 0}; CPPASSERT(sizeof(actual.attribute) <= sizeof(actual.rawValue)); + actual.attribute = i_pTarget->getAttr<ATTR_HWAS_STATE_CHANGED_FLAG>(); ATTR_HWAS_STATE_CHANGED_SUBSCRIPTION_MASK_type subscriptionMask = i_pTarget->getAttr<ATTR_HWAS_STATE_CHANGED_SUBSCRIPTION_MASK>(); - return ((subscriptionMask != 0) && + TRACDCOMP(g_trac_targeting, + TARG_FUNC "actual: 0x%.8X, subscription: 0x%.8X, iv_valid: 0x%.8X, iv_desired: 0x%.8X", + actual.rawValue, subscriptionMask, iv_valid.rawValue, iv_desired.rawValue); + + // Catch a coding error where nothing is being setup to check + TARG_ASSERT(iv_valid.rawValue != 0, "PredicateHwasChanged::operator() - " + "No valid bits being checked for change"); + + // Only check for change on the bits subscribed to. + // Skip if not monitoring any of those subscribed bits. + // Then verify the bits we want to compare are a match to their + // desired changed state + return (((iv_valid.rawValue & subscriptionMask) != 0) && (actual.rawValue & (iv_valid.rawValue & subscriptionMask)) == (iv_desired.rawValue & (iv_valid.rawValue & subscriptionMask))); |

