You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by xi...@apache.org on 2021/07/15 15:23:56 UTC

[incubator-nuttx] branch init created (now 2883234)

This is an automated email from the ASF dual-hosted git repository.

xiaoxiang pushed a change to branch init
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git.


      at 2883234  sched/init: initialize all idle thread's tl_task

This branch includes the following new commits:

     new 17563a8  sched/init: Remove the unnessary CONFIG_SMP check
     new 2883234  sched/init: initialize all idle thread's tl_task

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


[incubator-nuttx] 01/02: sched/init: Remove the unnessary CONFIG_SMP check

Posted by xi...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

xiaoxiang pushed a commit to branch init
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git

commit 17563a86c13dd7b289fd41b18fabdbac8c0c74bd
Author: Xiang Xiao <xi...@xiaomi.com>
AuthorDate: Thu Jul 15 19:46:07 2021 +0800

    sched/init: Remove the unnessary CONFIG_SMP check
    
    Signed-off-by: Xiang Xiao <xi...@xiaomi.com>
    Change-Id: I2afaf310b411993e37140b3d7977968a7fda5c3b
---
 sched/init/nx_start.c | 14 ++++----------
 1 file changed, 4 insertions(+), 10 deletions(-)

diff --git a/sched/init/nx_start.c b/sched/init/nx_start.c
index eb15485..eff067d 100644
--- a/sched/init/nx_start.c
+++ b/sched/init/nx_start.c
@@ -67,11 +67,9 @@
 #  define CONFIG_SMP_NCPUS       1
 #endif
 
-#ifdef CONFIG_SMP
 /* This set of all CPUs */
 
-#  define SCHED_ALL_CPUS         ((1 << CONFIG_SMP_NCPUS) - 1)
-#endif /* CONFIG_SMP */
+#define SCHED_ALL_CPUS           ((1 << CONFIG_SMP_NCPUS) - 1)
 
 /****************************************************************************
  * Public Data
@@ -422,12 +420,7 @@ void nx_start(void)
                                 TCB_FLAG_NONCANCELABLE |
                                 TCB_FLAG_CPU_LOCKED);
       g_idletcb[i].cmn.cpu   = i;
-#else
-      g_idletcb[i].cmn.flags = (TCB_FLAG_TTYPE_KERNEL |
-                                TCB_FLAG_NONCANCELABLE);
-#endif
 
-#ifdef CONFIG_SMP
       /* Set the affinity mask to allow the thread to run on all CPUs.  No,
        * this IDLE thread can only run on its assigned CPU.  That is
        * enforced by the TCB_FLAG_CPU_LOCKED which overrides the affinity
@@ -437,6 +430,9 @@ void nx_start(void)
        */
 
       g_idletcb[i].cmn.affinity = SCHED_ALL_CPUS;
+#else
+      g_idletcb[i].cmn.flags = (TCB_FLAG_TTYPE_KERNEL |
+                                TCB_FLAG_NONCANCELABLE);
 #endif
 
 #if CONFIG_TASK_NAME_SIZE > 0
@@ -449,7 +445,6 @@ void nx_start(void)
       strncpy(g_idletcb[i].cmn.name, g_idlename, CONFIG_TASK_NAME_SIZE);
       g_idletcb[i].cmn.name[CONFIG_TASK_NAME_SIZE] = '\0';
 #  endif
-#endif
 
       /* Configure the task name in the argument list.  The IDLE task does
        * not really have an argument list, but this name is still useful
@@ -459,7 +454,6 @@ void nx_start(void)
        * stack and there is no support that yet.
        */
 
-#if CONFIG_TASK_NAME_SIZE > 0
       g_idleargv[i][0]  = g_idletcb[i].cmn.name;
 #else
       g_idleargv[i][0]  = (FAR char *)g_idlename;

[incubator-nuttx] 02/02: sched/init: initialize all idle thread's tl_task

Posted by xi...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

xiaoxiang pushed a commit to branch init
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git

commit 2883234a0dee7aa69680f44dfb377bbe55cfc444
Author: Xiang Xiao <xi...@xiaomi.com>
AuthorDate: Thu Jul 15 18:25:48 2021 +0800

    sched/init: initialize all idle thread's tl_task
    
    commit 50c08bf45b1adcafc409480f300ac49a4b2c689c
    Author: Huang Qi <hu...@xiaomi.com>
    Date:   Tue Jun 29 16:01:02 2021 +0800
    
        libc: Move pthread_key_destructor to task_info_s
    
    Signed-off-by: Xiang Xiao <xi...@xiaomi.com>
    Change-Id: If7d0c0118323fa3dcf44081d675cd57b14eba75a
---
 sched/init/nx_smpstart.c | 27 +--------------------
 sched/init/nx_start.c    | 61 +++++++++++++++++++++++++++++-------------------
 2 files changed, 38 insertions(+), 50 deletions(-)

diff --git a/sched/init/nx_smpstart.c b/sched/init/nx_smpstart.c
index 4bcb712..bb7675d 100644
--- a/sched/init/nx_smpstart.c
+++ b/sched/init/nx_smpstart.c
@@ -34,7 +34,6 @@
 #include <nuttx/kmalloc.h>
 #include <nuttx/sched.h>
 #include <nuttx/sched_note.h>
-#include <nuttx/tls.h>
 
 #include "group/group.h"
 #include "sched/sched.h"
