aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYuji Mano <yuji.mano@am.sony.com>2009-02-17 14:38:50 -0800
committerYuji Mano <yuji.mano@am.sony.com>2009-02-17 14:38:50 -0800
commit5d5e2a729fd1cb4d6e4773d2ede235caabeff4ed (patch)
treeb442c833bd0f9b795c6c994db5cd789498d54a6d
parent70ad680e4bd51c437af179ea189a76d9bf96ffc0 (diff)
downloadmars-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.c17
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 */