diff options
author | Yuji Mano <yuji.mano@am.sony.com> | 2009-06-15 17:04:13 -0700 |
---|---|---|
committer | Yuji Mano <yuji.mano@am.sony.com> | 2009-07-07 12:25:18 -0700 |
commit | 23b7bddecf5bf23f3ba6fd945c19a9ef6e4b3e2b (patch) | |
tree | 802899e9a93a42f7a49aeb002cd5fedf6412ebcc | |
parent | f9f5991385dd833fd01f85df9d7cd75c2a310762 (diff) | |
download | mars-src-23b7bddecf5bf23f3ba6fd945c19a9ef6e4b3e2b.tar.gz |
base: kernel fix idle signal
This patch is a fix to a kernel bug that causes the kernel to remain in the idle
wait state even when another MPU has sent a new signal to a workload that should
cause it to change state.
Signed-off-by: Yuji Mano <yuji.mano@am.sony.com>
Acked-by: Kazunori Asayama <asayama@sm.sony.co.jp>
-rw-r--r-- | base/src/mpu/kernel/kernel.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/base/src/mpu/kernel/kernel.c b/base/src/mpu/kernel/kernel.c index f30b1ec..b2bfc28 100644 --- a/base/src/mpu/kernel/kernel.c +++ b/base/src/mpu/kernel/kernel.c @@ -53,6 +53,7 @@ #define MARS_KERNEL_STATUS_BUSY 0x4 #define MARS_KERNEL_STATUS_RETRY 0x8 +#define MARS_KERNEL_UPDATE_HEADER_BITS_ACCESS 0x0 #define MARS_KERNEL_UPDATE_HEADER_BITS_STATE 0x1 #define MARS_KERNEL_UPDATE_HEADER_BITS_COUNTER 0x2 #define MARS_KERNEL_UPDATE_HEADER_BITS_COUNTER_RESET 0x4 @@ -243,7 +244,7 @@ static void update_header_bits(int mode, int block) MARS_BITS_SET(block_bits, BLOCK_WAITING, block_waiting); MARS_BITS_SET(block_bits, BLOCK_PRIORITY, block_priority); /* update header bits counter */ - } else { + } else if (mode) { /* reset is not specified so increment current block counter */ if (mode & MARS_KERNEL_UPDATE_HEADER_BITS_COUNTER) { block_counter = @@ -399,6 +400,9 @@ static uint64_t set_signal_bits(uint64_t bits, uint64_t signal) { MARS_BITS_SET(&bits, WORKLOAD_SIGNAL, signal); + /* update queue header bits access in case kernel is idle */ + update_header_bits(MARS_KERNEL_UPDATE_HEADER_BITS_ACCESS, 0); + return bits; } |