Add root cause filtering for RDF_FIR bit 16 and 41

RDF_FIR bit 41 can cause bit 16 as a side effect,
therefore, this adds some special filtering to
blame bit 41 if both bits are found set.

Change-Id: I4f3bf4f12315923ac810e404a1066d4d09c7525f
Signed-off-by: Caleb Palmer <cnpalmer@us.ibm.com>
diff --git a/analyzer/filter-root-cause.cpp b/analyzer/filter-root-cause.cpp
index 5c4edf9..21537c0 100644
--- a/analyzer/filter-root-cause.cpp
+++ b/analyzer/filter-root-cause.cpp
@@ -809,6 +809,23 @@
             }
         }
     }
+
+    // Odyssey RDF_FIR
+    static const auto rdf_fir = __hash("RDF_FIR");
+
+    // RDF_FIR[41] can be the root cause of RDF_FIR[16], so if bit 16 is on,
+    // check if bit 41 is also on.
+    if (rdf_fir == o_rootCause.getId() && 16 == o_rootCause.getBit())
+    {
+        // Look for RDF_FIR[41]
+        auto itr = std::find_if(list.begin(), list.end(), [&](const auto& t) {
+            return (rdf_fir == t.getId() && 41 == t.getBit());
+        });
+        if (list.end() != itr)
+        {
+            o_rootCause = *itr;
+        }
+    }
 }
 
 //------------------------------------------------------------------------------