summaryrefslogtreecommitdiffstats
path: root/src/include/usr/intr
diff options
context:
space:
mode:
authorDean Sanner <dsanner@us.ibm.com>2014-08-26 14:43:07 -0500
committerA. Patrick Williams III <iawillia@us.ibm.com>2014-09-11 10:24:27 -0500
commitc8b129aa555e27b5be7fb3f296e8f15f9a3348f1 (patch)
tree9a674c30ef0d1ad73455242b2531856085756382 /src/include/usr/intr
parent634b0762373b2f33226ddd706db5c1f13c3ea9d2 (diff)
downloadtalos-hostboot-c8b129aa555e27b5be7fb3f296e8f15f9a3348f1.tar.gz
talos-hostboot-c8b129aa555e27b5be7fb3f296e8f15f9a3348f1.zip
Use non blocking messages in intRP to prevent trace deadlock
Change-Id: I14cd978a7a102f75e4829d5daa369946e766e874 CQ: SW274049 Backport: release-fips820 Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/13025 Tested-by: Jenkins Server Reviewed-by: Douglas R. Gilbert <dgilbert@us.ibm.com> Reviewed-by: Thi N. Tran <thi@us.ibm.com> Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/include/usr/intr')
-rw-r--r--src/include/usr/intr/interrupt.H32
1 files changed, 30 insertions, 2 deletions
diff --git a/src/include/usr/intr/interrupt.H b/src/include/usr/intr/interrupt.H
index c85cf8207..fca2ad7c3 100644
--- a/src/include/usr/intr/interrupt.H
+++ b/src/include/usr/intr/interrupt.H
@@ -5,7 +5,9 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* COPYRIGHT International Business Machines Corp. 2011,2014 */
+/* Contributors Listed Below - COPYRIGHT 2011,2014 */
+/* [+] International Business Machines Corp. */
+/* */
/* */
/* Licensed under the Apache License, Version 2.0 (the "License"); */
/* you may not use this file except in compliance with the License. */
@@ -147,6 +149,8 @@ namespace INTR
MSG_INTR_MPIPL_CLEANUP, //!< Clean up interrupts on MPIPL
MSG_INTR_ADD_CPU_TIMEOUT, //!< Check for a timeout waiting for a core.
MSG_INTR_ADD_HBNODE, //!< Add node info for MPIPL
+ MSG_INTR_EOI, //!< Issue EOI when received
+ MSG_INTR_DRAIN_QUEUE, //!< Allow intrp to drain Q of EOI
};
/**
@@ -167,8 +171,12 @@ namespace INTR
* @note when an interrupt of type i_msg_type occurrs, the
* interrupt presenter sends a sync message with type i_msg_type to
* i_msgQ with FULL IRSN word 0 and then waits for a response.
- * the full IRSN has the node/chip/ISN, not just the ISN
+ * Once the underlying hardware has been cleaned up (not driving
+ * the interrupt) then sendEOI should be called. Note the msg
+ * must not be modified by the recipient. The full IRSN has the
+ * node/chip/ISN, not just the ISN
* @see makeXISR
+
*
* @note When HB is shutting down the interrupt presenter will send
* a message to all registered queues with a sync message type of
@@ -179,6 +187,19 @@ namespace INTR
ext_intr_t i_intr_type);
/**
+ * Responds to the interrupt message and lets the interrupt
+ * resource provide know that it can send the End Of Interrupt
+ * to the hardware. If the interrupt is being driven at this point
+ * a new interrupt will be fired with an additional message placed
+ * on the client's Queue
+ * @param[in] i_q message queue
+ * @param[in] i_msg The message that was sent to indicate an
+ interrupt. This must remain unchanged
+ * between receipt and sending the EOI
+ */
+ void sendEOI(msg_q_t i_q, msg_t* i_msg);
+
+ /**
* Un register a message queue from the interrupt handler
* @param[in] i_type the type of interrupt (ISN value)
* @return The message queue that was unregistered with i_type
@@ -221,6 +242,13 @@ namespace INTR
*/
errlHndl_t addHbNode(uint64_t i_hbNode);
+ /**
+ * Method to send synchronous message to interrupt RP. Intent
+ * is to allow any pending EOIs (since they are async) to
+ * drain */
+ void drainQueue(void);
+
+
};
#endif
OpenPOWER on IntegriCloud