diff options
author | Dean Sanner <dsanner@us.ibm.com> | 2014-08-26 14:43:07 -0500 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2014-09-11 10:24:27 -0500 |
commit | c8b129aa555e27b5be7fb3f296e8f15f9a3348f1 (patch) | |
tree | 9a674c30ef0d1ad73455242b2531856085756382 /src/include/usr/intr | |
parent | 634b0762373b2f33226ddd706db5c1f13c3ea9d2 (diff) | |
download | talos-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.H | 32 |
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 |