aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYuji Mano <yuji.mano@am.sony.com>2009-03-19 13:54:07 -0700
committerYuji Mano <yuji.mano@am.sony.com>2009-03-23 12:18:28 -0700
commit2454fe58e7b939e2830a5a51a9a6815d1494d2d0 (patch)
tree8e101adf302e6d1e6728736570e6d7a438eeb272
parent8b90ccc10278c454b8aecd2c2e58034f50eead44 (diff)
downloadmars-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.c38
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)