chirping78 opened a new pull request, #15636:
URL: https://github.com/apache/nuttx/pull/15636

   ## Summary
   
   Currently `up_cpu_index` of xtensa arch is a non-inline function, which 
means it will be called by `callX` instruction, and it will cause stack 
push/pop operations.
   
   And from "Cross Reference Table" of nuttx.map file, you can see this 
function is called frequently:
   ```
   up_cpu_index                                      
/source/NuttX/nuttx/staging/libarch.a(esp32s3_cpuindex.o)
                                                     
/source/NuttX/nuttx/staging/libsched.a(sched_self.o)
                                                     
/source/NuttX/nuttx/staging/libdrivers.a(syslog_write.o)
                                                     
/source/NuttX/nuttx/staging/libsched.a(group_join.o)
                                                     
/source/NuttX/nuttx/staging/libsched.a(pthread_create.o)
                                                     
/source/NuttX/nuttx/staging/libdrivers.a(vsyslog.o)
                                                     
/source/NuttX/nuttx/staging/libsched.a(sig_timedwait.o)
                                                     
/source/NuttX/nuttx/staging/libsched.a(timer_create.o)
                                                     
/source/NuttX/nuttx/staging/libsched.a(task_restart.o)
                                                     
/source/NuttX/nuttx/staging/libsched.a(sched_getaffinity.o)
                                                     
/source/NuttX/nuttx/staging/libsched.a(sched_getcpu.o)
                                                     
/source/NuttX/nuttx/staging/libsched.a(sched_idletask.o)
                                                     
/source/NuttX/nuttx/staging/libsched.a(sched_yield.o)
                                                     
/source/NuttX/nuttx/staging/libsched.a(pthread_detach.o)
                                                     
/source/NuttX/nuttx/staging/libsched.a(mq_rcvinternal.o)
                                                     
/source/NuttX/nuttx/staging/libsched.a(mq_sndinternal.o)
                                                     
/source/NuttX/nuttx/staging/libsched.a(mq_send.o)
                                                     
/source/NuttX/nuttx/staging/libsched.a(env_clearenv.o)
                                                     
/source/NuttX/nuttx/staging/libarch.a(xtensa_sigdeliver.o)
                                                     
/source/NuttX/nuttx/staging/libarch.a(xtensa_schedsigaction.o)
                                                     
/source/NuttX/nuttx/staging/libarch.a(xtensa_saveusercontext.o)
                                                     
/source/NuttX/nuttx/staging/libarch.a(xtensa_registerdump.o)
                                                     
/source/NuttX/nuttx/staging/libdrivers.a(serial.o)
                                                     
/source/NuttX/nuttx/staging/libsched.a(sig_allocpendingsigaction.o)
                                                     
/source/NuttX/nuttx/staging/libsched.a(sig_pending.o)
                                                     
/source/NuttX/nuttx/staging/libsched.a(sched_roundrobin.o)
                                                     
/source/NuttX/nuttx/staging/libsched.a(mq_waitirq.o)
                                                     
/source/NuttX/nuttx/staging/libsched.a(task_getpid.o)
                                                     
/source/NuttX/nuttx/staging/libsched.a(task_exit.o)
                                                     
/source/NuttX/nuttx/staging/libsched.a(sig_dispatch.o)
                                                     
/source/NuttX/nuttx/staging/libsched.a(sig_unmaskpendingsignal.o)
                                                     
/source/NuttX/nuttx/staging/libsched.a(sig_procmask.o)
                                                     
/source/NuttX/nuttx/staging/libsched.a(sem_waitirq.o)
                                                     
/source/NuttX/nuttx/staging/libsched.a(sem_clockwait.o)
                                                     
/source/NuttX/nuttx/staging/libsched.a(sem_tickwait.o)
                                                     
/source/NuttX/nuttx/staging/libsched.a(sched_get_stackinfo.o)
                                                     
/source/NuttX/nuttx/staging/libsched.a(sched_getscheduler.o)
                                                     
/source/NuttX/nuttx/staging/libsched.a(sched_getfiles.o)
                                                     
/source/NuttX/nuttx/staging/libsched.a(pthread_join.o)
                                                     
/source/NuttX/nuttx/staging/libsched.a(pthread_exit.o)
                                                     
/source/NuttX/nuttx/staging/libsched.a(assert.o)
                                                     
/source/NuttX/nuttx/staging/libsched.a(env_getenv.o)
                                                     
/source/NuttX/nuttx/staging/libfs.a(fs_procfstcbinfo.o)
                                                     
/source/NuttX/nuttx/staging/libfs.a(fs_open.o)
                                                     
/source/NuttX/nuttx/staging/libfs.a(fs_files.o)
                                                     
/source/NuttX/nuttx/staging/libarch.a(xtensa_smpcall.o)
                                                     
/source/NuttX/nuttx/staging/libarch.a(xtensa_swint.o)
                                                     
/source/NuttX/nuttx/staging/libarch.a(xtensa_irqdispatch.o)
                                                     
/source/NuttX/nuttx/staging/libarch.a(xtensa_exit.o)
                                                     
/source/NuttX/nuttx/staging/libarch.a(xtensa_assert.o)
                                                     
/source/NuttX/nuttx/staging/libarch.a(esp32s3_intercpu_interrupt.o)
                                                     
/source/NuttX/nuttx/staging/libarch.a(esp32s3_cpustart.o)
                                                     
/source/NuttX/nuttx/staging/libarch.a(esp32s3_serial.o)
                                                     
/source/NuttX/nuttx/staging/libarch.a(esp32s3_wdt.o)
                                                     
/source/NuttX/nuttx/staging/libarch.a(esp32s3_irq.o)
                                                     
/source/NuttX/nuttx/staging/libmm.a(mm_malloc.o)
                                                     
/source/NuttX/nuttx/staging/libmm.a(mm_free.o)
                                                     
/source/NuttX/nuttx/staging/libmm.a(mm_lock.o)
                                                     
/source/NuttX/nuttx/staging/libmm.a(mm_map.o)
                                                     
/source/NuttX/nuttx/staging/libsched.a(sig_action.o)
                                                     
/source/NuttX/nuttx/staging/libsched.a(pthread_mutex.o)
                                                     
/source/NuttX/nuttx/staging/libsched.a(task_gettid.o)
                                                     
/source/NuttX/nuttx/staging/libsched.a(task_terminate.o)
                                                     
/source/NuttX/nuttx/staging/libsched.a(task_delete.o)
                                                     
/source/NuttX/nuttx/staging/libsched.a(sem_post.o)
                                                     
/source/NuttX/nuttx/staging/libsched.a(sem_wait.o)
                                                     
/source/NuttX/nuttx/staging/libsched.a(sched_smp.o)
                                                     
/source/NuttX/nuttx/staging/libsched.a(sched_lock.o)
                                                     
/source/NuttX/nuttx/staging/libsched.a(sched_setpriority.o)
                                                     
/source/NuttX/nuttx/staging/libsched.a(sched_setparam.o)
                                                     
/source/NuttX/nuttx/staging/libsched.a(sched_addreadytorun.o)
                                                     
/source/NuttX/nuttx/staging/libsched.a(pthread_cancel.o)
                                                     
/source/NuttX/nuttx/staging/libsched.a(exit.o)
                                                     
/source/NuttX/nuttx/staging/libsched.a(task_start.o)
                                                     
/source/NuttX/nuttx/staging/libsched.a(task_activate.o)
                                                     
/source/NuttX/nuttx/staging/libsched.a(task_setup.o)
                                                     
/source/NuttX/nuttx/staging/libsched.a(sched_getparam.o)
                                                     
/source/NuttX/nuttx/staging/libsched.a(sched_mergepending.o)
                                                     
/source/NuttX/nuttx/staging/libsched.a(irq_csection.o)
                                                     
/source/NuttX/nuttx/staging/libsched.a(group_setuptaskfiles.o)
                                                     
/source/NuttX/nuttx/staging/libsched.a(env_unsetenv.o)
                                                     
/source/NuttX/nuttx/staging/libsched.a(env_setenv.o)
                                                     
/source/NuttX/nuttx/staging/libsched.a(env_getenvironptr.o)
                                                     
/source/NuttX/nuttx/staging/libsched.a(sched_unlock.o)
   ```
   
   This PR will change  `up_cpu_index`  to an inline function to improve the 
performance.
   
   ## Impact
   
   affects smp scenario
   
   ## Testing
   
   tested `esp32s3-devkit:smp` and `esp32-devkitc:smp`
   
   
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to