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

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


The following commit(s) were added to refs/heads/master by this push:
     new ecdff659d1 modifyreg[8|32]: use small lock in modifyreg[8|32]
ecdff659d1 is described below

commit ecdff659d1696fbd972ff78744453fc82f9470f7
Author: hujun5 <[email protected]>
AuthorDate: Thu Dec 19 19:57:12 2024 +0800

    modifyreg[8|32]: use small lock in modifyreg[8|32]
    
    reason:
    We would like to replace the big lock with a small lock.
    
    Signed-off-by: hujun5 <[email protected]>
---
 arch/arm/src/common/arm_modifyreg32.c       | 10 ++++++++--
 arch/arm/src/common/arm_modifyreg8.c        | 10 ++++++++--
 arch/arm64/src/common/arm64_modifyreg32.c   | 10 ++++++++--
 arch/arm64/src/common/arm64_modifyreg8.c    | 10 ++++++++--
 arch/avr/src/common/avr_modifyreg32.c       |  7 +++++--
 arch/avr/src/common/avr_modifyreg8.c        |  7 +++++--
 arch/ceva/src/common/ceva_modifyreg32.c     | 10 ++++++++--
 arch/ceva/src/common/ceva_modifyreg8.c      | 10 ++++++++--
 arch/hc/src/common/hc_modifyreg32.c         |  7 +++++--
 arch/hc/src/common/hc_modifyreg8.c          |  7 +++++--
 arch/mips/src/common/mips_modifyreg32.c     |  7 +++++--
 arch/mips/src/common/mips_modifyreg8.c      |  7 +++++--
 arch/misoc/src/common/misoc_modifyreg32.c   | 11 +++++++++--
 arch/misoc/src/common/misoc_modifyreg8.c    | 11 +++++++++--
 arch/or1k/src/common/or1k_modifyreg32.c     | 10 ++++++++--
 arch/or1k/src/common/or1k_modifyreg8.c      | 10 ++++++++--
 arch/risc-v/src/common/riscv_modifyreg32.c  | 10 ++++++++--
 arch/sparc/src/common/sparc_modifyreg32.c   |  6 ++++--
 arch/sparc/src/common/sparc_modifyreg8.c    |  6 ++++--
 arch/x86/src/common/x86_modifyreg32.c       |  7 +++++--
 arch/x86/src/common/x86_modifyreg8.c        |  7 +++++--
 arch/x86_64/src/common/x86_64_modifyreg32.c |  7 +++++--
 arch/x86_64/src/common/x86_64_modifyreg8.c  |  7 +++++--
 arch/xtensa/src/common/xtensa_modifyreg32.c | 10 ++++++++--
 arch/xtensa/src/common/xtensa_modifyreg8.c  | 10 ++++++++--
 arch/z80/src/z180/z180_modifiyreg8.c        |  7 +++++--
 26 files changed, 169 insertions(+), 52 deletions(-)

diff --git a/arch/arm/src/common/arm_modifyreg32.c 
b/arch/arm/src/common/arm_modifyreg32.c
index b98bdc3ae3..ccc7d75829 100644
--- a/arch/arm/src/common/arm_modifyreg32.c
+++ b/arch/arm/src/common/arm_modifyreg32.c
@@ -33,6 +33,12 @@
 
 #include "arm_internal.h"
 
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+static spinlock_t g_modifyreg_lock = SP_UNLOCKED;
+
 /****************************************************************************
  * Public Functions
  ****************************************************************************/
@@ -50,10 +56,10 @@ void modifyreg32(unsigned int addr, uint32_t clearbits, 
uint32_t setbits)
   irqstate_t flags;
   uint32_t   regval;
 
-  flags   = spin_lock_irqsave(NULL);
+  flags   = spin_lock_irqsave(&g_modifyreg_lock);
   regval  = getreg32(addr);
   regval &= ~clearbits;
   regval |= setbits;
   putreg32(regval, addr);
-  spin_unlock_irqrestore(NULL, flags);
+  spin_unlock_irqrestore(&g_modifyreg_lock, flags);
 }
