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

jiuzhudong pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git

commit 0dbbce3a8fef199b024fb15fa96462f6d6c5141e
Author: Jukka Laitinen <jukka.laiti...@tii.ae>
AuthorDate: Tue Aug 19 13:05:39 2025 +0300

    sched: Remove unnecessary affinity restriction & restoration over smp calls
    
    When the task has TCB_FLAG_CPU_LOCKED it is locked to the CPU regardless
    of the affinity. There is no need to switch the affinity back and forth.
    
    Signed-off-by: Jukka Laitinen <jukka.laiti...@tii.ae>
---
 sched/sched/sched_backtrace.c | 6 ------
 sched/sched/sched_suspend.c   | 6 ------
 sched/signal/sig_dispatch.c   | 6 ------
 sched/task/task_restart.c     | 6 ------
 sched/task/task_terminate.c   | 5 -----
 5 files changed, 29 deletions(-)

diff --git a/sched/sched/sched_backtrace.c b/sched/sched/sched_backtrace.c
index 3f057c95713..3d677308a3c 100644
--- a/sched/sched/sched_backtrace.c
+++ b/sched/sched/sched_backtrace.c
@@ -43,7 +43,6 @@ struct backtrace_arg_s
   FAR void **buffer;
   int size;
   int skip;
-  cpu_set_t saved_affinity;
   bool need_restore;
 };
 
@@ -72,7 +71,6 @@ static int sched_backtrace_handler(FAR void *cookie)
 
   if (arg->need_restore)
     {
-      tcb->affinity = arg->saved_affinity;
       tcb->flags &= ~TCB_FLAG_CPU_LOCKED;
     }
 
@@ -126,12 +124,8 @@ int sched_backtrace(pid_t tid, FAR void **buffer, int 
size, int skip)
               else
                 {
                   arg.pid = tcb->pid;
-                  arg.saved_affinity = tcb->affinity;
                   arg.need_restore = true;
-
                   tcb->flags |= TCB_FLAG_CPU_LOCKED;
-                  CPU_ZERO(&tcb->affinity);
-                  CPU_SET(tcb->cpu, &tcb->affinity);
                 }
 
               arg.buffer = buffer;
diff --git a/sched/sched/sched_suspend.c b/sched/sched/sched_suspend.c
index d17956325d2..4bbb6c8a780 100644
--- a/sched/sched/sched_suspend.c
+++ b/sched/sched/sched_suspend.c
@@ -45,7 +45,6 @@
 struct suspend_arg_s
 {
   pid_t pid;
-  cpu_set_t saved_affinity;
   bool need_restore;
 };
 
@@ -73,7 +72,6 @@ static int nxsched_suspend_handler(FAR void *cookie)
 
   if (arg->need_restore)
     {
-      tcb->affinity = arg->saved_affinity;
       tcb->flags &= ~TCB_FLAG_CPU_LOCKED;
     }
 
@@ -161,12 +159,8 @@ void nxsched_suspend(FAR struct tcb_s *tcb)
           else
             {
               arg.pid = tcb->pid;
-              arg.saved_affinity = tcb->affinity;
               arg.need_restore = true;
-
               tcb->flags |= TCB_FLAG_CPU_LOCKED;
-              CPU_ZERO(&tcb->affinity);
-              CPU_SET(tcb->cpu, &tcb->affinity);
             }
 
           nxsched_smp_call_single(tcb->cpu, nxsched_suspend_handler, &arg);
diff --git a/sched/signal/sig_dispatch.c b/sched/signal/sig_dispatch.c
index 82867e31ee0..b1cb1e9d4ef 100644
--- a/sched/signal/sig_dispatch.c
+++ b/sched/signal/sig_dispatch.c
@@ -53,7 +53,6 @@
 struct sig_arg_s
 {
   pid_t pid;
-  cpu_set_t saved_affinity;
   bool need_restore;
 };
 
@@ -82,7 +81,6 @@ static int sig_handler(FAR void *cookie)
 
   if (arg->need_restore)
     {
-      tcb->affinity = arg->saved_affinity;
       tcb->flags &= ~TCB_FLAG_CPU_LOCKED;
     }
 
@@ -175,12 +173,8 @@ static int nxsig_queue_action(FAR struct tcb_s *stcb,
                     }
                   else
                     {
-                      arg.saved_affinity = stcb->affinity;
                       arg.need_restore   = true;
-
                       stcb->flags        |= TCB_FLAG_CPU_LOCKED;
-                      CPU_ZERO(&stcb->affinity);
-                      CPU_SET(stcb->cpu, &stcb->affinity);
                     }
 
                   arg.pid = stcb->pid;
diff --git a/sched/task/task_restart.c b/sched/task/task_restart.c
index aa794921405..07566a3d99e 100644
--- a/sched/task/task_restart.c
+++ b/sched/task/task_restart.c
@@ -48,7 +48,6 @@
 struct restart_arg_s
 {
   pid_t pid;
-  cpu_set_t saved_affinity;
   bool need_restore;
 };
 
@@ -78,7 +77,6 @@ static int restart_handler(FAR void *cookie)
 
   if (arg->need_restore)
     {
-      tcb->affinity = arg->saved_affinity;
       tcb->flags &= ~TCB_FLAG_CPU_LOCKED;
     }
 
@@ -237,12 +235,8 @@ static int nxtask_restart(pid_t pid)
       else
         {
           arg.pid = tcb->pid;
-          arg.saved_affinity = tcb->affinity;
           arg.need_restore = true;
-
           tcb->flags |= TCB_FLAG_CPU_LOCKED;
-          CPU_ZERO(&tcb->affinity);
-          CPU_SET(tcb->cpu, &tcb->affinity);
         }
 
       nxsched_smp_call_single(tcb->cpu, restart_handler, &arg);
diff --git a/sched/task/task_terminate.c b/sched/task/task_terminate.c
index 05c2810707c..16e1b6a69e6 100644
--- a/sched/task/task_terminate.c
+++ b/sched/task/task_terminate.c
@@ -137,15 +137,11 @@ int nxtask_terminate(pid_t pid)
   if (task_state == TSTATE_TASK_RUNNING &&
       dtcb->cpu != this_cpu())
     {
-      cpu_set_t affinity;
       uint16_t tcb_flags;
       int ret;
 
       tcb_flags = dtcb->flags;
       dtcb->flags |= TCB_FLAG_CPU_LOCKED;
-      affinity = dtcb->affinity;
-      CPU_ZERO(&dtcb->affinity);
-      CPU_SET(dtcb->cpu, &dtcb->affinity);
 
       ret = nxsched_smp_call_single(dtcb->cpu, terminat_handler,
                                     (FAR void *)(uintptr_t)pid);
@@ -159,7 +155,6 @@ int nxtask_terminate(pid_t pid)
         }
 
       dtcb->flags = tcb_flags;
-      dtcb->affinity = affinity;
     }
   else
 #endif

Reply via email to