summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/usr/ipmi/ipmidd.C22
-rw-r--r--src/usr/ipmi/ipmidd.H10
-rw-r--r--src/usr/ipmi/ipmirp.C61
-rw-r--r--src/usr/ipmi/ipmirp.H7
4 files changed, 10 insertions, 90 deletions
diff --git a/src/usr/ipmi/ipmidd.C b/src/usr/ipmi/ipmidd.C
index da3130cbf..3462c1a8a 100644
--- a/src/usr/ipmi/ipmidd.C
+++ b/src/usr/ipmi/ipmidd.C
@@ -222,12 +222,6 @@ void IpmiDD::pollCtrl(void)
msg_send(iv_eventQ, msg);
iv_eagains = false;
}
- // Check on shutdown if idle
- else if (iv_shutdown_now)
- {
- mutex_unlock(&iv_mutex);
- break; // exit loop and terminate task
- }
}
// If we see the B2H_ATN, there's a response waiting
else if (ctrl & CTRL_B2H_ATN)
@@ -426,25 +420,9 @@ errlHndl_t IpmiDD::receive(IPMI::BTMessage* o_msg)
}
/**
- * @brief shutdown the device driver
- */
-void IpmiDD::handleShutdown(void)
-{
- IPMI_TRAC(ENTER_MRK "handle Shutdown" );
- mutex_lock(&iv_mutex);
- iv_shutdown_now = true; // signal poll controller to terminate
-
- // TODO: RTC 116600 mask interrupts
-
- mutex_unlock(&iv_mutex);
- IPMI_TRAC(EXIT_MRK "handle Shutdown" );
-}
-
-/**
* @brief Constructor
*/
IpmiDD::IpmiDD(void):
- iv_shutdown_now(false),
iv_eagains(false),
iv_eventQ(msg_q_create())
{
diff --git a/src/usr/ipmi/ipmidd.H b/src/usr/ipmi/ipmidd.H
index ef6ed814f..a9b8ada8c 100644
--- a/src/usr/ipmi/ipmidd.H
+++ b/src/usr/ipmi/ipmidd.H
@@ -107,11 +107,6 @@ class IpmiDD
errlHndl_t reset(void);
/**
- * @brief shutdown the device driver
- */
- void handleShutdown(void);
-
- /**
* @brief Get the queue on which IpmiDD publishes hardware events
*
* The events on the queue are consumed by IpmiRP. This "publish" approach
@@ -156,11 +151,6 @@ class IpmiDD
mutex_t iv_mutex;
/**
- * @brief Shut down resources
- */
- bool iv_shutdown_now;
-
- /**
* @brief True if we told the RP to try a write again
*/
bool iv_eagains;
diff --git a/src/usr/ipmi/ipmirp.C b/src/usr/ipmi/ipmirp.C
index c183d01e1..8afff0136 100644
--- a/src/usr/ipmi/ipmirp.C
+++ b/src/usr/ipmi/ipmirp.C
@@ -78,7 +78,6 @@ IpmiRP::IpmiRP(void):
iv_recv_buffer_size(IPMI::g_recv_buffer_size),
iv_retries(IPMI::g_retries),
iv_shutdown_msg(NULL),
- iv_shutdown_now(false),
iv_graceful_shutdown_pending(false),
iv_chassis_power_mod(IPMI::CHASSIS_POWER_OFF)
{
@@ -180,17 +179,11 @@ void IpmiRP::timeoutThread(void)
while (true)
{
mutex_lock(&iv_mutex);
- while ((iv_timeoutq.size() == 0) && !iv_shutdown_now)
+ while ((iv_timeoutq.size() == 0))
{
sync_cond_wait(&iv_cv, &iv_mutex);
}
- // shutting down...
- if (iv_shutdown_now)
- {
- break; // return and terminate thread
- }
-
msg_t*& msq_msg = iv_timeoutq.front();
IPMI::Message* msg = static_cast<IPMI::Message*>(msq_msg->extra_data);
@@ -554,7 +547,8 @@ void IpmiRP::attach(void)
msg_q_t mq = Singleton<IpmiDD>::instance().eventQueue();
- while (!iv_shutdown_now)
+ /* FIXME: Never shut down */
+ while (1)
{
/* Forward it into the internal message queue */
msg_send(iv_msgQ, msg_wait(mq));
@@ -741,24 +735,15 @@ void IpmiRP::execute(void)
}
// Once quiesced, reply to shutdown msg and exit.
- // For IPMI based systems if we received the soft power off (graceful
- // shutdown) request then we have more processing to do, so respond
- // to the first shutdown message and instead of exiting we go back
- // and wait for the post memory flush shutdown message then send a
- // power off command to the BMC
+ // Shutdown simply puts us in a state we deny all further requests bar
+ // those from PnorIpmiDD. Access to the PNOR must be provided right up
+ // until we call the shutdown syscall, so there's no point at which we
+ // can deallocate the resources consumed by IpmiRP, IpmiDD or
+ // PnorIpmiDD.
if (l_shutdown_pending && iv_respondq.empty() && iv_sendq.empty())
{
- if(iv_graceful_shutdown_pending)
- {
-
- IPMI_TRAC(INFO_MRK "reply to the MSG_STATE_SHUTDOWN message");
- msg_respond(iv_msgQ, iv_shutdown_msg);
- }
- else
- {
- shutdownNow();
- break; // exit loop and terminate task
- }
+ IPMI_TRAC(INFO_MRK "reply to the MSG_STATE_SHUTDOWN message");
+ msg_respond(iv_msgQ, iv_shutdown_msg);
}
}
@@ -946,32 +931,6 @@ void IpmiRP::queueForResponse(IPMI::Message& i_msg)
return;
}
-///
-/// @brief handle shutdown.
-/// Queued messages to send have been sent and all responses complete.
-/// Now that we are quiesced, deallocate resources and respond to the
-/// shutdown message
-///
-void IpmiRP::shutdownNow(void)
-{
- IPMI_TRAC(INFO_MRK "IpmiRP::shutdownNow() ");
-
- mutex_lock(&iv_mutex);
- iv_shutdown_now = true; // Shutdown underway
-
- // Wake up Time out thread to terminate.
- sync_cond_signal(&iv_cv);
- mutex_unlock(&iv_mutex);
-
- // TODO: RTC 116600 unRegisterMsgQ for interrupts
-
- // Shut down device driver
- Singleton<IpmiDD>::instance().handleShutdown();
-
- // reply back to shutdown requester that we are shutdown
- msg_respond(iv_msgQ, iv_shutdown_msg);
-}
-
namespace IPMI
{
///
diff --git a/src/usr/ipmi/ipmirp.H b/src/usr/ipmi/ipmirp.H
index 4bf277bff..0f9b02302 100644
--- a/src/usr/ipmi/ipmirp.H
+++ b/src/usr/ipmi/ipmirp.H
@@ -226,12 +226,6 @@ class IpmiRP
*/
void lastChanceEventHandler(void);
- /**
- * @brief Clean up resources and reply to shutdown msg
- * @param[in] void
- */
- void shutdownNow(void);
-
msg_q_t iv_msgQ; //!< ipmi mesage queue
IPMI::send_q_t iv_sendq; //!< msg to send queue
IPMI::timeout_q_t iv_timeoutq; //!< msgs waiting for a timeout
@@ -261,7 +255,6 @@ class IpmiRP
// Shutdown
msg_t * iv_shutdown_msg; //!< shutdown msg to respond to
- bool iv_shutdown_now; //!< shutdown now
//!< handle ipmi chassis power off request
bool iv_graceful_shutdown_pending;
OpenPOWER on IntegriCloud