diff --git a/arch/arm/src/common/arm_modifyreg8.c 
b/arch/arm/src/common/arm_modifyreg8.c
index a344995117..0e40bc1b5f 100644
--- a/arch/arm/src/common/arm_modifyreg8.c
+++ b/arch/arm/src/common/arm_modifyreg8.c
@@ -33,6 +33,12 @@
 
 #include "arm_internal.h"
 
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+static spinlock_t g_modifyreg_lock = SP_UNLOCKED;
+
 /****************************************************************************
  * Public Functions
  ****************************************************************************/
@@ -50,10 +56,10 @@ void modifyreg8(unsigned int addr, uint8_t clearbits, 
uint8_t setbits)
   irqstate_t flags;
   uint8_t    regval;
 
-  flags   = spin_lock_irqsave(NULL);
+  flags   = spin_lock_irqsave(&g_modifyreg_lock);
   regval  = getreg8(addr);
   regval &= ~clearbits;
   regval |= setbits;
   putreg8(regval, addr);
-  spin_unlock_irqrestore(NULL, flags);
+  spin_unlock_irqrestore(&g_modifyreg_lock, flags);
 }
diff --git a/arch/arm64/src/common/arm64_modifyreg32.c 
b/arch/arm64/src/common/arm64_modifyreg32.c
index 1dd9008c01..25e5405fea 100644
--- a/arch/arm64/src/common/arm64_modifyreg32.c
+++ b/arch/arm64/src/common/arm64_modifyreg32.c
@@ -33,6 +33,12 @@
 
 #include "arm64_internal.h"
 
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+static spinlock_t g_modifyreg_lock = SP_UNLOCKED;
+
 /****************************************************************************
  * Public Functions
  ****************************************************************************/
@@ -50,10 +56,10 @@ void modifyreg32(unsigned int addr, uint32_t clearbits, 
uint32_t setbits)
   irqstate_t flags;
   uint32_t   regval;
 
-  flags   = spin_lock_irqsave(NULL);
+  flags   = spin_lock_irqsave(&g_modifyreg_lock);
   regval  = getreg32(addr);
   regval &= ~clearbits;
   regval |= setbits;
   putreg32(regval, addr);
-  spin_unlock_irqrestore(NULL, flags);
+  spin_unlock_irqrestore(&g_modifyreg_lock, flags);
 }
diff --git a/arch/arm64/src/common/arm64_modifyreg8.c 
b/arch/arm64/src/common/arm64_modifyreg8.c
index 7ab314b3e3..900d6f2af9 100644
--- a/arch/arm64/src/common/arm64_modifyreg8.c
+++ b/arch/arm64/src/common/arm64_modifyreg8.c
@@ -33,6 +33,12 @@
 
 #include "arm64_internal.h"
 
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+static spinlock_t g_modifyreg_lock = SP_UNLOCKED;
+
 /****************************************************************************
  * Public Functions
  ****************************************************************************/
@@ -50,10 +56,10 @@ void modifyreg8(unsigned int addr, uint8_t clearbits, 
uint8_t setbits)
   irqstate_t flags;
   uint8_t    regval;
 
-  flags   = spin_lock_irqsave(NULL);
+  flags   = spin_lock_irqsave(&g_modifyreg_lock);
   regval  = getreg8(addr);
   regval &= ~clearbits;
   regval |= setbits;
   putreg8(regval, addr);
-  spin_unlock_irqrestore(NULL, flags);
+  spin_unlock_irqrestore(&g_modifyreg_lock, flags);
 }
diff --git a/arch/avr/src/common/avr_modifyreg32.c 
b/arch/avr/src/common/avr_modifyreg32.c
index a4733773b9..1dd4666639 100644
--- a/arch/avr/src/common/avr_modifyreg32.c
+++ b/arch/avr/src/common/avr_modifyreg32.c
@@ -31,6 +31,7 @@
 
 #include <nuttx/irq.h>
 #include <nuttx/arch.h>
+#include <nuttx/spinlock.h>
 
 #include "avr_internal.h"
 
@@ -42,6 +43,8 @@
  * Private Data
  ****************************************************************************/
 
+static spinlock_t g_modifyreg_lock = SP_UNLOCKED;
+
 /****************************************************************************
  * Private Functions
  ****************************************************************************/
@@ -63,10 +66,10 @@ void modifyreg32(unsigned int addr, uint32_t clearbits, 
uint32_t setbits)
   irqstate_t flags;
   uint32_t   regval;
 
