summaryrefslogtreecommitdiffstats
path: root/src/usr/targeting/common/predicates
diff options
context:
space:
mode:
authorMatt Derksen <mderkse1@us.ibm.com>2018-10-15 10:22:11 -0500
committerDaniel M. Crowell <dcrowell@us.ibm.com>2018-11-29 17:06:46 -0600
commitb3290cc00d1768adf99a2c01472626b6eaeea17d (patch)
tree4b07a473f7cf448d2eac5c6f808be427380ab34c /src/usr/targeting/common/predicates
parent546c014e9b53011575917fcb66238ba28fcf5fe5 (diff)
downloadblackbird-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.C21
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)));
OpenPOWER on IntegriCloud