Attn: Add TI info command field to valid check
Added an additional check of command == 0xa1 in the TI info data area to
determine if the TI info data has been populated.
Signed-off-by: Ben Tyner <ben.tyner@ibm.com>
Change-Id: I3f8c43c4fdcb086acb66d235c9b53712d21b58c1
diff --git a/attn/attn_handler.cpp b/attn/attn_handler.cpp
index b8181b8..d1f028d 100644
--- a/attn/attn_handler.cpp
+++ b/attn/attn_handler.cpp
@@ -298,6 +298,8 @@
}
}
+ bool tiInfoValid = false; // TI area data not valid or not available
+
// If TI area exists and is marked valid we can assume TI occurred
if ((nullptr != tiInfo) && (0 != tiInfo[0]))
{
@@ -311,27 +313,36 @@
trace<level::INFO>(ss.str().c_str());
ss.str(std::string());
- ss << "TI data hb_terminate_type = "
- << (int)tiDataArea->hbTerminateType;
- trace<level::INFO>(ss.str().c_str());
- ss.str(std::string());
-
- ss << "TI data SRC format = " << (int)tiDataArea->srcFormat;
- trace<level::INFO>(ss.str().c_str());
- ss.str(std::string());
-
- ss << "TI data source = " << (int)tiDataArea->source;
- trace<level::INFO>(ss.str().c_str());
- ss.str(std::string());
-
- if (true == (i_attention->getConfig()->getFlag(enTerminate)))
+ // Another check for valid TI Info since it has been seen that
+ // tiInfo[0] != 0 but TI info is not valid
+ if (0xa1 == tiDataArea->command)
{
- // Call TI special attention handler
- rc = tiHandler(tiDataArea);
+ tiInfoValid = true;
+
+ // trace some more data since TI info appears valid
+ ss << "TI data hb_terminate_type = "
+ << (int)tiDataArea->hbTerminateType;
+ trace<level::INFO>(ss.str().c_str());
+ ss.str(std::string());
+
+ ss << "TI data SRC format = " << (int)tiDataArea->srcFormat;
+ trace<level::INFO>(ss.str().c_str());
+ ss.str(std::string());
+
+ ss << "TI data source = " << (int)tiDataArea->source;
+ trace<level::INFO>(ss.str().c_str());
+ ss.str(std::string());
+
+ if (true == (i_attention->getConfig()->getFlag(enTerminate)))
+ {
+ // Call TI special attention handler
+ rc = tiHandler(tiDataArea);
+ }
}
}
- // TI area not valid or not available
- else
+
+ // If TI area not valid or not available
+ if (false == tiInfoValid)
{
trace<level::INFO>("TI info NOT available");