summaryrefslogtreecommitdiffstats
path: root/src/usr/intr
diff options
context:
space:
mode:
authorDoug Gilbert <dgilbert@us.ibm.com>2014-02-12 14:06:26 -0600
committerA. Patrick Williams III <iawillia@us.ibm.com>2014-02-13 12:59:22 -0600
commit66fdd0c61ee4ed4d3bf8254d03ede6b7fb4601a9 (patch)
tree8e0787cde47ab66ccd44fa590f757e8560b4364b /src/usr/intr
parent472bc1848b9ec2e96759701c4c6ce30c7c7e1327 (diff)
downloadblackbird-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.C14
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.
OpenPOWER on IntegriCloud