diff options
author | Doug Gilbert <dgilbert@us.ibm.com> | 2013-12-19 14:25:06 -0600 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2014-01-10 17:04:25 -0600 |
commit | 613d36e02e5ce4e5b69cbb02483e9fa352666ecd (patch) | |
tree | 7a17f70f9a5b33ab4ddd6acebb8d0f4ff135594a /src/kernel | |
parent | 7df8e6fc5362bb57e49b2e7d8e256cac2785e726 (diff) | |
download | talos-hostboot-613d36e02e5ce4e5b69cbb02483e9fa352666ecd.tar.gz talos-hostboot-613d36e02e5ce4e5b69cbb02483e9fa352666ecd.zip |
IPC deadlock
CQ: SW239987
Change-Id: I2a33e767916cd80ae3b4acc604104963cbc648ac
Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/7828
Tested-by: Jenkins Server
Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/kernel')
-rw-r--r-- | src/kernel/intmsghandler.C | 2 | ||||
-rw-r--r-- | src/kernel/ipc.C | 10 |
2 files changed, 7 insertions, 5 deletions
diff --git a/src/kernel/intmsghandler.C b/src/kernel/intmsghandler.C index e8fd5e66c..d3e6a8298 100644 --- a/src/kernel/intmsghandler.C +++ b/src/kernel/intmsghandler.C @@ -5,7 +5,7 @@ /* */ /* IBM CONFIDENTIAL */ /* */ -/* COPYRIGHT International Business Machines Corp. 2011,2013 */ +/* COPYRIGHT International Business Machines Corp. 2011,2014 */ /* */ /* p1 */ /* */ diff --git a/src/kernel/ipc.C b/src/kernel/ipc.C index 3f522c4ee..6a63225fc 100644 --- a/src/kernel/ipc.C +++ b/src/kernel/ipc.C @@ -5,7 +5,7 @@ /* */ /* IBM CONFIDENTIAL */ /* */ -/* COPYRIGHT International Business Machines Corp. 2013 */ +/* COPYRIGHT International Business Machines Corp. 2013,2014 */ /* */ /* p1 */ /* */ @@ -62,7 +62,7 @@ void KernelIpc::send(uint64_t i_q, msg_t * i_msg) dest_addr += dest_hrmor; dest_addr |= 0x8000000000000000ul; - printkd("IPC Dest addr %lx\n",dest_addr); + printkd("IPC Dest addr %lx Q_id:%lx\n",dest_addr,i_q); // pointer to the ipc_data_area in the destination node ipc_data_area_t * p_dest = @@ -70,8 +70,8 @@ void KernelIpc::send(uint64_t i_q, msg_t * i_msg) // get lock on IPC data area in other node while(false == __sync_bool_compare_and_swap(&(p_dest->msg_queue_id), - 0, - 0xFFFFFFFFFFFFFFFFul)) + IPC_DATA_AREA_CLEAR, + IPC_DATA_AREA_LOCKED)) { setThreadPriorityLow(); } @@ -83,6 +83,8 @@ void KernelIpc::send(uint64_t i_q, msg_t * i_msg) p_dest->msg_queue_id = i_q; // set destination queue id lwsync(); + printkd("IPC send from PIR %lx to PIR %x\n",getPIR(),p_dest->pir); + // send IPI InterruptMsgHdlr::sendIPI(p_dest->pir); |