Update DSTL_FIR callouts in the event of failure to analyze an OCMB
Change-Id: I40c17703ad032aa98f02b43d9cb321b7fc86fea3
Signed-off-by: Caleb Palmer <cnpalmer@us.ibm.com>
diff --git a/analyzer/filter-root-cause.cpp b/analyzer/filter-root-cause.cpp
index 1a594b7..accf275 100644
--- a/analyzer/filter-root-cause.cpp
+++ b/analyzer/filter-root-cause.cpp
@@ -377,6 +377,37 @@
//------------------------------------------------------------------------------
+bool __findOcmbAttnBits(const std::vector<libhei::Signature>& i_list,
+ libhei::Signature& o_rootCause,
+ const RasDataParser& i_rasData)
+{
+ using namespace util::pdbg;
+
+ // If we have any attentions from an OCMB, assume isolation to the OCMBs
+ // was successful and the ATTN_FROM_OCMB flag does not need to be checked.
+ for (const auto s : i_list)
+ {
+ if (TYPE_OCMB == getTrgtType(getTrgt(s.getChip())))
+ {
+ return false;
+ }
+ }
+
+ for (const auto s : i_list)
+ {
+ if (1 < i_rasData.getVersion(s) &&
+ i_rasData.isFlagSet(s, RasDataParser::RasDataFlags::ATTN_FROM_OCMB))
+ {
+ o_rootCause = s;
+ return true;
+ }
+ }
+
+ return false; // default, nothing found
+}
+
+//------------------------------------------------------------------------------
+
bool __findNonExternalCs(const std::vector<libhei::Signature>& i_list,
libhei::Signature& o_rootCause)
{
@@ -834,6 +865,14 @@
return true;
}
+ // Version 2 of the RAS data files. If no other viable root cause has
+ // been found, check for any signatures with the ATTN_FROM_OCMB flag in
+ // case there was an attention from an inaccessible OCMB.
+ if (__findOcmbAttnBits(list, o_rootCause, i_rasData))
+ {
+ return true;
+ }
+
// Look for any system checkstop attentions that originated from within the
// chip that reported the attention. In other words, no external checkstop
// attentions.