diff options
author | Yuji Mano <yuji.mano@am.sony.com> | 2009-03-19 13:54:07 -0700 |
---|---|---|
committer | Yuji Mano <yuji.mano@am.sony.com> | 2009-03-23 12:18:28 -0700 |
commit | 2454fe58e7b939e2830a5a51a9a6815d1494d2d0 (patch) | |
tree | 8e101adf302e6d1e6728736570e6d7a438eeb272 | |
parent | 8b90ccc10278c454b8aecd2c2e58034f50eead44 (diff) | |
download | mars-src-2454fe58e7b939e2830a5a51a9a6815d1494d2d0.tar.gz |
base: Context system sanity check
This patch adds a simple system sanity check at MARS context creation.
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/context.c | 38 |
1 files changed, 37 insertions, 1 deletions
diff --git a/base/src/host/lib/context.c b/base/src/host/lib/context.c index 1320d85..d6c7ad5 100644 --- a/base/src/host/lib/context.c +++ b/base/src/host/lib/context.c @@ -43,10 +43,14 @@ #include "mars/base.h" #include "mars/context.h" #include "mars/error.h" +#include "mars/mutex.h" #include "mars/workload_queue.h" -#include "context_internal.h" +#include "callback_internal_types.h" #include "kernel_internal_types.h" +#include "workload_internal_types.h" + +#include "context_internal.h" uint32_t mars_get_ticks(void) { @@ -148,6 +152,33 @@ static int mpu_contexts_destroy(struct mars_context *mars) return MARS_SUCCESS; } +static int system_sanity_check(void) +{ + if ((MARS_CALLBACK_ARGS_SIZE != + sizeof(struct mars_callback_args)) || + (MARS_CALLBACK_QUEUE_SIZE != + sizeof(struct mars_callback_queue)) || + (MARS_KERNEL_PARAMS_SIZE != + sizeof(struct mars_kernel_params)) || + (MARS_MUTEX_SIZE != + sizeof(struct mars_mutex)) || + (MARS_WORKLOAD_CALLBACK_SIZE != + sizeof(struct mars_workload_callback)) || + (MARS_WORKLOAD_CONTEXT_SIZE != + sizeof(struct mars_workload_context)) || + (MARS_WORKLOAD_MODULE_SIZE != + sizeof(struct mars_workload_module)) || + (MARS_WORKLOAD_QUEUE_SIZE != + sizeof(struct mars_workload_queue)) || + (MARS_WORKLOAD_QUEUE_HEADER_SIZE != + sizeof(struct mars_workload_queue_header)) || + (MARS_WORKLOAD_QUEUE_BLOCK_SIZE != + sizeof(struct mars_workload_queue_block))) + return MARS_ERROR_INTERNAL; + + return MARS_SUCCESS; +} + int mars_context_create(struct mars_context **mars_ret, uint32_t num_mpus, uint8_t shared) { @@ -168,6 +199,11 @@ int mars_context_create(struct mars_context **mars_ret, uint32_t num_mpus, if (!num_mpus) num_mpus = num_mpus_max; + /* system sanity check */ + ret = system_sanity_check(); + if (ret != MARS_SUCCESS) + return ret; + /* lock mutex */ ret = mars_host_mutex_lock(&mars_shared_context_lock); if (ret != MARS_SUCCESS) |