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

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

commit 5ff4bdde657f7c7f2cac74c8b45680bdbe1ed2a6
Author: zhangyu117 <[email protected]>
AuthorDate: Thu Aug 13 22:32:10 2026 +0800

    nuttx/libc: refine the atomic related Kconfig
    
    Refine the atomic Kconfig to support multiple backends:
    LIBC_ATOMIC_TOOLCHAIN (compiler builtins), LIBC_ATOMIC_ARCH (arch
    instructions), and LIBC_ATOMIC_IRQ (interrupt disable). Rename
    arch_atomic.c to arch_atomic_irq.c since it supports the IRQ backend.
    
    Signed-off-by: zhangyu117 <[email protected]>
---
 arch/arm/Kconfig                                    |  4 +---
 arch/renesas/Kconfig                                |  1 +
 arch/risc-v/Kconfig                                 |  1 +
 arch/xtensa/src/esp32/Kconfig                       |  2 +-
 boards/arm/am67/t3-gem-o1/configs/nsh/defconfig     |  1 -
 include/nuttx/atomic.h                              |  2 +-
 libs/libc/machine/CMakeLists.txt                    |  2 +-
 libs/libc/machine/Kconfig                           | 21 ++++++++++++++++-----
 libs/libc/machine/Make.defs                         |  2 +-
 .../machine/{arch_atomic.c => arch_atomic_irq.c}    |  4 ++--
 libs/libc/machine/tricore/CMakeLists.txt            |  5 ++++-
 libs/libc/machine/tricore/Make.defs                 |  3 +++
 12 files changed, 32 insertions(+), 16 deletions(-)

diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 56389fb1c8a..43997be8249 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -856,7 +856,6 @@ config ARCH_CHIP_CXD56XX
        select ARCH_HAVE_MATH_H
        select ARCH_HAVE_I2CRESET
        select ARCH_HAVE_CUSTOM_TESTSET
-       select LIBC_ARCH_ATOMIC if SMP
        ---help---
                Sony CXD56XX (ARM Cortex-M4) architectures
 
@@ -948,7 +947,7 @@ config ARCH_CHIP_CXD32XX
        bool "Sony CXD32xx"
        select ARCH_CORTEXM4
        select ARCH_HAVE_FPU
-       select LIBC_ARCH_ATOMIC
+       select LIBC_ATOMIC_IRQ
        ---help---
                Sony CXD32XX (ARM Cortex-M4) architectures
 
@@ -956,7 +955,6 @@ config ARCH_CHIP_HT32F491X3
        bool "Holtek HT32F491x3"
        select ARCH_CORTEXM4
        select ARCH_HAVE_FPU
-       select LIBC_ARCH_ATOMIC
        ---help---
                Holtek HT32F491x3 (ARM Cortex-M4) architectures
 
diff --git a/arch/renesas/Kconfig b/arch/renesas/Kconfig
index d89cc1ead7a..543c084494f 100644
--- a/arch/renesas/Kconfig
+++ b/arch/renesas/Kconfig
@@ -62,6 +62,7 @@ config ARCH_RENESAS_RX
        default n
        select ARCH_HAVE_SETJMP
        select CYGWIN_WINTOOL if WINDOWS_CYGWIN
+       select LIBC_ATOMIC_IRQ
 
 config ARCH_RX65N
        bool
diff --git a/arch/risc-v/Kconfig b/arch/risc-v/Kconfig
index f134be00edb..4b8367a8321 100644
--- a/arch/risc-v/Kconfig
+++ b/arch/risc-v/Kconfig
@@ -82,6 +82,7 @@ config ARCH_CHIP_BL602
        select ONESHOT_COUNT
        select ONESHOT_FAST_DIVISION
        select ALARM_ARCH
+       select LIBC_ATOMIC_IRQ
        ---help---
                BouffaloLab BL602(rv32imfc)
 
diff --git a/arch/xtensa/src/esp32/Kconfig b/arch/xtensa/src/esp32/Kconfig
index 3836f0ac6bb..4084d7e346b 100644
--- a/arch/xtensa/src/esp32/Kconfig
+++ b/arch/xtensa/src/esp32/Kconfig
@@ -893,7 +893,7 @@ config ESP32_RTC_HEAP
 config ESP32_IRAM_HEAP
        bool "Use the rest of IRAM as a separate heap"
        select ARCH_HAVE_EXTRA_HEAPS
-       select LIBC_ARCH_ATOMIC
+       select LIBC_ATOMIC_IRQ
        select ARCH_USE_TEXT_HEAP
        default n
 
diff --git a/boards/arm/am67/t3-gem-o1/configs/nsh/defconfig 
b/boards/arm/am67/t3-gem-o1/configs/nsh/defconfig
index afe0185a0e0..3bf01e87314 100644
--- a/boards/arm/am67/t3-gem-o1/configs/nsh/defconfig
+++ b/boards/arm/am67/t3-gem-o1/configs/nsh/defconfig
@@ -30,7 +30,6 @@ CONFIG_FS_PROCFS=y
 CONFIG_HAVE_CXX=y
 CONFIG_HAVE_CXXINITIALIZE=y
 CONFIG_INIT_ENTRYPOINT="nsh_main"
-CONFIG_LIBC_ARCH_ATOMIC=y
 CONFIG_NSH_BUILTIN_APPS=y
 CONFIG_NSH_FILEIOSIZE=512
 CONFIG_NSH_READLINE=y