-  flags   = enter_critical_section();
+  flags   = spin_lock_irqsave(&g_modifyreg_lock);
   regval  = getreg32(addr);
   regval &= ~clearbits;
   regval |= setbits;
   putreg32(regval, addr);
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(&g_modifyreg_lock, flags);
 }
diff --git a/arch/avr/src/common/avr_modifyreg8.c 
b/arch/avr/src/common/avr_modifyreg8.c
index 7419750c03..59bb0fbd79 100644
--- a/arch/avr/src/common/avr_modifyreg8.c
+++ b/arch/avr/src/common/avr_modifyreg8.c
@@ -31,6 +31,7 @@
 
 #include <nuttx/irq.h>
 #include <nuttx/arch.h>
+#include <nuttx/spinlock.h>
 
 #include "avr_internal.h"
 
@@ -42,6 +43,8 @@
  * Private Data
  ****************************************************************************/
 
+static spinlock_t g_modifyreg_lock = SP_UNLOCKED;
+
 /****************************************************************************
  * Private Functions
  ****************************************************************************/
@@ -63,10 +66,10 @@ void modifyreg8(unsigned int addr, uint8_t clearbits, 
uint8_t setbits)
   irqstate_t flags;
   uint8_t    regval;
 
-  flags   = enter_critical_section();
+  flags   = spin_lock_irqsave(&g_modifyreg_lock);
   regval  = getreg8(addr);
   regval &= ~clearbits;
   regval |= setbits;
   putreg8(regval, addr);
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(&g_modifyreg_lock, flags);
 }
diff --git a/arch/ceva/src/common/ceva_modifyreg32.c 
b/arch/ceva/src/common/ceva_modifyreg32.c
index af64f365f4..5fd84ad3e0 100644
--- a/arch/ceva/src/common/ceva_modifyreg32.c
+++ b/arch/ceva/src/common/ceva_modifyreg32.c
@@ -29,6 +29,12 @@
 
 #include "ceva_internal.h"
 
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+static spinlock_t g_modifyreg_lock = SP_UNLOCKED;
+
 /****************************************************************************
  * Public Functions
  ****************************************************************************/
@@ -46,10 +52,10 @@ void modifyreg32(unsigned int addr, uint32_t clearbits, 
uint32_t setbits)
   irqstate_t flags;
   uint32_t   regval;
 
-  flags   = spin_lock_irqsave(NULL);
+  flags   = spin_lock_irqsave(&g_modifyreg_lock);
   regval  = getreg32(addr);
   regval &= ~clearbits;
   regval |= setbits;
   putreg32(regval, addr);
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(&g_modifyreg_lock, flags);
 }
diff --git a/arch/ceva/src/common/ceva_modifyreg8.c 
b/arch/ceva/src/common/ceva_modifyreg8.c
index c0c1c78beb..b91ca92fe2 100644
--- a/arch/ceva/src/common/ceva_modifyreg8.c
+++ b/arch/ceva/src/common/ceva_modifyreg8.c
@@ -29,6 +29,12 @@
 
 #include "ceva_internal.h"
 
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+static spinlock_t g_modifyreg_lock = SP_UNLOCKED;
+
 /****************************************************************************
  * Public Functions
  ****************************************************************************/
@@ -46,10 +52,10 @@ void modifyreg8(unsigned int addr, uint8_t clearbits, 
uint8_t setbits)
   irqstate_t flags;
   uint8_t    regval;
 
-  flags   = spin_lock_irqsave(NULL);
+  flags   = spin_lock_irqsave(&g_modifyreg_lock);
   regval  = getreg8(addr);
   regval &= ~clearbits;
   regval |= setbits;
   putreg8(regval, addr);
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(&g_modifyreg_lock, flags);
 }
diff --git a/arch/hc/src/common/hc_modifyreg32.c 
b/arch/hc/src/common/hc_modifyreg32.c
index b10296f720..0ac164a31d 100644
--- a/arch/hc/src/common/hc_modifyreg32.c
+++ b/arch/hc/src/common/hc_modifyreg32.c
@@ -31,6 +31,7 @@
 
 #include <nuttx/irq.h>
 #include <nuttx/arch.h>
+#include <nuttx/spinlock.h>
 
 #include "hc_internal.h"
 
@@ -42,6 +43,8 @@
  * Private Data
  ****************************************************************************/
 
