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/usr/mbox/mailboxsp.C | |
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/usr/mbox/mailboxsp.C')
-rw-r--r-- | src/usr/mbox/mailboxsp.C | 14 |
1 files changed, 5 insertions, 9 deletions
diff --git a/src/usr/mbox/mailboxsp.C b/src/usr/mbox/mailboxsp.C index e8a9c8865..abcc93b76 100644 --- a/src/usr/mbox/mailboxsp.C +++ b/src/usr/mbox/mailboxsp.C @@ -239,9 +239,7 @@ void MailboxSp::msgHandler() err = handleInterrupt(); // Respond to the interrupt handler regardless of err - msg->data[0] = 0; - msg->data[1] = 0; - msg_respond(iv_msgQ,msg); + INTR::sendEOI(iv_msgQ,msg); // err will be set if scom failed in mbox DD // or MBOX_DATA_WRITE_ERR - serious - assert @@ -408,16 +406,14 @@ void MailboxSp::msgHandler() isync(); *ipc_msg = KernelIpc::ipc_data_area.msg_payload; lwsync(); - // Signal message has been read, but keep area locked - // until eoi has been sent + // EOI has already been sent by intrp. Simply clear + // ipc area so another message can be sent KernelIpc::ipc_data_area.msg_queue_id = - IPC_DATA_AREA_READ; + IPC_DATA_AREA_CLEAR; handleIPC(static_cast<queue_id_t>(msg_q_id), ipc_msg); } - msg->data[0] = 0; - msg->data[1] = 0; - msg_respond(iv_msgQ,msg); + INTR::sendEOI(iv_msgQ,msg); } break; |