summaryrefslogtreecommitdiffstats
path: root/src/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'src/kernel')
-rw-r--r--src/kernel/intmsghandler.C4
-rw-r--r--src/kernel/ipc.C4
-rw-r--r--src/kernel/misc.C5
3 files changed, 7 insertions, 6 deletions
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 <kernel/intmsghandler.H>
#include <kernel/hbdescriptor.H>
#include <kernel/ipc.H>
+#include <kernel/timemgr.H>
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()
OpenPOWER on IntegriCloud