+static spinlock_t g_modifyreg_lock = SP_UNLOCKED;
+
 /****************************************************************************
  * Private Functions
  ****************************************************************************/
@@ -63,10 +66,10 @@ void modifyreg32(unsigned int addr, uint32_t clearbits, 
uint32_t setbits)
   irqstate_t flags;
   uint32_t   regval;
 
-  flags   = enter_critical_section();
+  flags   = spin_lock_irqsave(&g_modifyreg_lock);
   regval  = getreg32(addr);
   regval &= ~clearbits;
   regval |= setbits;
   putreg32(regval, addr);
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(&g_modifyreg_lock, flags);
 }
diff --git a/arch/hc/src/common/hc_modifyreg8.c 
b/arch/hc/src/common/hc_modifyreg8.c
index 05e08e9f1e..e18263c8eb 100644
--- a/arch/hc/src/common/hc_modifyreg8.c
+++ b/arch/hc/src/common/hc_modifyreg8.c
@@ -31,6 +31,7 @@
 
 #include <nuttx/irq.h>
 #include <nuttx/arch.h>
+#include <nuttx/spinlock.h>
 
 #include "hc_internal.h"
 
@@ -42,6 +43,8 @@
  * Private Data
  ****************************************************************************/
 
+static spinlock_t g_modifyreg_lock = SP_UNLOCKED;
+
 /****************************************************************************
  * Private Functions
  ****************************************************************************/
@@ -63,10 +66,10 @@ void modifyreg8(unsigned int addr, uint8_t clearbits, 
uint8_t setbits)
   irqstate_t flags;
   uint8_t    regval;
 
-  flags   = enter_critical_section();
+  flags   = spin_lock_irqsave(&g_modifyreg_lock);
   regval  = getreg8(addr);
   regval &= ~clearbits;
   regval |= setbits;
   putreg8(regval, addr);
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(&g_modifyreg_lock, flags);
 }
diff --git a/arch/mips/src/common/mips_modifyreg32.c 
b/arch/mips/src/common/mips_modifyreg32.c
index a6ea0c1c21..59364f48ff 100644
--- a/arch/mips/src/common/mips_modifyreg32.c
+++ b/arch/mips/src/common/mips_modifyreg32.c
@@ -31,6 +31,7 @@
 
 #include <nuttx/irq.h>
 #include <nuttx/arch.h>
+#include <nuttx/spinlock.h>
 
 #include "mips_internal.h"
 
@@ -42,6 +43,8 @@
  * Private Data
  ****************************************************************************/
 
+static spinlock_t g_modifyreg_lock = SP_UNLOCKED;
+
 /****************************************************************************
  * Private Functions
  ****************************************************************************/
@@ -63,10 +66,10 @@ void modifyreg32(unsigned int addr, uint32_t clearbits, 
uint32_t setbits)
   irqstate_t flags;
   uint32_t   regval;
 
-  flags   = enter_critical_section();
+  flags   = spin_lock_irqsave(&g_modifyreg_lock);
   regval  = getreg32(addr);
   regval &= ~clearbits;
   regval |= setbits;
   putreg32(regval, addr);
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(&g_modifyreg_lock, flags);
 }
diff --git a/arch/mips/src/common/mips_modifyreg8.c 
b/arch/mips/src/common/mips_modifyreg8.c
index 43884a583c..fac89d1776 100644
--- a/arch/mips/src/common/mips_modifyreg8.c
+++ b/arch/mips/src/common/mips_modifyreg8.c
@@ -31,6 +31,7 @@
 
 #include <nuttx/irq.h>
 #include <nuttx/arch.h>
+#include <nuttx/spinlock.h>
 
 #include "mips_internal.h"
 
@@ -42,6 +43,8 @@
  * Private Data
  ****************************************************************************/
 
+static spinlock_t g_modifyreg_lock = SP_UNLOCKED;
+
 /****************************************************************************
  * Private Functions
  ****************************************************************************/
@@ -63,10 +66,10 @@ void modifyreg8(unsigned int addr, uint8_t clearbits, 
uint8_t setbits)
   irqstate_t flags;
   uint8_t    regval;
 
-  flags   = enter_critical_section();
+  flags   = spin_lock_irqsave(&g_modifyreg_lock);
   regval  = getreg8(addr);
   regval &= ~clearbits;
   regval |= setbits;
   putreg8(regval, addr);
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(&g_modifyreg_lock, flags);
 }
