aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYuji Mano <yuji.mano@am.sony.com>2009-03-26 15:44:48 -0700
committerYuji Mano <yuji.mano@am.sony.com>2009-03-26 17:24:07 -0700
commit229907a0697aa203686ce18260a05564adb4f820 (patch)
tree1e9690b3b3ebecb4df23db7d04e80a0c836cede6
parentda2b410129b892fcf963a090c8d57b024ed0e281 (diff)
downloadmars-src-229907a0697aa203686ce18260a05564adb4f820.tar.gz
base: Fix get workload ea
This patch fixes a bug introduced by the workload-num-blocks-reduce-code-size.patch that caused internal function get_workload_ea() to return the wrong address. Signed-off-by: Yuji Mano <yuji.mano@am.sony.com> Acked-by: Kazunori Asayama <asayama@sm.sony.co.jp>
-rw-r--r--base/src/host/lib/callback_cell.c4
-rw-r--r--base/src/host/lib/workload_queue.c6
-rw-r--r--base/src/mpu/kernel/kernel.c5
3 files changed, 11 insertions, 4 deletions
diff --git a/base/src/host/lib/callback_cell.c b/base/src/host/lib/callback_cell.c
index 32746de..891596c 100644
--- a/base/src/host/lib/callback_cell.c
+++ b/base/src/host/lib/callback_cell.c
@@ -58,8 +58,10 @@ static inline uint64_t get_workload_ea(uint64_t queue_ea, int workload_id)
mars_ea_get_uint64(queue_ea +
offsetof(struct mars_workload_queue_header,
context_ea));
+ int context_index =
+ workload_id - (workload_id / MARS_WORKLOAD_PER_BLOCK) - 1;
- return context_ea + workload_id * MARS_WORKLOAD_CONTEXT_SIZE;
+ return context_ea + context_index * MARS_WORKLOAD_CONTEXT_SIZE;
}
static void callback_process(struct mars_context *mars, uint16_t workload_id)
diff --git a/base/src/host/lib/workload_queue.c b/base/src/host/lib/workload_queue.c
index adb12e7..8a9f3c3 100644
--- a/base/src/host/lib/workload_queue.c
+++ b/base/src/host/lib/workload_queue.c
@@ -49,14 +49,16 @@
#include "kernel_internal_types.h"
#include "workload_internal_types.h"
-static inline uint64_t get_workload_ea(uint64_t queue_ea, int workload_id)
+static inline uint64_t get_workload_ea(uint64_t queue_ea, uint16_t workload_id)
{
uint64_t context_ea =
mars_ea_get_uint64(queue_ea +
offsetof(struct mars_workload_queue_header,
context_ea));
+ int context_index =
+ workload_id - (workload_id / MARS_WORKLOAD_PER_BLOCK) - 1;
- return context_ea + MARS_WORKLOAD_CONTEXT_SIZE * workload_id;
+ return context_ea + context_index * MARS_WORKLOAD_CONTEXT_SIZE;
}
static inline uint64_t get_block_ea(uint64_t queue_ea, int block)
diff --git a/base/src/mpu/kernel/kernel.c b/base/src/mpu/kernel/kernel.c
index 0e5619a..4188fc2 100644
--- a/base/src/mpu/kernel/kernel.c
+++ b/base/src/mpu/kernel/kernel.c
@@ -132,7 +132,10 @@ static struct mars_workload_context *get_workload(void)
static uint64_t get_workload_ea(uint16_t id)
{
- return queue_header.context_ea + MARS_WORKLOAD_CONTEXT_SIZE * id;
+ int context_index = id - (id / MARS_WORKLOAD_PER_BLOCK) - 1;
+
+ return queue_header.context_ea +
+ context_index * MARS_WORKLOAD_CONTEXT_SIZE;
}
static struct mars_workload_context *get_workload_by_id(uint16_t id)