@@ -113,31 +112,7 @@ int nx_smp_start(void)
   int ret;
   int cpu;
 
-  /* Create a stack for all CPU IDLE threads (except CPU0 which already has
-   * a stack).
-   */
-
-  for (cpu = 1; cpu < CONFIG_SMP_NCPUS; cpu++)
-    {
-      FAR struct tcb_s *tcb = current_task(cpu);
-      DEBUGASSERT(tcb != NULL);
-
-      ret = up_cpu_idlestack(cpu, tcb, CONFIG_IDLETHREAD_STACKSIZE);
-      if (ret < 0)
-        {
-          serr("ERROR: Failed to allocate stack for CPU%d\n", cpu);
-          return ret;
-        }
-
-      /* Initialize the processor-specific portion of the TCB */
-
-      up_initial_state(tcb);
-      up_stack_frame(tcb, sizeof(struct task_info_s));
-    }
-
-  /* Then start all of the other CPUs after we have completed the memory
-   * allocations.  CPU0 is already running.
-   */
+  /* Start all of the other CPUs.  CPU0 is already running. */
 
   for (cpu = 1; cpu < CONFIG_SMP_NCPUS; cpu++)
     {
diff --git a/sched/init/nx_start.c b/sched/init/nx_start.c
index eff067d..97d11ad 100644
--- a/sched/init/nx_start.c
+++ b/sched/init/nx_start.c
@@ -475,16 +475,6 @@ void nx_start(void)
       /* Mark the idle task as the running task */
 
       g_running_tasks[i] = &g_idletcb[i].cmn;
-
-      /* Initialize the 1st processor-specific portion of the TCB
-       * Note: other idle thread get initialized in nx_smpstart
-       */
-
-      if (i == 0)
-        {
-          up_initial_state(&g_idletcb[i].cmn);
-          up_stack_frame(&g_idletcb[i].cmn, sizeof(struct task_info_s));
-        }
     }
 
   /* Task lists are initialized */
@@ -566,8 +556,11 @@ void nx_start(void)
       g_pidhash[i].pid = INVALID_PROCESS_ID;
     }
 
+  /* IDLE Group Initialization **********************************************/
+
   for (i = 0; i < CONFIG_SMP_NCPUS; i++)
     {
+      FAR struct tls_info_s *info;
       int hashndx;
 
       /* Assign the process ID(s) of ZERO to the idle task(s) */
@@ -575,6 +568,39 @@ void nx_start(void)
       hashndx                = PIDHASH(i);
       g_pidhash[hashndx].tcb = &g_idletcb[i].cmn;
       g_pidhash[hashndx].pid = i;
+
+      /* Allocate the IDLE group */
+
+      DEBUGVERIFY(group_allocate(&g_idletcb[i], g_idletcb[i].cmn.flags));
+
+#ifdef CONFIG_SMP
+      /* Create a stack for all CPU IDLE threads (except CPU0 which already
+       * has a stack).
+       */
+
+      if (i > 0)
+        {
+          DEBUGVERIFY(up_cpu_idlestack(i, &g_idletcb[i].cmn,
+                                       CONFIG_IDLETHREAD_STACKSIZE));
+        }
+#endif
+
+      /* Initialize the processor-specific portion of the TCB */
+
+      up_initial_state(&g_idletcb[i].cmn);
+
+      /* Initialize the thread local storage */
+
+      info = up_stack_frame(&g_idletcb[i].cmn, sizeof(struct tls_info_s));
+      DEBUGASSERT(info == g_idletcb[i].cmn.stack_alloc_ptr);
+      info->tl_task = g_idletcb[i].cmn.group->tg_info;
+
+      /* Complete initialization of the IDLE group.  Suppress retention
+       * of child status in the IDLE group.
+       */
+
+      DEBUGVERIFY(group_initialize(&g_idletcb[i]));
+      g_idletcb[i].cmn.group->tg_flags = GROUP_FLAG_NOCLDWAIT;
     }
 
   g_lastpid = CONFIG_SMP_NCPUS - 1;
@@ -703,20 +729,14 @@ void nx_start(void)
   binfmt_initialize();
 #endif
 
-  /* IDLE Group Initialization **********************************************/
-
   /* Announce that the CPU0 IDLE task has started */
 
   sched_note_start(&g_idletcb[0].cmn);
 
-  /* Initialize the IDLE group for the IDLE task of each CPU */
+  /* Initialize tdout, stderr, stdin for the IDLE task of each CPU */
 
   for (i = 0; i < CONFIG_SMP_NCPUS; i++)
     {
-      /* Allocate the IDLE group */
-
-      DEBUGVERIFY(group_allocate(&g_idletcb[i], g_idletcb[i].cmn.flags));
-
       if (i > 0)
         {
           /* Clone stdout, stderr, stdin from the CPU0 IDLE task. */
@@ -732,13 +752,6 @@ void nx_start(void)
 
           DEBUGVERIFY(group_setupidlefiles(&g_idletcb[i]));
         }
-
-      /* Complete initialization of the IDLE group.  Suppress retention
-       * of child status in the IDLE group.
-       */
-
-      DEBUGVERIFY(group_initialize(&g_idletcb[i]));
-      g_idletcb[i].cmn.group->tg_flags = GROUP_FLAG_NOCLDWAIT;
     }
 
   /* Start SYSLOG ***********************************************************/