diff --git a/arch/misoc/src/common/misoc_modifyreg32.c 
b/arch/misoc/src/common/misoc_modifyreg32.c
index 2a5d372efc..6d02b36367 100644
--- a/arch/misoc/src/common/misoc_modifyreg32.c
+++ b/arch/misoc/src/common/misoc_modifyreg32.c
@@ -31,9 +31,16 @@
 
 #include <nuttx/irq.h>
 #include <nuttx/arch.h>
+#include <nuttx/spinlock.h>
 
 #include "misoc.h"
 
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+static spinlock_t g_modifyreg_lock = SP_UNLOCKED;
+
 /****************************************************************************
  * Public Functions
  ****************************************************************************/
@@ -51,10 +58,10 @@ void modifyreg32(unsigned int addr, uint32_t clearbits, 
uint32_t setbits)
   irqstate_t flags;
   uint32_t   regval;
 
-  flags   = enter_critical_section();
+  flags   = spin_lock_irqsave(&g_modifyreg_lock);
   regval  = getreg32(addr);
   regval &= ~clearbits;
   regval |= setbits;
   putreg32(regval, addr);
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(&g_modifyreg_lock, flags);
 }
diff --git a/arch/misoc/src/common/misoc_modifyreg8.c 
b/arch/misoc/src/common/misoc_modifyreg8.c
index 7eda3878d9..207d8fe0dc 100644
--- a/arch/misoc/src/common/misoc_modifyreg8.c
+++ b/arch/misoc/src/common/misoc_modifyreg8.c
@@ -31,9 +31,16 @@
 
 #include <nuttx/irq.h>
 #include <nuttx/arch.h>
+#include <nuttx/spinlock.h>
 
 #include "misoc.h"
 
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+static spinlock_t g_modifyreg_lock = SP_UNLOCKED;
+
 /****************************************************************************
  * Public Functions
  ****************************************************************************/
@@ -51,10 +58,10 @@ void modifyreg8(unsigned int addr, uint8_t clearbits, 
uint8_t setbits)
   irqstate_t flags;
   uint8_t    regval;
 
-  flags   = enter_critical_section();
+  flags   = spin_lock_irqsave(&g_modifyreg_lock);
   regval  = getreg8(addr);
   regval &= ~clearbits;
   regval |= setbits;
   putreg8(regval, addr);
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(&g_modifyreg_lock, flags);
 }
diff --git a/arch/or1k/src/common/or1k_modifyreg32.c 
b/arch/or1k/src/common/or1k_modifyreg32.c
index c079d32323..7e56c0d308 100644
--- a/arch/or1k/src/common/or1k_modifyreg32.c
+++ b/arch/or1k/src/common/or1k_modifyreg32.c
@@ -33,6 +33,12 @@
 
 #include "or1k_internal.h"
 
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+static spinlock_t g_modifyreg_lock = SP_UNLOCKED;
+
 /****************************************************************************
  * Public Functions
  ****************************************************************************/
@@ -50,10 +56,10 @@ void modifyreg32(unsigned int addr, uint32_t clearbits, 
uint32_t setbits)
   irqstate_t flags;
   uint32_t   regval;
 
-  flags   = spin_lock_irqsave(NULL);
+  flags   = spin_lock_irqsave(&g_modifyreg_lock);
   regval  = getreg32(addr);
   regval &= ~clearbits;
   regval |= setbits;
   putreg32(regval, addr);
-  spin_unlock_irqrestore(NULL, flags);
+  spin_unlock_irqrestore(&g_modifyreg_lock, flags);
 }
diff --git a/arch/or1k/src/common/or1k_modifyreg8.c 
b/arch/or1k/src/common/or1k_modifyreg8.c
index c378b542a0..32783b168c 100644
--- a/arch/or1k/src/common/or1k_modifyreg8.c
+++ b/arch/or1k/src/common/or1k_modifyreg8.c
@@ -33,6 +33,12 @@
 
 #include "or1k_internal.h"
 
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+static spinlock_t g_modifyreg_lock = SP_UNLOCKED;
+
 /****************************************************************************
  * Public Functions
  ****************************************************************************/
@@ -50,10 +56,10 @@ void modifyreg8(unsigned int addr, uint8_t clearbits, 
uint8_t setbits)
   irqstate_t flags;
   uint8_t    regval;
 
