From 4bbf6d1a3927255714b22d1bd95ec19a59781b04 Mon Sep 17 00:00:00 2001 From: Doug Gilbert Date: Thu, 30 Jan 2014 23:50:15 -0600 Subject: Missing HB interrupts CQ: SW244546 Change-Id: Ice49cdd7e4acd8168ec2cfc29e1970c5daa49780 Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/8666 Tested-by: Jenkins Server Reviewed-by: A. Patrick Williams III --- src/kernel/intmsghandler.C | 4 ++-- src/kernel/ipc.C | 4 ++-- src/kernel/misc.C | 5 +++-- 3 files changed, 7 insertions(+), 6 deletions(-) (limited to 'src/kernel') diff --git a/src/kernel/intmsghandler.C b/src/kernel/intmsghandler.C index d3e6a8298..1443847e1 100644 --- a/src/kernel/intmsghandler.C +++ b/src/kernel/intmsghandler.C @@ -173,7 +173,7 @@ void InterruptMsgHdlr::addCpuCore(uint64_t i_pir) } } -void InterruptMsgHdlr::sendIPI(uint64_t i_pir) +void InterruptMsgHdlr::sendIPI(uint64_t i_pir, uint8_t i_favor) { uint64_t mfrrAddress = cv_ipc_base_address; mfrrAddress += mmio_offset(i_pir); @@ -181,7 +181,7 @@ void InterruptMsgHdlr::sendIPI(uint64_t i_pir) mfrrAddress |= 0x8000000000000000ul; - register uint8_t data = 0; + register uint8_t data = i_favor; eieio(); sync(); MAGIC_INSTRUCTION(MAGIC_SIMICS_CORESTATESAVE); diff --git a/src/kernel/ipc.C b/src/kernel/ipc.C index 6a63225fc..4741a381c 100644 --- a/src/kernel/ipc.C +++ b/src/kernel/ipc.C @@ -85,8 +85,8 @@ void KernelIpc::send(uint64_t i_q, msg_t * i_msg) printkd("IPC send from PIR %lx to PIR %x\n",getPIR(),p_dest->pir); - // send IPI - InterruptMsgHdlr::sendIPI(p_dest->pir); + // send IPI - use this_node + 10 as favor level of interrupt + InterruptMsgHdlr::sendIPI(p_dest->pir,this_node + 10); // The message allocation is freed here to make msg_send for IPC // messages behave the same as non-IPC msg_send; that is, the message diff --git a/src/kernel/misc.C b/src/kernel/misc.C index 815c029d1..d109b31fc 100644 --- a/src/kernel/misc.C +++ b/src/kernel/misc.C @@ -37,6 +37,7 @@ #include #include #include +#include extern "C" void kernel_shutdown(size_t, uint64_t, uint64_t, uint64_t, @@ -224,7 +225,7 @@ namespace KernelMisc // Save away the current timebase. All threads are in this object // now so they're not going to be using the time for anything else. - iv_timebase = getTB(); + iv_timebase = getTB() + TimeManager::convertSecToTicks(1,0); } extern "C" void kernel_execute_winkle(task_t* t); @@ -309,7 +310,7 @@ namespace KernelMisc // Save away the current timebase. All threads are in this object // now so they're not going to be using the time for anything else. - iv_timebase = getTB(); + iv_timebase = getTB() + TimeManager::convertSecToTicks(1,0); } void WinkleAll::activeMainWork() -- cgit v1.2.1