summaryrefslogtreecommitdiffstats
path: root/src/usr/initservice
diff options
context:
space:
mode:
authorMatt Derksen <mderkse1@us.ibm.com>2018-08-28 10:59:25 -0500
committerDaniel M. Crowell <dcrowell@us.ibm.com>2018-09-12 10:31:05 -0500
commit7c5afbddbf0a3f795ad8404319e09a3ff00b11b8 (patch)
treedcf4b85818bc0351ddf43bdab591ec838269205f /src/usr/initservice
parentb4a7e97c1806c09f33706975f102faefcfcf5708 (diff)
downloadtalos-hostboot-7c5afbddbf0a3f795ad8404319e09a3ff00b11b8.tar.gz
talos-hostboot-7c5afbddbf0a3f795ad8404319e09a3ff00b11b8.zip
Additional tracing for shutdown events
Hit an issue where a shutdown was called but all that is traced is a msgQ pointer. These traces should help associate the msgQ pointer to an actual task being shutdown. Change-Id: Ic22fdde1a146eec90f26d557e8af1ddec3c85c4e CQ:SW443508 Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/65464 Reviewed-by: Christian R. Geddes <crgeddes@us.ibm.com> Tested-by: Jenkins Server <pfd-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> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Reviewed-by: Corey V. Swenson <cswenson@us.ibm.com> Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src/usr/initservice')
-rw-r--r--src/usr/initservice/baseinitsvc/initservice.C41
-rw-r--r--src/usr/initservice/baseinitsvc/initservice.H11
2 files changed, 42 insertions, 10 deletions
diff --git a/src/usr/initservice/baseinitsvc/initservice.C b/src/usr/initservice/baseinitsvc/initservice.C
index a40317a30..3e89d3196 100644
--- a/src/usr/initservice/baseinitsvc/initservice.C
+++ b/src/usr/initservice/baseinitsvc/initservice.C
@@ -75,9 +75,18 @@ namespace SPLESS
namespace INITSERVICE
{
+trace_desc_t *g_trac_initsvc = nullptr;
-trace_desc_t *g_trac_initsvc = NULL;
-TRAC_INIT(&g_trac_initsvc, "INITSVC", 2*KILOBYTE );
+/**
+ * @brief Instantiates trace object for INITSVC traces (if necessary)
+ */
+void initTrace()
+{
+ if ( nullptr == g_trac_initsvc )
+ {
+ TRACE::TracInit l_tmp(&g_trac_initsvc, "INITSVC", 2*KILOBYTE );
+ }
+}
/**
* @brief start() task entry procedure
@@ -86,6 +95,8 @@ TRAC_INIT(&g_trac_initsvc, "INITSVC", 2*KILOBYTE );
extern "C"
void* _start(void *ptr)
{
+ initTrace(); // initialize trace descriptor for module start
+
TRACFCOMP( g_trac_initsvc,
"Executing Initialization Service module." );
@@ -619,6 +630,7 @@ InitService::InitService( ) :
iv_iStep( 0 ),
iv_iSubStep( 0 )
{
+ initTrace(); // Initialize trace descriptor for external interface
mutex_init(&iv_registryMutex);
}
@@ -876,7 +888,9 @@ void InitService::_doShutdown(uint64_t i_status,
(i->msgPriority <= LAST_PRE_MEM_FLUSH_PRIORITY));
++i)
{
- TRACFCOMP(g_trac_initsvc,"notify priority=0x%x, queue=0x%x", i->msgPriority, i->msgQ );
+ TRACFCOMP(g_trac_initsvc, "notify priority=0x%x, queue=0x%x, "
+ "msgType=0x%x, componentID=0x%x", i->msgPriority, i->msgQ,
+ i->msgType, i->compID );
l_msg->type = i->msgType;
l_msg->data[0] = iv_worst_status;
(void)msg_sendrecv(i->msgQ,l_msg);
@@ -968,7 +982,8 @@ void doShutdownWithError ( uint64_t i_status, uint32_t i_error_info)
}
-bool InitService::registerShutdownEvent(msg_q_t i_msgQ,
+bool InitService::registerShutdownEvent(compId_t i_compID,
+ msg_q_t i_msgQ,
uint32_t i_msgType,
EventPriority_t i_priority)
{
@@ -993,8 +1008,13 @@ bool InitService::registerShutdownEvent(msg_q_t i_msgQ,
if(result)
{
+ TRACFCOMP(g_trac_initsvc, "InitService::registerShutdownEvent: "
+ "componentID=0x%x, queue=0x%x, msgType=0x%x, priority=0x%x",
+ i_compID, i_msgQ, i_msgType, i_priority);
+
// add it to the queue, we'll sort it before sending
- iv_regMsgQ.push_back(regMsgQ_t(i_msgQ, i_msgType, i_priority));
+ iv_regMsgQ.push_back( regMsgQ_t(i_msgQ, i_msgType,
+ i_priority, i_compID) );
}
}
@@ -1019,6 +1039,11 @@ bool InitService::unregisterShutdownEvent(msg_q_t i_msgQ)
// erase all instances
if(r->msgQ == i_msgQ)
{
+ TRACFCOMP(g_trac_initsvc,
+ "InitService::unregisterShutdownEvent: "
+ "componentID=0x%x, queue=0x%x, msgType=0x%x, priority=0x%x",
+ r->compID, r->msgQ, r->msgType, r->msgPriority);
+
result = true;
iv_regMsgQ.erase(r);
}
@@ -1054,12 +1079,14 @@ void InitService::GetIstepData( uint8_t & o_step,
/**
* @see src/include/usr/initservice/initservicif.H
*/
-bool registerShutdownEvent(msg_q_t i_msgQ,
+bool registerShutdownEvent(compId_t i_compID,
+ msg_q_t i_msgQ,
uint32_t i_msgType,
EventPriority_t i_priority)
{
return
- Singleton<InitService>::instance().registerShutdownEvent(i_msgQ,
+ Singleton<InitService>::instance().registerShutdownEvent(i_compID,
+ i_msgQ,
i_msgType,
i_priority);
}
diff --git a/src/usr/initservice/baseinitsvc/initservice.H b/src/usr/initservice/baseinitsvc/initservice.H
index c3b71584a..356b4b8f8 100644
--- a/src/usr/initservice/baseinitsvc/initservice.H
+++ b/src/usr/initservice/baseinitsvc/initservice.H
@@ -95,15 +95,18 @@ public:
msg_q_t msgQ;
uint32_t msgType;
uint32_t msgPriority;
+ compId_t compID;
/**
* @brief Constructor
*/
regMsgQ_t(msg_q_t i_msgQ,
uint32_t i_msgType,
- EventPriority_t i_priority) :
+ EventPriority_t i_priority,
+ compId_t i_compId) :
msgQ(i_msgQ), msgType(i_msgType),
- msgPriority((uint32_t)i_priority) {}
+ msgPriority((uint32_t)i_priority),
+ compID(i_compId) {}
// allow us to sort the queue based on priority
bool operator < (const regMsgQ_t &msg ) const
@@ -193,6 +196,7 @@ public:
/**
* @brief Register a service to be notified during shutdown
*
+ * @param[in] i_compID, component registering event
* @param[in] i_msgQ, A message queue to send a message to on shutdown
* @param[in] i_msgType, The message type to send.
* @param[in] i_priority, @See src/include/usr/initservice/initserviceif.H
@@ -200,7 +204,8 @@ public:
* @return true - i_msgQ registered
* false - i_msgQ already registered.- not registered again.
*/
- bool registerShutdownEvent(msg_q_t i_msgQ,
+ bool registerShutdownEvent(compId_t i_compID,
+ msg_q_t i_msgQ,
uint32_t i_msgType,
EventPriority_t i_priority);
OpenPOWER on IntegriCloud