-  flags   = spin_lock_irqsave(NULL);
+  flags   = spin_lock_irqsave(&g_modifyreg_lock);
   regval  = getreg8(addr);
   regval &= ~clearbits;
   regval |= setbits;
   putreg8(regval, addr);
-  spin_unlock_irqrestore(NULL, flags);
+  spin_unlock_irqrestore(&g_modifyreg_lock, flags);
 }
diff --git a/arch/risc-v/src/common/riscv_modifyreg32.c 
b/arch/risc-v/src/common/riscv_modifyreg32.c
index 478351764e..93b5d27712 100644
--- a/arch/risc-v/src/common/riscv_modifyreg32.c
+++ b/arch/risc-v/src/common/riscv_modifyreg32.c
@@ -33,6 +33,12 @@
 
 #include "riscv_internal.h"
 
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+static spinlock_t g_modifyreg_lock = SP_UNLOCKED;
+
 /****************************************************************************
  * Public Functions
  ****************************************************************************/
@@ -50,10 +56,10 @@ void modifyreg32(uintreg_t addr, uint32_t clearbits, 
uint32_t setbits)
   irqstate_t flags;
   uint32_t   regval;
 
-  flags   = spin_lock_irqsave(NULL);
+  flags   = spin_lock_irqsave(&g_modifyreg_lock);
   regval  = getreg32(addr);
   regval &= ~clearbits;
   regval |= setbits;
   putreg32(regval, addr);
-  spin_unlock_irqrestore(NULL, flags);
+  spin_unlock_irqrestore(&g_modifyreg_lock, flags);
 }
diff --git a/arch/sparc/src/common/sparc_modifyreg32.c 
b/arch/sparc/src/common/sparc_modifyreg32.c
index 899d06670e..9e42428cd8 100644
--- a/arch/sparc/src/common/sparc_modifyreg32.c
+++ b/arch/sparc/src/common/sparc_modifyreg32.c
@@ -42,6 +42,8 @@
  * Private Data
  ****************************************************************************/
 
+static spinlock_t g_modifyreg_lock = SP_UNLOCKED;
+
 /****************************************************************************
  * Private Functions
  ****************************************************************************/
@@ -63,11 +65,11 @@ void modifyreg32(unsigned int addr, uint32_t clearbits, 
uint32_t setbits)
   irqstate_t flags;
   uint32_t   regval;
 
-  flags   = spin_lock_irqsave(NULL);
+  flags   = spin_lock_irqsave(&g_modifyreg_lock);
   regval  = getreg32(addr);
   regval &= ~clearbits;
   regval |= setbits;
   putreg32(regval, addr);
-  spin_unlock_irqrestore(NULL, flags);
+  spin_unlock_irqrestore(&g_modifyreg_lock, flags);
 }
 
diff --git a/arch/sparc/src/common/sparc_modifyreg8.c 
b/arch/sparc/src/common/sparc_modifyreg8.c
index 3b5d6b3695..a91cd271f8 100644
--- a/arch/sparc/src/common/sparc_modifyreg8.c
+++ b/arch/sparc/src/common/sparc_modifyreg8.c
@@ -42,6 +42,8 @@
  * Private Data
  ****************************************************************************/
 
+static spinlock_t g_modifyreg_lock = SP_UNLOCKED;
+
 /****************************************************************************
  * Private Functions
  ****************************************************************************/
@@ -63,11 +65,11 @@ void modifyreg8(unsigned int addr, uint8_t clearbits, 
uint8_t setbits)
   irqstate_t flags;
   uint8_t    regval;
 
-  flags   = spin_lock_irqsave(NULL);
+  flags   = spin_lock_irqsave(&g_modifyreg_lock);
   regval  = getreg8(addr);
   regval &= ~clearbits;
   regval |= setbits;
   putreg8(regval, addr);
-  spin_unlock_irqrestore(NULL, flags);
+  spin_unlock_irqrestore(&g_modifyreg_lock, flags);
 }
 
diff --git a/arch/x86/src/common/x86_modifyreg32.c 
b/arch/x86/src/common/x86_modifyreg32.c
index 2f4f30935c..8b4b61d5a3 100644
--- a/arch/x86/src/common/x86_modifyreg32.c
+++ b/arch/x86/src/common/x86_modifyreg32.c
@@ -31,6 +31,7 @@
 
 #include <nuttx/irq.h>
 #include <nuttx/arch.h>
