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

commit 5cee996588139e1f3d96b67daca353701c122c73
Author: hujun5 <[email protected]>
AuthorDate: Thu Dec 7 21:31:02 2023 +0800

    up_putc: int up_putc, enter_critical_section may be called
    before kernel has been iniitialized,we use spin_lock_irqsave to replace.
    
    Signed-off-by: hujun5 <[email protected]>
---
 arch/arm/src/at32/at32_serial.c                  |  8 ++++----
 arch/arm/src/efm32/efm32_leserial.c              |  8 ++++----
 arch/arm/src/efm32/efm32_serial.c                |  8 ++++----
 arch/arm/src/gd32f4/gd32f4xx_serial.c            |  8 ++++----
 arch/arm/src/kinetis/kinetis_lpserial.c          |  8 ++++----
 arch/arm/src/kinetis/kinetis_serial.c            | 12 ++++++------
 arch/arm/src/kl/kl_serial.c                      | 12 ++++++------
 arch/arm/src/lpc54xx/lpc54_lowputc.c             |  8 +++++---
 arch/arm/src/lpc54xx/lpc54_serial.c              |  4 ++--
 arch/arm/src/sam34/sam_lowputc.c                 |  7 ++++---
 arch/arm/src/sama5/sam_lowputc.c                 |  7 ++++---
 arch/arm/src/samd2l2/sam_serial.c                |  4 ++--
 arch/arm/src/samd5e5/sam_serial.c                |  4 ++--
 arch/arm/src/samv7/sam_lowputc.c                 |  7 ++++---
 arch/arm/src/stm32/stm32_serial.c                |  8 ++++----
 arch/arm/src/stm32f0l0g0/stm32_serial_v1.c       |  4 ++--
 arch/arm/src/stm32f0l0g0/stm32_serial_v2.c       |  8 ++++----
 arch/arm/src/stm32f7/stm32_serial.c              |  8 ++++----
 arch/arm/src/stm32h7/stm32_serial.c              |  8 ++++----
 arch/arm/src/stm32l4/stm32l4_serial.c            |  8 ++++----
 arch/arm/src/stm32l5/stm32l5_serial.c            |  8 ++++----
 arch/arm/src/stm32u5/stm32_serial.c              |  4 ++--
 arch/arm/src/stm32wb/stm32wb_serial.c            |  8 ++++----
 arch/arm/src/stm32wl5/stm32wl5_serial.c          |  8 ++++----
 arch/arm/src/tms570/tms570_lowputc.c             |  7 ++++---
 arch/arm/src/xmc4/xmc4_serial.c                  | 16 ++++++++--------
 arch/arm64/src/a64/a64_serial.c                  |  4 ++--
 arch/mips/src/pic32mx/pic32mx_serial.c           |  8 ++++----
 arch/mips/src/pic32mz/pic32mz_serial.c           |  8 ++++----
 arch/or1k/src/mor1kx/mor1kx_serial.c             |  4 ++--
 arch/risc-v/src/bl602/bl602_serial.c             |  4 ++--
 arch/risc-v/src/c906/c906_serial.c               |  8 ++++----
 arch/risc-v/src/common/espressif/esp_lowputc.c   |  4 ++--
 arch/risc-v/src/esp32c3-legacy/esp32c3_lowputc.c |  4 ++--
 arch/risc-v/src/fe310/fe310_serial.c             |  8 ++++----
 arch/risc-v/src/hpm6750/hpm6750_serial.c         |  8 ++++----
 arch/risc-v/src/k210/k210_serial.c               |  8 ++++----
 arch/risc-v/src/litex/litex_serial.c             |  8 ++++----
 arch/risc-v/src/rv32m1/rv32m1_serial.c           |  8 ++++----
 arch/sparc/src/bm3803/bm3803-serial.c            |  8 ++++----
 arch/sparc/src/bm3823/bm3823-serial.c            |  8 ++++----
 arch/xtensa/src/esp32s2/esp32s2_lowputc.c        |  4 ++--
 arch/z16/src/z16f/z16f_serial.c                  |  8 ++++----
 arch/z80/src/z8/z8_serial.c                      |  8 ++++----
 drivers/serial/uart_16550.c                      | 12 ++++--------
 45 files changed, 167 insertions(+), 165 deletions(-)

