diff options
| author | Doug Gilbert <dgilbert@us.ibm.com> | 2014-02-12 14:06:26 -0600 |
|---|---|---|
| committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2014-02-13 12:59:22 -0600 |
| commit | 66fdd0c61ee4ed4d3bf8254d03ede6b7fb4601a9 (patch) | |
| tree | 8e0787cde47ab66ccd44fa590f757e8560b4364b /src/usr/intr | |
| parent | 472bc1848b9ec2e96759701c4c6ce30c7c7e1327 (diff) | |
| download | blackbird-hostboot-66fdd0c61ee4ed4d3bf8254d03ede6b7fb4601a9.tar.gz blackbird-hostboot-66fdd0c61ee4ed4d3bf8254d03ede6b7fb4601a9.zip | |
IPC multinode deadlock
Change-Id: Id3a344bc5ec75abeb9622834589f031f903a60fe
CQ: SW246760
Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/8804
Tested-by: Jenkins Server
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/usr/intr')
| -rw-r--r-- | src/usr/intr/intrrp.C | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/src/usr/intr/intrrp.C b/src/usr/intr/intrrp.C index c9b3f7edb..11b05171d 100644 --- a/src/usr/intr/intrrp.C +++ b/src/usr/intr/intrrp.C @@ -464,7 +464,7 @@ void IntrRp::msgHandler() { // If something is registered for IPIs and // it has not already been handled then handle - if(r != iv_registry.end() && + if(r != iv_registry.end() && KernelIpc::ipc_data_area.msg_queue_id != IPC_DATA_AREA_READ) { @@ -1236,7 +1236,17 @@ void IntrRp::initInterruptPresenter(const PIR_t i_pir) const i_pir.word, cpuOffsetAddr(i_pir)); - *cppr = 0xff; // Allow all interrupts + if(i_pir.word == iv_masterCpu.word) + { + *cppr = 0xff; // Allow all interrupts + } + else + { + // Allow Wake-up IPIs only + // link regs route non-IPIs to iv_masterCPU) anyway + // IPC IPIs are only directed at iv_masterCpu + *cppr = IPI_USR_PRIO + 1; + } // Links are intended to be set up in rings. If an interrupt ends up // where it started, it gets rejected by hardware. |