+#include <nuttx/spinlock.h>
 
 #include "x86_internal.h"
 
@@ -42,6 +43,8 @@
  * Private Data
  ****************************************************************************/
 
+static spinlock_t g_modifyreg_lock = SP_UNLOCKED;
+
 /****************************************************************************
  * Private Functions
  ****************************************************************************/
@@ -63,10 +66,10 @@ void modifyreg32(unsigned int addr, uint32_t clearbits, 
uint32_t setbits)
   irqstate_t flags;
   uint32_t   regval;
 
-  flags   = enter_critical_section();
+  flags   = spin_lock_irqsave(&g_modifyreg_lock);
   regval  = getreg32((uint16_t)addr);
   regval &= ~clearbits;
   regval |= setbits;
   putreg32(regval, (uint16_t)addr);
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(&g_modifyreg_lock, flags);
 }
diff --git a/arch/x86/src/common/x86_modifyreg8.c 
b/arch/x86/src/common/x86_modifyreg8.c
index 03d1169fed..2145e72e29 100644
--- a/arch/x86/src/common/x86_modifyreg8.c
+++ b/arch/x86/src/common/x86_modifyreg8.c
@@ -31,6 +31,7 @@
 
 #include <nuttx/irq.h>
 #include <nuttx/arch.h>
+#include <nuttx/spinlock.h>
 
 #include "x86_internal.h"
 
@@ -42,6 +43,8 @@
  * Private Data
  ****************************************************************************/
 
+static spinlock_t g_modifyreg_lock = SP_UNLOCKED;
+
 /****************************************************************************
  * Private Functions
  ****************************************************************************/
@@ -63,10 +66,10 @@ void modifyreg8(unsigned int addr, uint8_t clearbits, 
uint8_t setbits)
   irqstate_t flags;
   uint8_t    regval;
 
-  flags   = enter_critical_section();
+  flags   = spin_lock_irqsave(&g_modifyreg_lock);
   regval  = getreg8((uint16_t)addr);
   regval &= ~clearbits;
   regval |= setbits;
   putreg8(regval, (uint16_t)addr);
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(&g_modifyreg_lock, flags);
 }
diff --git a/arch/x86_64/src/common/x86_64_modifyreg32.c 
b/arch/x86_64/src/common/x86_64_modifyreg32.c
index 44427620f1..c1e182a7e5 100644
--- a/arch/x86_64/src/common/x86_64_modifyreg32.c
+++ b/arch/x86_64/src/common/x86_64_modifyreg32.c
@@ -31,6 +31,7 @@
 
 #include <nuttx/irq.h>
 #include <nuttx/arch.h>
+#include <nuttx/spinlock.h>
 
 #include "x86_64_internal.h"
 
@@ -42,6 +43,8 @@
  * Private Data
  ****************************************************************************/
 
+static spinlock_t g_modifyreg_lock = SP_UNLOCKED;
+
 /****************************************************************************
  * Private Functions
  ****************************************************************************/
@@ -63,10 +66,10 @@ void modifyreg32(unsigned int addr, uint32_t clearbits, 
uint32_t setbits)
   irqstate_t flags;
   uint32_t   regval;
 
-  flags   = enter_critical_section();
+  flags   = spin_lock_irqsave(&g_modifyreg_lock);
   regval  = getreg32((uint16_t)addr);
   regval &= ~clearbits;
   regval |= setbits;
   putreg32(regval, (uint16_t)addr);
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(&g_modifyreg_lock, flags);
 }
diff --git a/arch/x86_64/src/common/x86_64_modifyreg8.c 
b/arch/x86_64/src/common/x86_64_modifyreg8.c
index 9593752ac6..0970eb3f6e 100644
--- a/arch/x86_64/src/common/x86_64_modifyreg8.c
+++ b/arch/x86_64/src/common/x86_64_modifyreg8.c
@@ -31,6 +31,7 @@
 
 #include <nuttx/irq.h>
 #include <nuttx/arch.h>
+#include <nuttx/spinlock.h>
 
 #include "x86_64_internal.h"
 
@@ -42,6 +43,8 @@
  * Private Data
  ****************************************************************************/
 
