diff options
author | Yuji Mano <yuji.mano@am.sony.com> | 2009-03-26 15:44:48 -0700 |
---|---|---|
committer | Yuji Mano <yuji.mano@am.sony.com> | 2009-03-26 17:24:07 -0700 |
commit | 229907a0697aa203686ce18260a05564adb4f820 (patch) | |
tree | 1e9690b3b3ebecb4df23db7d04e80a0c836cede6 | |
parent | da2b410129b892fcf963a090c8d57b024ed0e281 (diff) | |
download | mars-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.c | 4 | ||||
-rw-r--r-- | base/src/host/lib/workload_queue.c | 6 | ||||
-rw-r--r-- | base/src/mpu/kernel/kernel.c | 5 |
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) |