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 0641fb9e5cc2fee316bef64fce01758f048d1f9f
Author: zhangyu117 <[email protected]>
AuthorDate: Fri Aug 22 11:32:56 2025 +0800

    nuttx/libc: arch_atomic.c uses IRQ switching, no SMP support
    
    The atomic implementation of machine/arch_atomic.c is achieved by
    switching interrupts. This version does not support SMP.
    
    Signed-off-by: zhangyu117 <[email protected]>
---
 libs/libc/machine/arch_atomic.c | 78 +++++++++++++++++++----------------------
 1 file changed, 36 insertions(+), 42 deletions(-)

diff --git a/libs/libc/machine/arch_atomic.c b/libs/libc/machine/arch_atomic.c
index 87d68008d5e..12ff71f4b46 100644
--- a/libs/libc/machine/arch_atomic.c
+++ b/libs/libc/machine/arch_atomic.c
@@ -31,12 +31,6 @@
 #include <nuttx/spinlock.h>
 #include <nuttx/macro.h>
 
-/****************************************************************************
- * Private Data
- ****************************************************************************/
-
-static spinlock_t g_atomic_lock = SP_UNLOCKED;
-
 /****************************************************************************
  * Pre-processor Definitions
  ****************************************************************************/
@@ -46,11 +40,11 @@ static spinlock_t g_atomic_lock = SP_UNLOCKED;
   void weak_function CONCATENATE(fn, n)(FAR volatile void *ptr,      \
                                         type value, int memorder)    \
   {                                                                  \
-    irqstate_t irqstate = spin_lock_irqsave_notrace(&g_atomic_lock); \
+    irqstate_t irqstate = up_irq_save();                             \
                                                                      \
     *(FAR type *)ptr = value;                                        \
                                                                      \
-    spin_unlock_irqrestore_notrace(&g_atomic_lock, irqstate);        \
+    up_irq_restore(irqstate);                                        \
   }
 
 #define LOAD(fn, n, type)                                             \
@@ -58,11 +52,11 @@ static spinlock_t g_atomic_lock = SP_UNLOCKED;
   type weak_function CONCATENATE(fn, n)(FAR const volatile void *ptr, \
                                         int memorder)                 \
   {                                                                   \
-    irqstate_t irqstate = spin_lock_irqsave_notrace(&g_atomic_lock);  \
+    irqstate_t irqstate = up_irq_save();                              \
                                                                       \
     type ret = *(FAR type *)ptr;                                      \
                                                                       \
-    spin_unlock_irqrestore_notrace(&g_atomic_lock, irqstate);         \
+    up_irq_restore(irqstate);                                         \
     return ret;                                                       \
   }
 
@@ -71,13 +65,13 @@ static spinlock_t g_atomic_lock = SP_UNLOCKED;
   type weak_function CONCATENATE(fn, n)(FAR volatile void *ptr,      \
                                         type value, int memorder)    \
   {                                                                  \
-    irqstate_t irqstate = spin_lock_irqsave_notrace(&g_atomic_lock); \
+    irqstate_t irqstate = up_irq_save();                             \
     FAR type *tmp = (FAR type *)ptr;                                 \
                                                                      \
     type ret = *tmp;                                                 \
     *tmp = value;                                                    \
                                                                      \
-    spin_unlock_irqrestore_notrace(&g_atomic_lock, irqstate);        \
+    up_irq_restore(irqstate);                                        \
     return ret;                                                      \
   }
 
@@ -89,7 +83,7 @@ static spinlock_t g_atomic_lock = SP_UNLOCKED;
                                         int success, int failure)    \
   {                                                                  \
     bool ret = false;                                                \
-    irqstate_t irqstate = spin_lock_irqsave_notrace(&g_atomic_lock); \
+    irqstate_t irqstate = up_irq_save();                             \
     FAR type *tmpmem = (FAR type *)mem;                              \
     FAR type *tmpexp = (FAR type *)expect;                           \
                                                                      \
@@ -103,7 +97,7 @@ static spinlock_t g_atomic_lock = SP_UNLOCKED;
         *tmpexp = *tmpmem;                                           \
       }                                                              \
                                                                      \
-    spin_unlock_irqrestore_notrace(&g_atomic_lock, irqstate);        \
+    up_irq_restore(irqstate);                                        \
     return ret;                                                      \
   }
 
@@ -112,13 +106,13 @@ static spinlock_t g_atomic_lock = SP_UNLOCKED;
   type weak_function CONCATENATE(fn, n)(FAR volatile void *ptr,      \
                                         int memorder)                \
   {                                                                  \
-    irqstate_t irqstate = spin_lock_irqsave_notrace(&g_atomic_lock); \
+    irqstate_t irqstate = up_irq_save();                             \
     FAR type *tmp = (FAR type *)ptr;                                 \
     type ret = *tmp;                                                 \
                                                                      \
     *(FAR type *)ptr = 1;                                            \
                                                                      \
-    spin_unlock_irqrestore_notrace(&g_atomic_lock, irqstate);        \
+    up_irq_restore(irqstate);                                        \
     return ret;                                                      \
   }
 
