diff options
author | Yuji Mano <yuji.mano@am.sony.com> | 2009-02-17 14:38:50 -0800 |
---|---|---|
committer | Yuji Mano <yuji.mano@am.sony.com> | 2009-02-17 14:38:50 -0800 |
commit | 5d5e2a729fd1cb4d6e4773d2ede235caabeff4ed (patch) | |
tree | b442c833bd0f9b795c6c994db5cd789498d54a6d | |
parent | 70ad680e4bd51c437af179ea189a76d9bf96ffc0 (diff) | |
download | mars-src-5d5e2a729fd1cb4d6e4773d2ede235caabeff4ed.tar.gz |
base: kernel scheduler block counter not updated
This fixes a bug in the kernel scheduler where the block counter was not being
properly incremented for each block with ready workloads, causing workloads to
be scheduled unfairly.
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 | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/base/src/mpu/kernel/kernel.c b/base/src/mpu/kernel/kernel.c index 32d9b97..45f975d 100644 --- a/base/src/mpu/kernel/kernel.c +++ b/base/src/mpu/kernel/kernel.c @@ -708,16 +708,17 @@ static int reserve_workload(void) uint16_t block_counter = MARS_BITS_GET(bits, BLOCK_COUNTER); /* block is ready so check scheduling conditions */ - if (block_ready && - (block < 0 || block_priority > max_block_priority || - (block_priority == max_block_priority && - block_counter > max_block_counter))) { - block = i; - max_block_priority = block_priority; - max_block_counter = block_counter; + if (block_ready) { + if (block < 0 || block_priority > max_block_priority || + (block_priority == max_block_priority && + block_counter > max_block_counter)) { + block = i; + max_block_priority = block_priority; + max_block_counter = block_counter; + } /* increment block counter */ - update_header_bits_counter(block, 0); + update_header_bits_counter(i, 0); } /* block is waiting so check block */ |