Преглед изворни кода

修正每个lwp线程实例的内核态栈大小不一致的问题

shaojinchun пре 4 година
родитељ
комит
92a1718f8a
2 измењених фајлова са 8 додато и 6 уклоњено
  1. 3 1
      components/lwp/lwp.c
  2. 5 5
      components/lwp/lwp_syscall.c

+ 3 - 1
components/lwp/lwp.c

@@ -880,6 +880,8 @@ struct rt_lwp *lwp_self(void)
     return RT_NULL;
 }
 
+#define LWP_TASK_STACK_SIZE (16 * 1024)
+
 #ifdef RT_USING_GDBSERVER
 pid_t lwp_execve(char *filename, int debug, int argc, char **argv, char **envp)
 #else
@@ -946,7 +948,7 @@ pid_t lwp_execve(char *filename, int argc, char **argv, char **envp)
         thread_name = thread_name ? thread_name + 1 : filename;
 
         thread = rt_thread_create(thread_name, lwp_thread_entry, RT_NULL,
-                               1024 * 16, 25, 200);
+                LWP_TASK_STACK_SIZE, 25, 200);
         if (thread != RT_NULL)
         {
             struct rt_lwp *self_lwp;

+ 5 - 5
components/lwp/lwp_syscall.c

@@ -1302,7 +1302,7 @@ long sys_clone(void *arg[])
     thread = rt_thread_create((const char *)"pthread",
             RT_NULL,
             RT_NULL,
-            ALLOC_KERNEL_STACK_SIZE,
+            self->stack_size,
             self->init_priority,
             self->init_tick);
     if (!thread)
@@ -1493,7 +1493,7 @@ int sys_fork(void)
     thread = rt_thread_create((const char *)thread_name,
             RT_NULL,
             RT_NULL,
-            ALLOC_KERNEL_STACK_SIZE,
+            self_thread->stack_size,
             self_thread->init_priority,
             self_thread->init_tick);
     if (!thread)
@@ -1523,15 +1523,15 @@ int sys_fork(void)
     rt_hw_interrupt_enable(level);
 
     /* copy origin stack */
-    rt_memcpy(thread->stack_addr, self_thread->stack_addr, ALLOC_KERNEL_STACK_SIZE);
+    rt_memcpy(thread->stack_addr, self_thread->stack_addr, self_thread->stack_size);
     lwp_tid_set_thread(tid, thread);
 
     level = rt_hw_interrupt_disable();
     user_stack = lwp_get_user_sp();
     rt_hw_interrupt_enable(level);
 
-    tid = lwp_set_thread_context((void *)((char *)thread->stack_addr + ALLOC_KERNEL_STACK_SIZE),
-            (void *)((char *)self_thread->stack_addr + ALLOC_KERNEL_STACK_SIZE), user_stack, &thread->sp, tid);
+    tid = lwp_set_thread_context((void *)((char *)thread->stack_addr + thread->stack_size),
+            (void *)((char *)self_thread->stack_addr + self_thread->stack_size), user_stack, &thread->sp, tid);
     if (tid)
     {
         level = rt_hw_interrupt_disable();