@@ -127,13 +121,13 @@ static spinlock_t g_atomic_lock = SP_UNLOCKED;
   type weak_function CONCATENATE(fn, n)(FAR volatile void *ptr,      \
                                         type value, int memorder)    \
   {                                                                  \
-    irqstate_t irqstate = spin_lock_irqsave_notrace(&g_atomic_lock); \
+    irqstate_t irqstate = up_irq_save();                             \
     FAR type *tmp = (FAR type *)ptr;                                 \
     type ret = *tmp;                                                 \
                                                                      \
     *tmp = *tmp + value;                                             \
                                                                      \
-    spin_unlock_irqrestore_notrace(&g_atomic_lock, irqstate);        \
+    up_irq_restore(irqstate);                                        \
     return ret;                                                      \
   }
 
@@ -142,13 +136,13 @@ static spinlock_t g_atomic_lock = SP_UNLOCKED;
   type weak_function CONCATENATE(fn, n)(FAR volatile void *ptr,      \
                                         type value, int memorder)    \
   {                                                                  \
-    irqstate_t irqstate = spin_lock_irqsave_notrace(&g_atomic_lock); \
+    irqstate_t irqstate = up_irq_save();                             \
     FAR type *tmp = (FAR type *)ptr;                                 \
     type ret = *tmp;                                                 \
                                                                      \
     *tmp = *tmp - value;                                             \
                                                                      \
-    spin_unlock_irqrestore_notrace(&g_atomic_lock, irqstate);        \
+    up_irq_restore(irqstate);                                        \
     return ret;                                                      \
   }
 
@@ -157,13 +151,13 @@ static spinlock_t g_atomic_lock = SP_UNLOCKED;
   type weak_function CONCATENATE(fn, n)(FAR volatile void *ptr,      \
                                         type value, int memorder)    \
   {                                                                  \
-    irqstate_t irqstate = spin_lock_irqsave_notrace(&g_atomic_lock); \
+    irqstate_t irqstate = up_irq_save();                             \
     FAR type *tmp = (FAR type *)ptr;                                 \
     type ret = *tmp;                                                 \
                                                                      \
     *tmp = *tmp & value;                                             \
                                                                      \
-    spin_unlock_irqrestore_notrace(&g_atomic_lock, irqstate);        \
+    up_irq_restore(irqstate);                                        \
     return ret;                                                      \
   }
 
@@ -172,13 +166,13 @@ static spinlock_t g_atomic_lock = SP_UNLOCKED;
   type weak_function CONCATENATE(fn, n)(FAR volatile void *ptr,      \
                                         type value, int memorder)    \
   {                                                                  \
-    irqstate_t irqstate = spin_lock_irqsave_notrace(&g_atomic_lock); \
+    irqstate_t irqstate = up_irq_save();                             \
     FAR type *tmp = (FAR type *)ptr;                                 \
     type ret = *tmp;                                                 \
                                                                      \
     *tmp = *tmp | value;                                             \
                                                                      \
-    spin_unlock_irqrestore_notrace(&g_atomic_lock, irqstate);        \
+    up_irq_restore(irqstate);                                        \
     return ret;                                                      \
   }
 
@@ -187,13 +181,13 @@ static spinlock_t g_atomic_lock = SP_UNLOCKED;
   type weak_function CONCATENATE(fn, n)(FAR volatile void *ptr,      \
                                         type value, int memorder)    \
   {                                                                  \
-    irqstate_t irqstate = spin_lock_irqsave_notrace(&g_atomic_lock); \
+    irqstate_t irqstate = up_irq_save();                             \
     FAR type *tmp = (FAR type *)ptr;                                 \
     type ret = *tmp;                                                 \
                                                                      \
     *tmp = *tmp ^ value;                                             \
                                                                      \
-    spin_unlock_irqrestore_notrace(&g_atomic_lock, irqstate);        \
+    up_irq_restore(irqstate);                                        \
     return ret;                                                      \
   }
 
@@ -202,12 +196,12 @@ static spinlock_t g_atomic_lock = SP_UNLOCKED;
   type weak_function CONCATENATE(fn, n)(FAR volatile void *ptr,      \
                                         type value)                  \
   {                                                                  \
-    irqstate_t irqstate = spin_lock_irqsave_notrace(&g_atomic_lock); \
+    irqstate_t irqstate = up_irq_save();                             \
     FAR type *tmp = (FAR type *)ptr;                                 \
                                                                      \
     *tmp = *tmp + value;                                             \
                                                                      \
-    spin_unlock_irqrestore_notrace(&g_atomic_lock, irqstate);        \
+    up_irq_restore(irqstate);                                        \
     return *tmp;                                                     \
   }
 