+static spinlock_t g_modifyreg_lock = SP_UNLOCKED;
+
 /****************************************************************************
  * Private Functions
  ****************************************************************************/
@@ -63,10 +66,10 @@ void modifyreg8(unsigned int addr, uint8_t clearbits, 
uint8_t setbits)
   irqstate_t flags;
   uint8_t    regval;
 
-  flags   = enter_critical_section();
+  flags   = spin_lock_irqsave(&g_modifyreg_lock);
   regval  = getreg8((uint16_t)addr);
   regval &= ~clearbits;
   regval |= setbits;
   putreg8(regval, (uint16_t)addr);
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(&g_modifyreg_lock, flags);
 }
diff --git a/arch/xtensa/src/common/xtensa_modifyreg32.c 
b/arch/xtensa/src/common/xtensa_modifyreg32.c
index 11028c1c53..6ad6b235fe 100644
--- a/arch/xtensa/src/common/xtensa_modifyreg32.c
+++ b/arch/xtensa/src/common/xtensa_modifyreg32.c
@@ -35,6 +35,12 @@
 
 #include "xtensa.h"
 
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+static spinlock_t g_modifyreg_lock = SP_UNLOCKED;
+
 /****************************************************************************
  * Public Functions
  ****************************************************************************/
@@ -52,10 +58,10 @@ void modifyreg32(unsigned int addr, uint32_t clearbits, 
uint32_t setbits)
   irqstate_t flags;
   uint32_t   regval;
 
-  flags   = spin_lock_irqsave(NULL);
+  flags   = spin_lock_irqsave(&g_modifyreg_lock);
   regval  = getreg32(addr);
   regval &= ~clearbits;
   regval |= setbits;
   putreg32(regval, addr);
-  spin_unlock_irqrestore(NULL, flags);
+  spin_unlock_irqrestore(&g_modifyreg_lock, flags);
 }
diff --git a/arch/xtensa/src/common/xtensa_modifyreg8.c 
b/arch/xtensa/src/common/xtensa_modifyreg8.c
index 79de967099..dd9c0c1df9 100644
--- a/arch/xtensa/src/common/xtensa_modifyreg8.c
+++ b/arch/xtensa/src/common/xtensa_modifyreg8.c
@@ -35,6 +35,12 @@
 
 #include "xtensa.h"
 
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+static spinlock_t g_modifyreg_lock = SP_UNLOCKED;
+
 /****************************************************************************
  * Public Functions
  ****************************************************************************/
@@ -52,10 +58,10 @@ void modifyreg8(unsigned int addr, uint8_t clearbits, 
uint8_t setbits)
   irqstate_t flags;
   uint8_t    regval;
 
-  flags   = spin_lock_irqsave(NULL);
+  flags   = spin_lock_irqsave(&g_modifyreg_lock);
   regval  = getreg8(addr);
   regval &= ~clearbits;
   regval |= setbits;
   putreg8(regval, addr);
-  spin_unlock_irqrestore(NULL, flags);
+  spin_unlock_irqrestore(&g_modifyreg_lock, flags);
 }
diff --git a/arch/z80/src/z180/z180_modifiyreg8.c 
b/arch/z80/src/z180/z180_modifiyreg8.c
index 282e659213..35a4ca63e7 100644
--- a/arch/z80/src/z180/z180_modifiyreg8.c
+++ b/arch/z80/src/z180/z180_modifiyreg8.c
@@ -29,6 +29,7 @@
 #include <stdint.h>
 
 #include <nuttx/irq.h>
+#include <nuttx/spinlock.h>
 #include <arch/io.h>
 
 /****************************************************************************
@@ -39,6 +40,8 @@
  * Private Data
  ****************************************************************************/
 
+static spinlock_t g_modifyreg_lock = SP_UNLOCKED;
+
 /****************************************************************************
  * Private Functions
  ****************************************************************************/
@@ -60,10 +63,10 @@ void modifyreg8(uint16_t addr, uint8_t clearbits, uint8_t 
setbits)
   irqstate_t flags;
   uint8_t    regval;
 
-  flags   = enter_critical_section();
+  flags   = spin_lock_irqsave(&g_modifyreg_lock);
   regval  = inp(addr);
   regval &= ~clearbits;
   regval |= setbits;
   outp(regval, addr);
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(&g_modifyreg_lock, flags);
 }

Reply via email to