diff --git a/mkrtos_knl/inc/knl/task.h b/mkrtos_knl/inc/knl/task.h index 95d43fec3..0ff8c86d3 100755 --- a/mkrtos_knl/inc/knl/task.h +++ b/mkrtos_knl/inc/knl/task.h @@ -27,3 +27,4 @@ void task_init(task_t *task, ram_limit_t *ram, int is_knl); task_t *task_create(ram_limit_t *lim, int is_knl); int task_alloc_base_ram(task_t *tk, ram_limit_t *lim, size_t size); void task_kill(task_t *tk); +int task_set_pid(task_t *task, pid_t pid); diff --git a/mkrtos_knl/knl/task.c b/mkrtos_knl/knl/task.c index 63b3aa538..c9c0f3c7f 100755 --- a/mkrtos_knl/knl/task.c +++ b/mkrtos_knl/knl/task.c @@ -104,6 +104,20 @@ static int task_lock_2(spinlock_t *sp0, spinlock_t *sp1, int *st0, int *st1) } return TRUE; } +int task_set_pid(task_t *task, pid_t pid) +{ + task_t *cur_task = thread_get_current_task(); + + if (cur_task->pid == 0) + { + task->pid = pid; + return 0; + } + else + { + return -EACCES; + } +} static void task_syscall_func(kobject_t *kobj, syscall_prot_t sys_p, msg_tag_t in_tag, entry_frame_t *f) { task_t *cur_task = thread_get_current_task(); @@ -186,15 +200,7 @@ static void task_syscall_func(kobject_t *kobj, syscall_prot_t sys_p, msg_tag_t i break; case TASK_SET_PID: { - if (tag_task->pid == (pid_t)(-1)) - { - tag_task->pid = f->r[0]; - tag = msg_tag_init4(0, 0, 0, 0); - } - else - { - tag = msg_tag_init4(0, 0, 0, -EACCES); - } + tag = msg_tag_init4(0, 0, 0, task_set_pid(tag_task, f->r[0])); } break; case TASK_GET_PID: diff --git a/mkrtos_knl/knl/thread_knl.c b/mkrtos_knl/knl/thread_knl.c index 9af40c078..aa85442c7 100755 --- a/mkrtos_knl/knl/thread_knl.c +++ b/mkrtos_knl/knl/thread_knl.c @@ -70,6 +70,7 @@ static void knl_init_2(void) void *sp_addr = (char *)init_task->mm_space.mm_block + app->i.stack_offset - app->i.data_offset; void *sp_addr_top = (char *)sp_addr + app->i.stack_size; + task_set_pid(&init_task, 0); thread_set_msg_bug(init_thread, (char *)(init_task->mm_space.mm_block) + app->i.ram_size); thread_bind(init_thread, &init_task->kobj); thread_user_pf_set(init_thread, (void *)(KNL_TEXT + INIT_OFFSET), (void *)((umword_t)sp_addr_top - 8), diff --git a/mkrtos_user/server/init/src/main.c b/mkrtos_user/server/init/src/main.c index 6e5f2e2e1..105f64414 100644 --- a/mkrtos_user/server/init/src/main.c +++ b/mkrtos_user/server/init/src/main.c @@ -61,7 +61,6 @@ int main(int argc, char *args[]) ulog_write_str(LOG_PROT, "init..\n"); test(); - task_set_pid(TASK_THIS, 0); env = u_get_global_env(); rpc_meta_init(THREAD_MAIN, &env->ns_hd); namespace_init();