@@ -216,12 +210,12 @@ static spinlock_t g_atomic_lock = SP_UNLOCKED;
   type weak_function CONCATENATE(fn, n)(FAR volatile void *ptr,      \
                                         type value)                  \
   {                                                                  \
-    irqstate_t irqstate = spin_lock_irqsave_notrace(&g_atomic_lock); \
+    irqstate_t irqstate = up_irq_save();                             \
     FAR type *tmp = (FAR type *)ptr;                                 \
                                                                      \
     *tmp = *tmp - value;                                             \
                                                                      \
-    spin_unlock_irqrestore_notrace(&g_atomic_lock, irqstate);        \
+    up_irq_restore(irqstate);                                        \
     return *tmp;                                                     \
   }
 
@@ -230,12 +224,12 @@ static spinlock_t g_atomic_lock = SP_UNLOCKED;
   type weak_function CONCATENATE(fn, n)(FAR volatile void *ptr,      \
                                         type value)                  \
   {                                                                  \
-    irqstate_t irqstate = spin_lock_irqsave_notrace(&g_atomic_lock); \
+    irqstate_t irqstate = up_irq_save();                             \
     FAR type *tmp = (FAR type *)ptr;                                 \
                                                                      \
     *tmp = *tmp | value;                                             \
                                                                      \
-    spin_unlock_irqrestore_notrace(&g_atomic_lock, irqstate);        \
+    up_irq_restore(irqstate);                                        \
     return *tmp;                                                     \
   }
 
@@ -244,12 +238,12 @@ static spinlock_t g_atomic_lock = SP_UNLOCKED;
   type weak_function CONCATENATE(fn, n)(FAR volatile void *ptr,      \
                                         type value)                  \
   {                                                                  \
-    irqstate_t irqstate = spin_lock_irqsave_notrace(&g_atomic_lock); \
+    irqstate_t irqstate = up_irq_save();                             \
     FAR type *tmp = (FAR type *)ptr;                                 \
                                                                      \
     *tmp = *tmp & value;                                             \
                                                                      \
-    spin_unlock_irqrestore_notrace(&g_atomic_lock, irqstate);        \
+    up_irq_restore(irqstate);                                        \
     return *tmp;                                                     \
   }
 
@@ -258,12 +252,12 @@ static spinlock_t g_atomic_lock = SP_UNLOCKED;
   type weak_function CONCATENATE(fn, n)(FAR volatile void *ptr,      \
                                         type value)                  \
   {                                                                  \
-    irqstate_t irqstate = spin_lock_irqsave_notrace(&g_atomic_lock); \
+    irqstate_t irqstate = up_irq_save();                             \
     FAR type *tmp = (FAR type *)ptr;                                 \
                                                                      \
     *tmp = *tmp ^ value;                                             \
                                                                      \
-    spin_unlock_irqrestore_notrace(&g_atomic_lock, irqstate);        \
+    up_irq_restore(irqstate);                                        \
     return *tmp;                                                     \
   }
 
@@ -272,12 +266,12 @@ static spinlock_t g_atomic_lock = SP_UNLOCKED;
   type weak_function CONCATENATE(fn, n)(FAR volatile void *ptr,      \
                                         type value)                  \
   {                                                                  \
-    irqstate_t irqstate = spin_lock_irqsave_notrace(&g_atomic_lock); \
+    irqstate_t irqstate = up_irq_save();                             \
     FAR type *tmp = (FAR type *)ptr;                                 \
                                                                      \
     *tmp = ~(*tmp & value);                                          \
                                                                      \
-    spin_unlock_irqrestore_notrace(&g_atomic_lock, irqstate);        \
+    up_irq_restore(irqstate);                                        \
     return *tmp;                                                     \
   }
 
@@ -288,7 +282,7 @@ static spinlock_t g_atomic_lock = SP_UNLOCKED;
                                         type newvalue)               \
   {                                                                  \
     bool ret = false;                                                \
-    irqstate_t irqstate = spin_lock_irqsave_notrace(&g_atomic_lock); \
+    irqstate_t irqstate = up_irq_save();                             \
     FAR type *tmp = (FAR type *)ptr;                                 \
                                                                      \
     if (*tmp == oldvalue)                                            \
@@ -297,7 +291,7 @@ static spinlock_t g_atomic_lock = SP_UNLOCKED;
         *tmp = newvalue;                                             \
       }                                                              \
                                                                      \
-    spin_unlock_irqrestore_notrace(&g_atomic_lock, irqstate);        \
+    up_irq_restore(irqstate);                                        \
     return ret;                                                      \
   }
 
@@ -307,7 +301,7 @@ static spinlock_t g_atomic_lock = SP_UNLOCKED;
                                         type oldvalue,               \
                                         type newvalue)               \
   {                                                                  \
-    irqstate_t irqstate = spin_lock_irqsave_notrace(&g_atomic_lock); \
+    irqstate_t irqstate = up_irq_save();                             \
     FAR type *tmp = (FAR type *)ptr;                                 \
     type ret = *tmp;                                                 \
                                                                      \
@@ -316,7 +310,7 @@ static spinlock_t g_atomic_lock = SP_UNLOCKED;
         *tmp = newvalue;                                             \
       }                                                              \
                                                                      \
-    spin_unlock_irqrestore_notrace(&g_atomic_lock, irqstate);        \
+    up_irq_restore(irqstate);                                        \
     return ret;                                                      \
   }
 

Reply via email to