diff options
author | Matt Derksen <mderkse1@us.ibm.com> | 2018-08-28 10:59:25 -0500 |
---|---|---|
committer | Daniel M. Crowell <dcrowell@us.ibm.com> | 2018-09-12 10:31:05 -0500 |
commit | 7c5afbddbf0a3f795ad8404319e09a3ff00b11b8 (patch) | |
tree | dcf4b85818bc0351ddf43bdab591ec838269205f /src/usr/initservice | |
parent | b4a7e97c1806c09f33706975f102faefcfcf5708 (diff) | |
download | talos-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.C | 41 | ||||
-rw-r--r-- | src/usr/initservice/baseinitsvc/initservice.H | 11 |
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); |