diff --git a/arch/arm/src/at32/at32_serial.c b/arch/arm/src/at32/at32_serial.c
index b776cd9f7f..05c70cd967 100644
--- a/arch/arm/src/at32/at32_serial.c
+++ b/arch/arm/src/at32/at32_serial.c
@@ -1118,11 +1118,11 @@ static void up_restoreusartint(struct up_dev_s *priv, 
uint16_t ie)
 {
   irqstate_t flags;
 
-  flags = enter_critical_section();
+  flags = spin_lock_irqsave(NULL);
 
   up_setusartint(priv, ie);
 
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
@@ -1133,7 +1133,7 @@ static void up_disableusartint(struct up_dev_s *priv, 
uint16_t *ie)
 {
   irqstate_t flags;
 
-  flags = enter_critical_section();
+  flags = spin_lock_irqsave(NULL);
 
   if (ie)
     {
@@ -1174,7 +1174,7 @@ static void up_disableusartint(struct up_dev_s *priv, 
uint16_t *ie)
 
   up_setusartint(priv, 0);
 
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
diff --git a/arch/arm/src/efm32/efm32_leserial.c 
b/arch/arm/src/efm32/efm32_leserial.c
index 4c66ea3525..c8d396cd26 100644
--- a/arch/arm/src/efm32/efm32_leserial.c
+++ b/arch/arm/src/efm32/efm32_leserial.c
@@ -308,10 +308,10 @@ static void efm32_restoreuartint(struct efm32_leuart_s 
*priv, uint32_t ien)
    * bits in ien.
    */
 
-  flags     = enter_critical_section();
+  flags     = spin_lock_irqsave(NULL);
   priv->ien = ien;
   efm32_setuartint(priv);
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
@@ -322,14 +322,14 @@ static void efm32_disableuartint(struct efm32_leuart_s 
*priv, uint32_t *ien)
 {
   irqstate_t flags;
 
-  flags = enter_critical_section();
+  flags = spin_lock_irqsave(NULL);
   if (ien)
     {
       *ien = priv->ien;
     }
 
   efm32_restoreuartint(priv, 0);
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
diff --git a/arch/arm/src/efm32/efm32_serial.c 
b/arch/arm/src/efm32/efm32_serial.c
index 7e32cc1448..e258314207 100644
--- a/arch/arm/src/efm32/efm32_serial.c
+++ b/arch/arm/src/efm32/efm32_serial.c
@@ -522,10 +522,10 @@ static void efm32_restoreuartint(struct efm32_usart_s 
*priv, uint32_t ien)
    * ien
    */
 
-  flags     = enter_critical_section();
+  flags     = spin_lock_irqsave(NULL);
   priv->ien = ien;
   efm32_setuartint(priv);
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
@@ -537,14 +537,14 @@ static void efm32_disableuartint(struct efm32_usart_s 
*priv, uint32_t *ien)
 {
   irqstate_t flags;
 
-  flags = enter_critical_section();
+  flags = spin_lock_irqsave(NULL);
   if (ien)
     {
       *ien = priv->ien;
     }
 
   efm32_restoreuartint(priv, 0);
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 #endif
 
diff --git a/arch/arm/src/gd32f4/gd32f4xx_serial.c 
b/arch/arm/src/gd32f4/gd32f4xx_serial.c
index b401ffc729..348840af55 100644
--- a/arch/arm/src/gd32f4/gd32f4xx_serial.c
+++ b/arch/arm/src/gd32f4/gd32f4xx_serial.c
@@ -1124,7 +1124,7 @@ static void up_disableusartint(struct up_dev_s *priv, 
uint32_t *ie)
   irqstate_t flags;
   uint32_t ctl_ie;
 
-  flags = enter_critical_section();
+  flags = spin_lock_irqsave(NULL);
 
   if (ie)
     {
@@ -1158,7 +1158,7 @@ static void up_disableusartint(struct up_dev_s *priv, 
uint32_t *ie)
   ctl_ie = (USART_CFG_CTL_MASK << USART_CFG_SHIFT);
   up_setusartint(priv, ctl_ie);
 
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
@@ -1169,11 +1169,11 @@ static void up_restoreusartint(struct up_dev_s *priv, 
uint32_t ie)
 {
   irqstate_t flags;
 
-  flags = enter_critical_section();
+  flags = spin_lock_irqsave(NULL);
 
   up_setusartint(priv, ie);
 
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
diff --git a/arch/arm/src/kinetis/kinetis_lpserial.c 
b/arch/arm/src/kinetis/kinetis_lpserial.c
index ad82d1054e..d7ca5db9eb 100644
--- a/arch/arm/src/kinetis/kinetis_lpserial.c
+++ b/arch/arm/src/kinetis/kinetis_lpserial.c
@@ -705,10 +705,10 @@ static void kinetis_restoreuartint(struct kinetis_dev_s 
*priv, uint32_t ie)
    * ie
    */
 
-  flags    = enter_critical_section();
+  flags    = spin_lock_irqsave(NULL);
   priv->ie = ie & LPUART_CTRL_ALL_INTS;
   kinetis_setuartint(priv);
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
@@ -720,14 +720,14 @@ static void kinetis_disableuartint(struct kinetis_dev_s 
*priv, uint32_t *ie)
 {
   irqstate_t flags;
 
-  flags = enter_critical_section();
+  flags = spin_lock_irqsave(NULL);
   if (ie)
     {
       *ie = priv->ie;
     }
 
   kinetis_restoreuartint(priv, 0);
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 #endif
 
diff --git a/arch/arm/src/kinetis/kinetis_serial.c 
b/arch/arm/src/kinetis/kinetis_serial.c
index 38a39ab71f..5b6f8f59a8 100644
--- a/arch/arm/src/kinetis/kinetis_serial.c
+++ b/arch/arm/src/kinetis/kinetis_serial.c
@@ -792,12 +792,12 @@ static void up_setuartint(struct up_dev_s *priv)
    * ie
    */
 
-  flags    = enter_critical_section();
+  flags    = spin_lock_irqsave(NULL);
   regval   = up_serialin(priv, KINETIS_UART_C2_OFFSET);
   regval  &= ~UART_C2_ALLINTS;
   regval  |= priv->ie;
   up_serialout(priv, KINETIS_UART_C2_OFFSET, regval);
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
@@ -812,10 +812,10 @@ static void up_restoreuartint(struct up_dev_s *priv, 
uint8_t ie)
    * ie
    */
 
-  flags    = enter_critical_section();
+  flags    = spin_lock_irqsave(NULL);
   priv->ie = ie & UART_C2_ALLINTS;
   up_setuartint(priv);
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
@@ -827,14 +827,14 @@ static void up_disableuartint(struct up_dev_s *priv, 
uint8_t *ie)
 {
   irqstate_t flags;
 
-  flags = enter_critical_section();
+  flags = spin_lock_irqsave(NULL);
   if (ie)
     {
       *ie = priv->ie;
     }
 
   up_restoreuartint(priv, 0);
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 #endif
 
diff --git a/arch/arm/src/kl/kl_serial.c b/arch/arm/src/kl/kl_serial.c
index 94fd2d9f7a..4becc1e2c2 100644
--- a/arch/arm/src/kl/kl_serial.c
+++ b/arch/arm/src/kl/kl_serial.c
@@ -328,12 +328,12 @@ static void up_setuartint(struct up_dev_s *priv)
    * in ie.
    */
 
-  flags    = enter_critical_section();
+  flags    = spin_lock_irqsave(NULL);
   regval   = up_serialin(priv, KL_UART_C2_OFFSET);
   regval  &= ~UART_C2_ALLINTS;
   regval  |= priv->ie;
   up_serialout(priv, KL_UART_C2_OFFSET, regval);
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
@@ -348,10 +348,10 @@ static void up_restoreuartint(struct up_dev_s *priv, 
uint8_t ie)
    * in ie.
    */
 
-  flags    = enter_critical_section();
+  flags    = spin_lock_irqsave(NULL);
   priv->ie = ie & UART_C2_ALLINTS;
   up_setuartint(priv);
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
@@ -362,14 +362,14 @@ static void up_disableuartint(struct up_dev_s *priv, 
uint8_t *ie)
 {
   irqstate_t flags;
 
-  flags = enter_critical_section();
+  flags = spin_lock_irqsave(NULL);
   if (ie)
     {
       *ie = priv->ie;
     }
 
   up_restoreuartint(priv, 0);
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
diff --git a/arch/arm/src/lpc54xx/lpc54_lowputc.c 
b/arch/arm/src/lpc54xx/lpc54_lowputc.c
index c859665d7e..4360c91b03 100644
--- a/arch/arm/src/lpc54xx/lpc54_lowputc.c
+++ b/arch/arm/src/lpc54xx/lpc54_lowputc.c
@@ -63,6 +63,8 @@
 
 #include <arch/board/board.h>
 
+#include <nuttx/arch.h>
+
 /****************************************************************************
  * Pre-processor Definitions
  ****************************************************************************/
@@ -797,18 +799,18 @@ void arm_lowputc(char ch)
        * atomic.
        */
 
-      flags = enter_critical_section();
+      flags = spin_lock_irqsave(NULL);
       if ((getreg32(CONSOLE_BASE + LPC54_USART_FIFOSTAT_OFFSET) &
           USART_FIFOSTAT_TXNOTFULL) != 0)
         {
           /* Send the character */
 
           putreg32((uint32_t)ch, CONSOLE_BASE + LPC54_USART_FIFOWR_OFFSET);
-          leave_critical_section(flags);
+          spin_unlock_irqrestore(NULL, flags);
           return;
         }
 
-      leave_critical_section(flags);
+      spin_unlock_irqrestore(NULL, flags);
     }
 #endif
 }
diff --git a/arch/arm/src/lpc54xx/lpc54_serial.c 
b/arch/arm/src/lpc54xx/lpc54_serial.c
index cfaa94e40f..4d62be6222 100644
--- a/arch/arm/src/lpc54xx/lpc54_serial.c
+++ b/arch/arm/src/lpc54xx/lpc54_serial.c
@@ -922,14 +922,14 @@ static void lpc54_fifoint_disableall(struct lpc54_dev_s 
*priv,
 {
   irqstate_t flags;
 
-  flags = enter_critical_section();
+  flags = spin_lock_irqsave(NULL);
   if (intset)
     {
       *intset = lpc54_serialin(priv, LPC54_USART_FIFOINTENCLR_OFFSET);
     }
 
   lpc54_serialout(priv, LPC54_USART_FIFOINTENCLR_OFFSET, USART_FIFOINT_ALL);
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
diff --git a/arch/arm/src/sam34/sam_lowputc.c b/arch/arm/src/sam34/sam_lowputc.c
index 3ec9fc51e2..0c2f1078cc 100644
--- a/arch/arm/src/sam34/sam_lowputc.c
+++ b/arch/arm/src/sam34/sam_lowputc.c
@@ -27,6 +27,7 @@
 #include <stdint.h>
 
 #include <nuttx/irq.h>
+#include <nuttx/arch.h>
 
 #include "arm_internal.h"
 #include "sam_gpio.h"
@@ -277,18 +278,18 @@ void arm_lowputc(char ch)
        * atomic.
        */
 
-      flags = enter_critical_section();
+      flags = spin_lock_irqsave(NULL);
       if ((getreg32(SAM_CONSOLE_BASE + SAM_UART_SR_OFFSET) &
         UART_INT_TXEMPTY) != 0)
         {
           /* Send the character */
 
           putreg32((uint32_t)ch, SAM_CONSOLE_BASE + SAM_UART_THR_OFFSET);
-          leave_critical_section(flags);
+          spin_unlock_irqrestore(NULL, flags);
           return;
         }
 
-      leave_critical_section(flags);
+      spin_unlock_irqrestore(NULL, flags);
     }
 #endif
 }
diff --git a/arch/arm/src/sama5/sam_lowputc.c b/arch/arm/src/sama5/sam_lowputc.c
index 9caf822362..51130a3ad6 100644
--- a/arch/arm/src/sama5/sam_lowputc.c
+++ b/arch/arm/src/sama5/sam_lowputc.c
@@ -27,6 +27,7 @@
 #include <stdint.h>
 
 #include <nuttx/irq.h>
+#include <nuttx/arch.h>
 
 #include "arm_internal.h"
 #include "sam_pio.h"
@@ -235,18 +236,18 @@ void arm_lowputc(char ch)
        * atomic.
        */
 
-      flags = enter_critical_section();
+      flags = spin_lock_irqsave(NULL);
       if ((getreg32(SAM_CONSOLE_VBASE + SAM_UART_SR_OFFSET) &
         UART_INT_TXEMPTY) != 0)
         {
           /* Send the character */
 
           putreg32((uint32_t)ch, SAM_CONSOLE_VBASE + SAM_UART_THR_OFFSET);
-          leave_critical_section(flags);
+          spin_unlock_irqrestore(NULL, flags);
           return;
         }
 
-      leave_critical_section(flags);
+      spin_unlock_irqrestore(NULL, flags);
     }
 
 #elif defined(SAMA5_HAVE_FLEXCOM_CONSOLE)
diff --git a/arch/arm/src/samd2l2/sam_serial.c 
b/arch/arm/src/samd2l2/sam_serial.c
index 3fd443b191..342548fc6a 100644
--- a/arch/arm/src/samd2l2/sam_serial.c
+++ b/arch/arm/src/samd2l2/sam_serial.c
@@ -1045,7 +1045,7 @@ int up_putc(int ch)
    * interrupts from firing in the serial driver code.
    */
 
-  flags = enter_critical_section();
+  flags = spin_lock_irqsave(NULL);
 
   /* Check for LF */
 
@@ -1057,7 +1057,7 @@ int up_putc(int ch)
     }
 
   sam_lowputc(ch);
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
 #endif
   return ch;
 }
diff --git a/arch/arm/src/samd5e5/sam_serial.c 
b/arch/arm/src/samd5e5/sam_serial.c
index bfd460d92c..c5b3687419 100644
--- a/arch/arm/src/samd5e5/sam_serial.c
+++ b/arch/arm/src/samd5e5/sam_serial.c
@@ -1104,7 +1104,7 @@ int up_putc(int ch)
    * interrupts from firing in the serial driver code.
    */
 
-  flags = enter_critical_section();
+  flags = spin_lock_irqsave(NULL);
 
   /* Check for LF */
 
@@ -1116,7 +1116,7 @@ int up_putc(int ch)
     }
 
   sam_lowputc(ch);
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
 #endif
   return ch;
 }
diff --git a/arch/arm/src/samv7/sam_lowputc.c b/arch/arm/src/samv7/sam_lowputc.c
index 2fbfdf79f2..2aeda3820d 100644
--- a/arch/arm/src/samv7/sam_lowputc.c
+++ b/arch/arm/src/samv7/sam_lowputc.c
@@ -27,6 +27,7 @@
 #include <stdint.h>
 
 #include <nuttx/irq.h>
+#include <nuttx/arch.h>
 #include <arch/board/board.h>
 
 #include "arm_internal.h"
@@ -183,18 +184,18 @@ void arm_lowputc(char ch)
        * atomic.
        */
 
-      flags = enter_critical_section();
+      flags = spin_lock_irqsave(NULL);
       if ((getreg32(SAM_CONSOLE_BASE + SAM_UART_SR_OFFSET) &
         UART_INT_TXEMPTY) != 0)
         {
           /* Send the character */
 
           putreg32((uint32_t)ch, SAM_CONSOLE_BASE + SAM_UART_THR_OFFSET);
-          leave_critical_section(flags);
+          spin_unlock_irqrestore(NULL, flags);
           return;
         }
 
-      leave_critical_section(flags);
+      spin_unlock_irqrestore(NULL, flags);
     }
 #endif
 }
diff --git a/arch/arm/src/stm32/stm32_serial.c 
b/arch/arm/src/stm32/stm32_serial.c
index a198a795d2..ca5010446c 100644
--- a/arch/arm/src/stm32/stm32_serial.c
+++ b/arch/arm/src/stm32/stm32_serial.c
@@ -1339,11 +1339,11 @@ static void up_restoreusartint(struct up_dev_s *priv, 
uint16_t ie)
 {
   irqstate_t flags;
 
-  flags = enter_critical_section();
+  flags = spin_lock_irqsave(NULL);
 
   up_setusartint(priv, ie);
 
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
@@ -1354,7 +1354,7 @@ static void up_disableusartint(struct up_dev_s *priv, 
uint16_t *ie)
 {
   irqstate_t flags;
 
-  flags = enter_critical_section();
+  flags = spin_lock_irqsave(NULL);
 
   if (ie)
     {
@@ -1395,7 +1395,7 @@ static void up_disableusartint(struct up_dev_s *priv, 
uint16_t *ie)
 
   up_setusartint(priv, 0);
 
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
diff --git a/arch/arm/src/stm32f0l0g0/stm32_serial_v1.c 
b/arch/arm/src/stm32f0l0g0/stm32_serial_v1.c
index 4b572fffea..770aacb4dc 100644
--- a/arch/arm/src/stm32f0l0g0/stm32_serial_v1.c
+++ b/arch/arm/src/stm32f0l0g0/stm32_serial_v1.c
@@ -803,7 +803,7 @@ static void stm32serial_disableusartint(struct 
stm32_serial_s *priv,
 {
   irqstate_t flags;
 
-  flags = enter_critical_section();
+  flags = spin_lock_irqsave(NULL);
 
   if (ie)
     {
@@ -847,7 +847,7 @@ static void stm32serial_disableusartint(struct 
stm32_serial_s *priv,
 
   stm32serial_setusartint(priv, 0);
 
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
diff --git a/arch/arm/src/stm32f0l0g0/stm32_serial_v2.c 
b/arch/arm/src/stm32f0l0g0/stm32_serial_v2.c
index 19d88d613e..2c2a701ee8 100644
--- a/arch/arm/src/stm32f0l0g0/stm32_serial_v2.c
+++ b/arch/arm/src/stm32f0l0g0/stm32_serial_v2.c
@@ -531,11 +531,11 @@ static void up_restoreusartint(struct up_dev_s *priv, 
uint16_t ie)
 {
   irqstate_t flags;
 
-  flags = enter_critical_section();
+  flags = spin_lock_irqsave(NULL);
 
   up_setusartint(priv, ie);
 
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
@@ -546,7 +546,7 @@ static void up_disableusartint(struct up_dev_s *priv, 
uint16_t *ie)
 {
   irqstate_t flags;
 
-  flags = enter_critical_section();
+  flags = spin_lock_irqsave(NULL);
 
   if (ie)
     {
@@ -590,7 +590,7 @@ static void up_disableusartint(struct up_dev_s *priv, 
uint16_t *ie)
 
   up_setusartint(priv, 0);
 
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
diff --git a/arch/arm/src/stm32f7/stm32_serial.c 
b/arch/arm/src/stm32f7/stm32_serial.c
index 14b7c3cb14..691823f8b4 100644
--- a/arch/arm/src/stm32f7/stm32_serial.c
+++ b/arch/arm/src/stm32f7/stm32_serial.c
@@ -1405,11 +1405,11 @@ static void up_restoreusartint(struct up_dev_s *priv, 
uint16_t ie)
 {
   irqstate_t flags;
 
-  flags = enter_critical_section();
+  flags = spin_lock_irqsave(NULL);
 
   up_setusartint(priv, ie);
 
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
@@ -1420,7 +1420,7 @@ static void up_disableusartint(struct up_dev_s *priv, 
uint16_t *ie)
 {
   irqstate_t flags;
 
-  flags = enter_critical_section();
+  flags = spin_lock_irqsave(NULL);
 
   if (ie)
     {
@@ -1464,7 +1464,7 @@ static void up_disableusartint(struct up_dev_s *priv, 
uint16_t *ie)
 
   up_setusartint(priv, 0);
 
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
diff --git a/arch/arm/src/stm32h7/stm32_serial.c 
b/arch/arm/src/stm32h7/stm32_serial.c
index cc9f38dca7..ee33b6a5bc 100644
--- a/arch/arm/src/stm32h7/stm32_serial.c
+++ b/arch/arm/src/stm32h7/stm32_serial.c
@@ -1566,11 +1566,11 @@ static void up_restoreusartint(struct up_dev_s *priv, 
uint16_t ie)
 {
   irqstate_t flags;
 
-  flags = enter_critical_section();
+  flags = spin_lock_irqsave(NULL);
 
   up_setusartint(priv, ie);
 
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 #endif
 
@@ -1582,7 +1582,7 @@ static void up_disableusartint(struct up_dev_s *priv, 
uint16_t *ie)
 {
   irqstate_t flags;
 
-  flags = enter_critical_section();
+  flags = spin_lock_irqsave(NULL);
 
   if (ie)
     {
@@ -1626,7 +1626,7 @@ static void up_disableusartint(struct up_dev_s *priv, 
uint16_t *ie)
 
   up_setusartint(priv, 0);
 
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
diff --git a/arch/arm/src/stm32l4/stm32l4_serial.c 
b/arch/arm/src/stm32l4/stm32l4_serial.c
index c6b4c90345..648fc995ba 100644
--- a/arch/arm/src/stm32l4/stm32l4_serial.c
+++ b/arch/arm/src/stm32l4/stm32l4_serial.c
@@ -901,11 +901,11 @@ static void stm32l4serial_restoreusartint(struct 
stm32l4_serial_s *priv,
 {
   irqstate_t flags;
 
-  flags = enter_critical_section();
+  flags = spin_lock_irqsave(NULL);
 
   stm32l4serial_setusartint(priv, ie);
 
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
@@ -917,7 +917,7 @@ static void stm32l4serial_disableusartint(struct 
stm32l4_serial_s *priv,
 {
   irqstate_t flags;
 
-  flags = enter_critical_section();
+  flags = spin_lock_irqsave(NULL);
 
   if (ie)
     {
@@ -965,7 +965,7 @@ static void stm32l4serial_disableusartint(struct 
stm32l4_serial_s *priv,
 
   stm32l4serial_setusartint(priv, 0);
 
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
diff --git a/arch/arm/src/stm32l5/stm32l5_serial.c 
b/arch/arm/src/stm32l5/stm32l5_serial.c
index ee3e466183..b483d1835f 100644
--- a/arch/arm/src/stm32l5/stm32l5_serial.c
+++ b/arch/arm/src/stm32l5/stm32l5_serial.c
@@ -906,11 +906,11 @@ static void stm32l5serial_restoreusartint(struct 
stm32l5_serial_s *priv,
 {
   irqstate_t flags;
 
-  flags = enter_critical_section();
+  flags = spin_lock_irqsave(NULL);
 
   stm32l5serial_setusartint(priv, ie);
 
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
@@ -922,7 +922,7 @@ static void stm32l5serial_disableusartint(struct 
stm32l5_serial_s *priv,
 {
   irqstate_t flags;
 
-  flags = enter_critical_section();
+  flags = spin_lock_irqsave(NULL);
 
   if (ie)
     {
@@ -965,7 +965,7 @@ static void stm32l5serial_disableusartint(struct 
stm32l5_serial_s *priv,
 
   stm32l5serial_setusartint(priv, 0);
 
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
diff --git a/arch/arm/src/stm32u5/stm32_serial.c 
b/arch/arm/src/stm32u5/stm32_serial.c
index 5ce2fecfd7..97f90300e2 100644
--- a/arch/arm/src/stm32u5/stm32_serial.c
+++ b/arch/arm/src/stm32u5/stm32_serial.c
@@ -922,7 +922,7 @@ static void stm32serial_disableusartint(struct 
stm32_serial_s *priv,
 {
   irqstate_t flags;
 
-  flags = enter_critical_section();
+  flags = spin_lock_irqsave(NULL);
 
   if (ie)
     {
@@ -965,7 +965,7 @@ static void stm32serial_disableusartint(struct 
stm32_serial_s *priv,
 
   stm32serial_setusartint(priv, 0);
 
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
diff --git a/arch/arm/src/stm32wb/stm32wb_serial.c 
b/arch/arm/src/stm32wb/stm32wb_serial.c
index 889061620c..b83a23ff69 100644
--- a/arch/arm/src/stm32wb/stm32wb_serial.c
+++ b/arch/arm/src/stm32wb/stm32wb_serial.c
@@ -556,11 +556,11 @@ static void stm32wb_serial_restoreusartint(struct 
stm32wb_serial_s *priv,
 {
   irqstate_t flags;
 
-  flags = enter_critical_section();
+  flags = spin_lock_irqsave(NULL);
 
   stm32wb_serial_setusartint(priv, ie);
 
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
@@ -572,7 +572,7 @@ static void stm32wb_serial_disableusartint(struct 
stm32wb_serial_s *priv,
 {
   irqstate_t flags;
 
-  flags = enter_critical_section();
+  flags = spin_lock_irqsave(NULL);
 
   if (ie)
     {
@@ -620,7 +620,7 @@ static void stm32wb_serial_disableusartint(struct 
stm32wb_serial_s *priv,
 
   stm32wb_serial_setusartint(priv, 0);
 
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
diff --git a/arch/arm/src/stm32wl5/stm32wl5_serial.c 
b/arch/arm/src/stm32wl5/stm32wl5_serial.c
index 660ca12424..037bbbcfa5 100644
--- a/arch/arm/src/stm32wl5/stm32wl5_serial.c
+++ b/arch/arm/src/stm32wl5/stm32wl5_serial.c
@@ -661,11 +661,11 @@ static void stm32wl5serial_restoreusartint(struct 
stm32wl5_serial_s *priv,
 {
   irqstate_t flags;
 
-  flags = enter_critical_section();
+  flags = spin_lock_irqsave(NULL);
 
   stm32wl5serial_setusartint(priv, ie);
 
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
@@ -677,7 +677,7 @@ static void stm32wl5serial_disableusartint(struct 
stm32wl5_serial_s *priv,
 {
   irqstate_t flags;
 
-  flags = enter_critical_section();
+  flags = spin_lock_irqsave(NULL);
 
   if (ie)
     {
@@ -720,7 +720,7 @@ static void stm32wl5serial_disableusartint(struct 
stm32wl5_serial_s *priv,
 
   stm32wl5serial_setusartint(priv, 0);
 
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
diff --git a/arch/arm/src/tms570/tms570_lowputc.c 
b/arch/arm/src/tms570/tms570_lowputc.c
index 599c2f7475..9f7232460b 100644
--- a/arch/arm/src/tms570/tms570_lowputc.c
+++ b/arch/arm/src/tms570/tms570_lowputc.c
@@ -50,6 +50,7 @@
 #include <errno.h>
 
 #include <nuttx/irq.h>
+#include <nuttx/arch.h>
 #include <arch/board/board.h>
 
 #include "arm_internal.h"
@@ -200,18 +201,18 @@ void arm_lowputc(char ch)
        * atomic.
        */
 
-      flags = enter_critical_section();
+      flags = spin_lock_irqsave(NULL);
       if ((getreg32(TMS570_CONSOLE_BASE + TMS570_SCI_FLR_OFFSET) &
         SCI_FLR_TXRDY) != 0)
         {
           /* Send the character */
 
           putreg32((uint32_t)ch, TMS570_CONSOLE_BASE + TMS570_SCI_TD_OFFSET);
-          leave_critical_section(flags);
+          spin_unlock_irqrestore(NULL, flags);
           return;
         }
 
-      leave_critical_section(flags);
+      spin_unlock_irqrestore(NULL, flags);
     }
 #endif
 }
diff --git a/arch/arm/src/xmc4/xmc4_serial.c b/arch/arm/src/xmc4/xmc4_serial.c
index d8a840bcfd..d5bef7c3ab 100644
--- a/arch/arm/src/xmc4/xmc4_serial.c
+++ b/arch/arm/src/xmc4/xmc4_serial.c
@@ -551,14 +551,14 @@ static inline void xmc4_modifyreg(struct xmc4_dev_s 
*priv, unsigned
   uintptr_t regaddr = priv->uartbase + offset;
   uint32_t regval;
 
-  flags = enter_critical_section();
+  flags = spin_lock_irqsave(NULL);
 
   regval = getreg32(regaddr);
   regval &= ~clrbits;
   regval |= setbits;
   putreg32(regval, regaddr);
 
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
@@ -573,9 +573,9 @@ static void xmc4_setuartint(struct xmc4_dev_s *priv)
    * bits in priv->ccr.
    */
 
-  flags = enter_critical_section();
+  flags = spin_lock_irqsave(NULL);
   xmc4_modifyreg(priv, XMC4_USIC_CCR_OFFSET, CCR_ALL_EVENTS, priv->ccr);
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
@@ -590,10 +590,10 @@ static void xmc4_restoreuartint(struct xmc4_dev_s *priv, 
uint32_t ccr)
    * in the ccr argument.
    */
 
-  flags = enter_critical_section();
+  flags = spin_lock_irqsave(NULL);
   priv->ccr = ccr;
   xmc4_setuartint(priv);
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
@@ -604,14 +604,14 @@ static void xmc4_disableuartint(struct xmc4_dev_s *priv, 
uint32_t *ccr)
 {
   irqstate_t flags;
 
-  flags = enter_critical_section();
+  flags = spin_lock_irqsave(NULL);
   if (ccr)
     {
       *ccr = priv->ccr;
     }
 
   xmc4_restoreuartint(priv, 0);
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
diff --git a/arch/arm64/src/a64/a64_serial.c b/arch/arm64/src/a64/a64_serial.c
index 03ee3b104f..90ab577c19 100644
--- a/arch/arm64/src/a64/a64_serial.c
+++ b/arch/arm64/src/a64/a64_serial.c
@@ -965,7 +965,7 @@ static int a64_uart_init(uint32_t gating, uint32_t rst, 
pio_pinset_t tx,
   irqstate_t flags;
   int ret = OK;
 
-  flags = enter_critical_section();
+  flags = spin_lock_irqsave(NULL);
 
   /* Enable clocking to UART */
 
@@ -991,7 +991,7 @@ static int a64_uart_init(uint32_t gating, uint32_t rst, 
pio_pinset_t tx,
         }
     }
 
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
   return ret;
 };
 
diff --git a/arch/mips/src/pic32mx/pic32mx_serial.c 
b/arch/mips/src/pic32mx/pic32mx_serial.c
index 24d81d5336..1726f628d5 100644
--- a/arch/mips/src/pic32mx/pic32mx_serial.c
+++ b/arch/mips/src/pic32mx/pic32mx_serial.c
@@ -305,10 +305,10 @@ static void up_restoreuartint(struct uart_dev_s *dev, 
uint8_t im)
    * of bits in im.
    */
 
-  flags = enter_critical_section();
+  flags = spin_lock_irqsave(NULL);
   up_rxint(dev, RX_ENABLED(im));
   up_txint(dev, TX_ENABLED(im));
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
@@ -320,14 +320,14 @@ static void up_disableuartint(struct uart_dev_s *dev, 
uint8_t *im)
   struct up_dev_s *priv = (struct up_dev_s *)dev->priv;
   irqstate_t flags;
 
-  flags = enter_critical_section();
+  flags = spin_lock_irqsave(NULL);
   if (im)
     {
       *im = priv->im;
     }
 
   up_restoreuartint(dev, 0);
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
diff --git a/arch/mips/src/pic32mz/pic32mz_serial.c 
b/arch/mips/src/pic32mz/pic32mz_serial.c
index d1db65104e..8f5353010e 100644
--- a/arch/mips/src/pic32mz/pic32mz_serial.c
+++ b/arch/mips/src/pic32mz/pic32mz_serial.c
@@ -622,10 +622,10 @@ static void up_restoreuartint(struct uart_dev_s *dev, 
uint8_t im)
    * in im
    */
 
-  flags = enter_critical_section();
+  flags = spin_lock_irqsave(NULL);
   up_rxint(dev, RX_ENABLED(im));
   up_txint(dev, TX_ENABLED(im));
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
@@ -637,14 +637,14 @@ static void up_disableuartint(struct uart_dev_s *dev, 
uint8_t *im)
   struct up_dev_s *priv = (struct up_dev_s *)dev->priv;
   irqstate_t flags;
 
-  flags = enter_critical_section();
+  flags = spin_lock_irqsave(NULL);
   if (im)
     {
       *im = priv->im;
     }
 
   up_restoreuartint(dev, 0);
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
diff --git a/arch/or1k/src/mor1kx/mor1kx_serial.c 
b/arch/or1k/src/mor1kx/mor1kx_serial.c
index e57a54ce68..0bebdcdec3 100644
--- a/arch/or1k/src/mor1kx/mor1kx_serial.c
+++ b/arch/or1k/src/mor1kx/mor1kx_serial.c
@@ -115,7 +115,7 @@ int up_putc(int ch)
    * interrupts from firing in the serial driver code.
    */
 
-  flags = enter_critical_section();
+  flags = spin_lock_irqsave(NULL);
 
   /* Check for LF */
 
@@ -128,7 +128,7 @@ int up_putc(int ch)
 
   /* or1k_lowputc(ch); */
 
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
 #endif
   return ch;
 }
diff --git a/arch/risc-v/src/bl602/bl602_serial.c 
b/arch/risc-v/src/bl602/bl602_serial.c
index 21db1149ea..f9b5d03334 100644
--- a/arch/risc-v/src/bl602/bl602_serial.c
+++ b/arch/risc-v/src/bl602/bl602_serial.c
@@ -888,7 +888,7 @@ void riscv_serialinit(void)
 int up_putc(int ch)
 {
 #ifdef HAVE_SERIAL_CONSOLE
-  irqstate_t flags = enter_critical_section();
+  irqstate_t flags = spin_lock_irqsave(NULL);
 
   /* Check for LF */
 
@@ -900,7 +900,7 @@ int up_putc(int ch)
     }
 
   riscv_lowputc(ch);
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
 #endif
   return ch;
 }
diff --git a/arch/risc-v/src/c906/c906_serial.c 
b/arch/risc-v/src/c906/c906_serial.c
index e7e43837fb..fb1341d115 100644
--- a/arch/risc-v/src/c906/c906_serial.c
+++ b/arch/risc-v/src/c906/c906_serial.c
@@ -214,12 +214,12 @@ static void up_serialout(struct up_dev_s *priv, int 
offset, uint32_t value)
 
 static void up_restoreuartint(struct up_dev_s *priv, uint8_t im)
 {
-  irqstate_t flags = enter_critical_section();
+  irqstate_t flags = spin_lock_irqsave(NULL);
 
   priv->im = im;
   up_serialout(priv, UART_IE_OFFSET, im);
 
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
@@ -228,7 +228,7 @@ static void up_restoreuartint(struct up_dev_s *priv, 
uint8_t im)
 
 static void up_disableuartint(struct up_dev_s *priv, uint8_t *im)
 {
-  irqstate_t flags = enter_critical_section();
+  irqstate_t flags = spin_lock_irqsave(NULL);
 
   /* Return the current interrupt mask value */
 
@@ -241,7 +241,7 @@ static void up_disableuartint(struct up_dev_s *priv, 
uint8_t *im)
 
   priv->im = 0;
   up_serialout(priv, UART_IE_OFFSET, 0);
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
diff --git a/arch/risc-v/src/common/espressif/esp_lowputc.c 
b/arch/risc-v/src/common/espressif/esp_lowputc.c
index c2d07743ac..e630a70b83 100644
--- a/arch/risc-v/src/common/espressif/esp_lowputc.c
+++ b/arch/risc-v/src/common/espressif/esp_lowputc.c
@@ -207,7 +207,7 @@ void esp_lowputc_disable_all_uart_int(const struct 
esp_uart_s *priv,
 {
   irqstate_t flags;
 
-  flags = enter_critical_section();
+  flags = spin_lock_irqsave(NULL);
 
   if (current_status != NULL)
     {
@@ -224,7 +224,7 @@ void esp_lowputc_disable_all_uart_int(const struct 
esp_uart_s *priv,
 
   uart_hal_clr_intsts_mask(priv->hal, UINT32_MAX);
 
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
diff --git a/arch/risc-v/src/esp32c3-legacy/esp32c3_lowputc.c 
b/arch/risc-v/src/esp32c3-legacy/esp32c3_lowputc.c
index 2afa7e3f4c..d5a36999b5 100644
--- a/arch/risc-v/src/esp32c3-legacy/esp32c3_lowputc.c
+++ b/arch/risc-v/src/esp32c3-legacy/esp32c3_lowputc.c
@@ -710,7 +710,7 @@ void esp32c3_lowputc_disable_all_uart_int(const struct 
esp32c3_uart_s *priv,
 {
   irqstate_t flags;
 
-  flags = enter_critical_section();
+  flags = spin_lock_irqsave(NULL);
 
   if (current_status != NULL)
     {
@@ -727,7 +727,7 @@ void esp32c3_lowputc_disable_all_uart_int(const struct 
esp32c3_uart_s *priv,
 
   putreg32(0xffffffff, UART_INT_CLR_REG(priv->id));
 
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
diff --git a/arch/risc-v/src/fe310/fe310_serial.c 
b/arch/risc-v/src/fe310/fe310_serial.c
index 5e04afabef..9250ce3098 100644
--- a/arch/risc-v/src/fe310/fe310_serial.c
+++ b/arch/risc-v/src/fe310/fe310_serial.c
@@ -214,12 +214,12 @@ static void up_serialout(struct up_dev_s *priv, int 
offset, uint32_t value)
 
 static void up_restoreuartint(struct up_dev_s *priv, uint8_t im)
 {
-  irqstate_t flags = enter_critical_section();
+  irqstate_t flags = spin_lock_irqsave(NULL);
 
   priv->im = im;
   up_serialout(priv, UART_IE_OFFSET, im);
 
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
@@ -228,7 +228,7 @@ static void up_restoreuartint(struct up_dev_s *priv, 
uint8_t im)
 
 static void up_disableuartint(struct up_dev_s *priv, uint8_t *im)
 {
-  irqstate_t flags = enter_critical_section();
+  irqstate_t flags = spin_lock_irqsave(NULL);
 
   /* Return the current interrupt mask value */
 
@@ -241,7 +241,7 @@ static void up_disableuartint(struct up_dev_s *priv, 
uint8_t *im)
 
   priv->im = 0;
   up_serialout(priv, UART_IE_OFFSET, 0);
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
diff --git a/arch/risc-v/src/hpm6750/hpm6750_serial.c 
b/arch/risc-v/src/hpm6750/hpm6750_serial.c
index 5ea38e7754..c18dafd44c 100644
--- a/arch/risc-v/src/hpm6750/hpm6750_serial.c
+++ b/arch/risc-v/src/hpm6750/hpm6750_serial.c
@@ -233,12 +233,12 @@ static void up_serialmodfiy(struct up_dev_s *priv, int 
offset,
 
 static void up_restoreuartint(struct up_dev_s *priv, uint8_t im)
 {
-  irqstate_t flags = enter_critical_section();
+  irqstate_t flags = spin_lock_irqsave(NULL);
 
   priv->im = im;
   up_serialout(priv, UART_IER_OFFSET, im);
 
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
@@ -247,7 +247,7 @@ static void up_restoreuartint(struct up_dev_s *priv, 
uint8_t im)
 
 static void up_disableuartint(struct up_dev_s *priv, uint8_t *im)
 {
-  irqstate_t flags = enter_critical_section();
+  irqstate_t flags = spin_lock_irqsave(NULL);
 
   /* Return the current interrupt mask value */
 
@@ -260,7 +260,7 @@ static void up_disableuartint(struct up_dev_s *priv, 
uint8_t *im)
 
   priv->im = 0;
   up_serialout(priv, UART_IER_OFFSET, 0);
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
diff --git a/arch/risc-v/src/k210/k210_serial.c 
b/arch/risc-v/src/k210/k210_serial.c
index 16cd880d9a..4179c7fe7a 100644
--- a/arch/risc-v/src/k210/k210_serial.c
+++ b/arch/risc-v/src/k210/k210_serial.c
@@ -214,12 +214,12 @@ static void up_serialout(struct up_dev_s *priv, int 
offset, uint32_t value)
 
 static void up_restoreuartint(struct up_dev_s *priv, uint8_t im)
 {
-  irqstate_t flags = enter_critical_section();
+  irqstate_t flags = spin_lock_irqsave(NULL);
 
   priv->im = im;
   up_serialout(priv, UART_IE_OFFSET, im);
 
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
@@ -228,7 +228,7 @@ static void up_restoreuartint(struct up_dev_s *priv, 
uint8_t im)
 
 static void up_disableuartint(struct up_dev_s *priv, uint8_t *im)
 {
-  irqstate_t flags = enter_critical_section();
+  irqstate_t flags = spin_lock_irqsave(NULL);
 
   /* Return the current interrupt mask value */
 
@@ -241,7 +241,7 @@ static void up_disableuartint(struct up_dev_s *priv, 
uint8_t *im)
 
   priv->im = 0;
   up_serialout(priv, UART_IE_OFFSET, 0);
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
diff --git a/arch/risc-v/src/litex/litex_serial.c 
b/arch/risc-v/src/litex/litex_serial.c
index 21fc262a26..919ed9faa9 100644
--- a/arch/risc-v/src/litex/litex_serial.c
+++ b/arch/risc-v/src/litex/litex_serial.c
@@ -237,7 +237,7 @@ static void up_serialout(struct up_dev_s *priv, int offset, 
uint32_t value)
 
 static void up_restoreuartint(struct up_dev_s *priv, uint8_t im)
 {
-  irqstate_t flags = enter_critical_section();
+  irqstate_t flags = spin_lock_irqsave(NULL);
 
   priv->im = im;
 
@@ -245,7 +245,7 @@ static void up_restoreuartint(struct up_dev_s *priv, 
uint8_t im)
                     LITEX_CONSOLE_BASE + UART_EV_PENDING_OFFSET);
   up_serialout(priv, UART_EV_ENABLE_OFFSET, im);
 
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
@@ -254,7 +254,7 @@ static void up_restoreuartint(struct up_dev_s *priv, 
uint8_t im)
 
 static void up_disableuartint(struct up_dev_s *priv, uint8_t *im)
 {
-  irqstate_t flags = enter_critical_section();
+  irqstate_t flags = spin_lock_irqsave(NULL);
 
   /* Return the current interrupt mask value */
 
@@ -271,7 +271,7 @@ static void up_disableuartint(struct up_dev_s *priv, 
uint8_t *im)
                     LITEX_CONSOLE_BASE + UART_EV_PENDING_OFFSET);
   up_serialout(priv, UART_EV_ENABLE_OFFSET, 0);
 
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
diff --git a/arch/risc-v/src/rv32m1/rv32m1_serial.c 
b/arch/risc-v/src/rv32m1/rv32m1_serial.c
index cbc2a1be36..093f3eccc7 100644
--- a/arch/risc-v/src/rv32m1/rv32m1_serial.c
+++ b/arch/risc-v/src/rv32m1/rv32m1_serial.c
@@ -343,11 +343,11 @@ static void up_putreg(struct up_dev_s *priv, int offset, 
uint32_t value)
 
 static void up_restoreuartint(struct up_dev_s *priv, uint32_t im)
 {
-  irqstate_t flags = enter_critical_section();
+  irqstate_t flags = spin_lock_irqsave(NULL);
 
   up_putreg(priv, RV32M1_LPUART_CTRL_OFFSET, im);
 
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
@@ -356,7 +356,7 @@ static void up_restoreuartint(struct up_dev_s *priv, 
uint32_t im)
 
 static void up_disableuartint(struct up_dev_s *priv, uint32_t *im)
 {
-  irqstate_t flags = enter_critical_section();
+  irqstate_t flags = spin_lock_irqsave(NULL);
   uint32_t regval = up_getreg(priv, RV32M1_LPUART_CTRL_OFFSET);
 
   /* Return the current interrupt mask value */
@@ -371,7 +371,7 @@ static void up_disableuartint(struct up_dev_s *priv, 
uint32_t *im)
   regval &= ~(LPUART_CTRL_TCIE | LPUART_CTRL_TIE | LPUART_CTRL_RIE);
   up_putreg(priv, RV32M1_LPUART_CTRL_OFFSET, regval);
 
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
diff --git a/arch/sparc/src/bm3803/bm3803-serial.c 
b/arch/sparc/src/bm3803/bm3803-serial.c
index 3d41b64465..b6911025f5 100644
--- a/arch/sparc/src/bm3803/bm3803-serial.c
+++ b/arch/sparc/src/bm3803/bm3803-serial.c
@@ -359,10 +359,10 @@ static void up_restoreuartint(struct uart_dev_s *dev, 
uint8_t im)
    * in im
    */
 
-  flags = enter_critical_section();
+  flags = spin_lock_irqsave(NULL);
   up_rxint(dev, RX_ENABLED(im));
   up_txint(dev, TX_ENABLED(im));
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
@@ -374,14 +374,14 @@ static void up_disableuartint(struct uart_dev_s *dev, 
uint8_t *im)
   struct up_dev_s *priv = (struct up_dev_s *)dev->priv;
   irqstate_t flags;
 
-  flags = enter_critical_section();
+  flags = spin_lock_irqsave(NULL);
   if (im)
     {
       *im = priv->im;
     }
 
   up_restoreuartint(dev, 0);
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
diff --git a/arch/sparc/src/bm3823/bm3823-serial.c 
b/arch/sparc/src/bm3823/bm3823-serial.c
index 6d5aa07c0e..12ccba4b04 100644
--- a/arch/sparc/src/bm3823/bm3823-serial.c
+++ b/arch/sparc/src/bm3823/bm3823-serial.c
@@ -361,10 +361,10 @@ static void up_restoreuartint(struct uart_dev_s *dev, 
uint8_t im)
    * im
    */
 
-  flags = enter_critical_section();
+  flags = spin_lock_irqsave(NULL);
   up_rxint(dev, RX_ENABLED(im));
   up_txint(dev, TX_ENABLED(im));
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
@@ -376,14 +376,14 @@ static void up_disableuartint(struct uart_dev_s *dev, 
uint8_t *im)
   struct up_dev_s *priv = (struct up_dev_s *)dev->priv;
   irqstate_t flags;
 
-  flags = enter_critical_section();
+  flags = spin_lock_irqsave(NULL);
   if (im)
     {
       *im = priv->im;
     }
 
   up_restoreuartint(dev, 0);
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
diff --git a/arch/xtensa/src/esp32s2/esp32s2_lowputc.c 
b/arch/xtensa/src/esp32s2/esp32s2_lowputc.c
index a5bb7b01c6..423b5907eb 100644
--- a/arch/xtensa/src/esp32s2/esp32s2_lowputc.c
+++ b/arch/xtensa/src/esp32s2/esp32s2_lowputc.c
@@ -653,7 +653,7 @@ void esp32s2_lowputc_disable_all_uart_int(const struct 
esp32s2_uart_s *priv,
 {
   irqstate_t flags;
 
-  flags = enter_critical_section();
+  flags = spin_lock_irqsave(NULL);
 
   if (current_status != NULL)
     {
@@ -670,7 +670,7 @@ void esp32s2_lowputc_disable_all_uart_int(const struct 
esp32s2_uart_s *priv,
 
   putreg32(UINT32_MAX, UART_INT_CLR_REG(priv->id));
 
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
diff --git a/arch/z16/src/z16f/z16f_serial.c b/arch/z16/src/z16f/z16f_serial.c
index a177e98401..82d3933066 100644
--- a/arch/z16/src/z16f/z16f_serial.c
+++ b/arch/z16/src/z16f/z16f_serial.c
@@ -213,7 +213,7 @@ static uart_dev_t g_uart1port;
 static uint8_t z16f_disableuartirq(struct uart_dev_s *dev)
 {
   struct z16f_uart_s *priv  = (struct z16f_uart_s *)dev->priv;
-  irqstate_t          flags = enter_critical_section();
+  irqstate_t          flags = spin_lock_irqsave(NULL);
   uint8_t             state = priv->rxenabled ? STATE_RXENABLED :
                                                 STATE_DISABLED |
                               priv->txenabled ? STATE_TXENABLED :
@@ -222,7 +222,7 @@ static uint8_t z16f_disableuartirq(struct uart_dev_s *dev)
   z16f_txint(dev, false);
   z16f_rxint(dev, false);
 
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
   return state;
 }
 
@@ -232,12 +232,12 @@ static uint8_t z16f_disableuartirq(struct uart_dev_s *dev)
 
 static void z16f_restoreuartirq(struct uart_dev_s *dev, uint8_t state)
 {
-  irqstate_t flags = enter_critical_section();
+  irqstate_t flags = spin_lock_irqsave(NULL);
 
   z16f_txint(dev, (state & STATE_TXENABLED) ? true : false);
   z16f_rxint(dev, (state & STATE_RXENABLED) ? true : false);
 
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
diff --git a/arch/z80/src/z8/z8_serial.c b/arch/z80/src/z8/z8_serial.c
index 31c2e7a91b..e997a254cd 100644
--- a/arch/z80/src/z8/z8_serial.c
+++ b/arch/z80/src/z8/z8_serial.c
@@ -253,7 +253,7 @@ static inline uint8_t z8_getuart(FAR struct z8_uart_s 
*priv, uint8_t offset)
 static uint8_t z8_disableuartirq(FAR struct uart_dev_s *dev)
 {
   struct z8_uart_s *priv    = (struct z8_uart_s *)dev->priv;
-  irqstate_t          flags = enter_critical_section();
+  irqstate_t          flags = spin_lock_irqsave(NULL);
   uint8_t             state = priv->rxenabled ?
                               STATE_RXENABLED : STATE_DISABLED | \
                               priv->txenabled ?
@@ -262,7 +262,7 @@ static uint8_t z8_disableuartirq(FAR struct uart_dev_s *dev)
   z8_txint(dev, false);
   z8_rxint(dev, false);
 
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
   return state;
 }
 
@@ -272,12 +272,12 @@ static uint8_t z8_disableuartirq(FAR struct uart_dev_s 
*dev)
 
 static void z8_restoreuartirq(FAR struct uart_dev_s *dev, uint8_t state)
 {
-  irqstate_t flags = enter_critical_section();
+  irqstate_t flags = spin_lock_irqsave(NULL);
 
   z8_txint(dev, (state & STATE_TXENABLED) ? true : false);
   z8_rxint(dev, (state & STATE_RXENABLED) ? true : false);
 
-  leave_critical_section(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
diff --git a/drivers/serial/uart_16550.c b/drivers/serial/uart_16550.c
index 8d5d3ccc85..747383a6f5 100644
--- a/drivers/serial/uart_16550.c
+++ b/drivers/serial/uart_16550.c
@@ -1694,8 +1694,12 @@ static bool u16550_txempty(struct uart_dev_s *dev)
 #ifdef HAVE_16550_CONSOLE
 static void u16550_putc(FAR struct u16550_s *priv, int ch)
 {
+  irqstate_t flags;
+
+  flags = spin_lock_irqsave(NULL);
   while ((u16550_serialin(priv, UART_LSR_OFFSET) & UART_LSR_THRE) == 0);
   u16550_serialout(priv, UART_THR_OFFSET, (uart_datawidth_t)ch);
+  spin_unlock_irqrestore(NULL, flags);
 }
 #endif
 
@@ -1768,13 +1772,6 @@ void u16550_serialinit(void)
 int up_putc(int ch)
 {
   FAR struct u16550_s *priv = (FAR struct u16550_s *)CONSOLE_DEV.priv;
-  irqstate_t flags;
-
-  /* All interrupts must be disabled to prevent re-entrancy and to prevent
-   * interrupts from firing in the serial driver code.
-   */
-
-  flags = enter_critical_section();
 
   /* Check for LF */
 
@@ -1786,7 +1783,6 @@ int up_putc(int ch)
     }
 
   u16550_putc(priv, ch);
-  leave_critical_section(flags);
 
   return ch;
 }

Reply via email to