diff --git a/include/nuttx/atomic.h b/include/nuttx/atomic.h
index 02fb266a428..d2ea13d9e44 100644
--- a/include/nuttx/atomic.h
+++ b/include/nuttx/atomic.h
@@ -36,7 +36,7 @@
 #  endif
 #endif
 
-#if !defined(CONFIG_LIBC_ARCH_ATOMIC)
+#if defined(CONFIG_LIBC_ATOMIC_TOOLCHAIN)
 #  if __has_include(<atomic>) && defined(__cplusplus)
 extern "C++"
 {
diff --git a/libs/libc/machine/CMakeLists.txt b/libs/libc/machine/CMakeLists.txt
index 5f4869dc7d6..c31234ee048 100644
--- a/libs/libc/machine/CMakeLists.txt
+++ b/libs/libc/machine/CMakeLists.txt
@@ -22,7 +22,7 @@
 
 add_subdirectory(${CONFIG_ARCH})
 
-target_sources(c PRIVATE arch_atomic.c)
+target_sources(c PRIVATE arch_atomic_irq.c)
 
 if(CONFIG_MM_KASAN)
   target_sources(c PRIVATE arch_libc.c)
diff --git a/libs/libc/machine/Kconfig b/libs/libc/machine/Kconfig
index f89a42159f9..e07b9790c3b 100644
--- a/libs/libc/machine/Kconfig
+++ b/libs/libc/machine/Kconfig
@@ -9,13 +9,24 @@
 
 menu "Architecture-Specific Support"
 
-config LIBC_ARCH_ATOMIC
-       bool "arch_atomic"
+config LIBC_ATOMIC_IRQ
+       bool
+       default n
+       ---help---
+               atomic function by irq disable/enable
+
+config LIBC_ATOMIC_ARCH
+       bool
+       default n
+       ---help---
+               arch_atomic by arch instruction
+
+config LIBC_ATOMIC_TOOLCHAIN
+       bool
+       default y if !LIBC_ATOMIC_IRQ && !LIBC_ATOMIC_ARCH
        default n
        ---help---
-               If this configuration is selected and <include/nuttx/atomic.h> 
is
-               included, arch_atomic.c will be linked instead of built-in
-               atomic function.
+               atomic function from toolchain
 
 config ARCH_LOWPUTC
        bool "Low-level console output"
diff --git a/libs/libc/machine/Make.defs b/libs/libc/machine/Make.defs
index 73e34fecccb..149df32df17 100644
--- a/libs/libc/machine/Make.defs
+++ b/libs/libc/machine/Make.defs
@@ -20,7 +20,7 @@
 #
 ############################################################################
 
-CSRCS += arch_atomic.c
+CSRCS += arch_atomic_irq.c
 
 ifeq ($(CONFIG_MM_KASAN),y)
   CSRCS += arch_libc.c
diff --git a/libs/libc/machine/arch_atomic.c 
b/libs/libc/machine/arch_atomic_irq.c
similarity index 99%
rename from libs/libc/machine/arch_atomic.c
rename to libs/libc/machine/arch_atomic_irq.c
index 12ff71f4b46..98c0aae5a1c 100644
--- a/libs/libc/machine/arch_atomic.c
+++ b/libs/libc/machine/arch_atomic_irq.c
@@ -1,5 +1,5 @@
 /****************************************************************************
- * libs/libc/machine/arch_atomic.c
+ * libs/libc/machine/arch_atomic_irq.c
  *
  * SPDX-License-Identifier: Apache-2.0
  *
@@ -78,7 +78,7 @@
 #define CMP_EXCHANGE(fn, n, type)                                    \
                                                                      \
   bool weak_function CONCATENATE(fn, n)(FAR volatile void *mem,      \
-                                        FAR void *expect,            \
+                                        FAR volatile void *expect,   \
                                         type desired, bool weak,     \
                                         int success, int failure)    \
   {                                                                  \
diff --git a/libs/libc/machine/tricore/CMakeLists.txt 
b/libs/libc/machine/tricore/CMakeLists.txt
index b8d393cde8e..689da31505c 100644
--- a/libs/libc/machine/tricore/CMakeLists.txt
+++ b/libs/libc/machine/tricore/CMakeLists.txt
@@ -22,7 +22,10 @@
 
 set(SRCS)
 
-list(APPEND SRCS arch_atomic.c)
+if(CONFIG_LIBC_ATOMIC_ARCH)
+  list(APPEND SRCS arch_atomic.c)
+endif()
+
 if(CONFIG_ARCH_SETJMP_H)
   list(APPEND SRCS arch_setjmp.c)
 endif()
diff --git a/libs/libc/machine/tricore/Make.defs 
b/libs/libc/machine/tricore/Make.defs
index c0dc5542ce0..b39fa5ac414 100644
--- a/libs/libc/machine/tricore/Make.defs
+++ b/libs/libc/machine/tricore/Make.defs
@@ -20,7 +20,10 @@
 #
 ############################################################################
 
+ifeq ($(CONFIG_LIBC_ATOMIC_ARCH),y)
 CSRCS += arch_atomic.c
+endif
+
 ifeq ($(CONFIG_ARCH_SETJMP_H),y)
 CSRCS += arch_setjmp.c
 endif

Reply via email to