You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by xi...@apache.org on 2021/02/08 05:29:07 UTC

[incubator-nuttx] branch master updated: arch, boards, drivers, include, sched, wireless: Change spinlock APIs.

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/incubator-nuttx.git


The following commit(s) were added to refs/heads/master by this push:
     new d87f350  arch, boards, drivers, include, sched, wireless: Change spinlock APIs.
d87f350 is described below

commit d87f350831fa0e0a6f062caa11391cb5776f32cf
Author: Masayuki Ishikawa <ma...@gmail.com>
AuthorDate: Mon Feb 8 09:21:26 2021 +0900

    arch, boards, drivers, include, sched, wireless: Change spinlock APIs.
    
    Summary:
    - This commit changes spinlock APIs (spin_lock_irqsave/spin_unlock_irqrestore)
    - In the previous implementation, the global spinlock (i.e. g_irq_spin) was used.
    - This commit allows to use caller specific spinlock but also supports to use
      g_irq_spin for backword compatibility (In this case, NULL must be specified)
    
    Impact:
    - None
    
    Testing:
    - Tested with the following configurations
    - spresnse:wifi, spresense:wifi_smp
    - esp32-devkitc:smp (QEMU), sabre6-quad:smp (QEMU)
    - maxi-bit:smp (QEMU), sim:smp
    - stm32f4discovery:wifi
    
    Signed-off-by: Masayuki Ishikawa <Ma...@jp.sony.com>
---
 arch/arm/src/common/arm_modifyreg16.c              |  4 +-
 arch/arm/src/common/arm_modifyreg32.c              |  4 +-
 arch/arm/src/common/arm_modifyreg8.c               |  4 +-
 arch/arm/src/cxd56xx/cxd56_gpioint.c               | 18 +++---
 arch/arm/src/cxd56xx/cxd56_irq.c                   |  8 +--
 arch/arm/src/cxd56xx/cxd56_rtc.c                   | 20 +++----
 arch/arm/src/cxd56xx/cxd56_serial.c                | 32 +++++-----
 arch/arm/src/cxd56xx/cxd56_uart.c                  |  6 +-
 arch/arm/src/imx6/imx_enet.c                       |  4 +-
 arch/arm/src/imxrt/imxrt_edma.c                    | 16 ++---
 arch/arm/src/imxrt/imxrt_enet.c                    |  4 +-
 arch/arm/src/imxrt/imxrt_hprtc.c                   |  4 +-
 arch/arm/src/imxrt/imxrt_serial.c                  | 28 ++++-----
 arch/arm/src/imxrt/imxrt_wdog.c                    |  8 +--
 arch/arm/src/lc823450/lc823450_dma.c               | 20 +++----
 arch/arm/src/lc823450/lc823450_dvfs2.c             | 16 ++---
 arch/arm/src/lc823450/lc823450_gpio.c              | 12 ++--
 arch/arm/src/lc823450/lc823450_irq.c               |  8 +--
 arch/arm/src/lc823450/lc823450_syscontrol.c        |  8 +--
 arch/arm/src/lc823450/lc823450_timer.c             | 22 +++----
 arch/arm/src/lc823450/lc823450_usbdev.c            | 54 ++++++++---------
 arch/arm/src/max326xx/max32660/max32660_dma.c      |  6 +-
 arch/arm/src/max326xx/max32660/max32660_gpio.c     |  8 +--
 arch/arm/src/max326xx/max32660/max32660_lowputc.c  |  6 +-
 arch/arm/src/max326xx/max32660/max32660_rtc.c      | 12 ++--
 arch/arm/src/max326xx/max32660/max32660_serial.c   | 12 ++--
 arch/arm/src/max326xx/max32660/max32660_wdt.c      | 20 +++----
 arch/arm/src/nrf52/nrf52_gpio.c                    |  4 +-
 arch/arm/src/s32k1xx/s32k1xx_edma.c                | 16 ++---
 arch/arm/src/s32k1xx/s32k1xx_enet.c                |  4 +-
 arch/arm/src/s32k1xx/s32k1xx_serial.c              | 20 +++----
 arch/arm/src/stm32/stm32_hciuart.c                 | 20 +++----
 arch/arm/src/tiva/cc13xx/cc13xx_enablepwr.c        |  8 +--
 arch/arm/src/tiva/cc13xx/cc13xx_gpio.c             |  4 +-
 arch/arm/src/tiva/common/tiva_hciuart.c            | 16 ++---
 arch/or1k/src/common/up_modifyreg16.c              |  4 +-
 arch/or1k/src/common/up_modifyreg32.c              |  4 +-
 arch/or1k/src/common/up_modifyreg8.c               |  4 +-
 arch/risc-v/src/bl602/bl602_timerisr.c             |  4 +-
 arch/risc-v/src/common/riscv_modifyreg32.c         |  4 +-
 arch/risc-v/src/fe310/fe310_gpio.c                 |  4 +-
 arch/risc-v/src/fe310/fe310_timerisr.c             |  4 +-
 arch/risc-v/src/k210/k210_timerisr.c               |  4 +-
 arch/risc-v/src/litex/litex_timerisr.c             |  4 +-
 arch/xtensa/src/esp32/esp32_himem.c                | 26 ++++----
 arch/xtensa/src/esp32/esp32_idle.c                 |  4 +-
 arch/xtensa/src/esp32/esp32_spiram.c               |  4 +-
 .../arm/imxrt/imxrt1020-evk/src/imxrt_ethernet.c   |  4 +-
 .../arm/imxrt/imxrt1050-evk/src/imxrt_ethernet.c   |  4 +-
 .../arm/imxrt/imxrt1060-evk/src/imxrt_ethernet.c   |  4 +-
 boards/arm/imxrt/teensy-4.x/src/imxrt_ethernet.c   |  4 +-
 .../max326xx/max32660-evsys/src/max326_button.c    |  4 +-
 .../arm/stm32/stm32f4discovery/src/stm32_gs2200m.c | 12 ++--
 drivers/audio/cxd56.c                              | 48 +++++++--------
 drivers/audio/cxd56_src.c                          | 20 +++----
 drivers/audio/wm8776.c                             | 16 ++---
 drivers/i2c/i2c_bitbang.c                          |  4 +-
 drivers/ioexpander/gpio.c                          |  8 +--
 drivers/wireless/bluetooth/bt_uart_shim.c          |  8 +--
 include/nuttx/irq.h                                | 42 +++++++++----
 sched/clock/clock_gettime.c                        |  4 +-
 sched/group/group_exitinfo.c                       |  6 +-
 sched/group/group_tlsalloc.c                       |  4 +-
 sched/group/group_tlsfree.c                        |  4 +-
 sched/irq/irq_spinlock.c                           | 70 +++++++++++++++-------
 sched/signal/sig_default.c                         |  8 +--
 wireless/bluetooth/bt_atomic.c                     | 24 ++++----
 wireless/bluetooth/bt_buf.c                        | 20 +++----
 wireless/bluetooth/bt_hcicore.c                    |  8 +--
 wireless/bluetooth/bt_netdev.c                     |  4 +-
 70 files changed, 451 insertions(+), 405 deletions(-)

diff --git a/arch/arm/src/common/arm_modifyreg16.c b/arch/arm/src/common/arm_modifyreg16.c
index b2ebe95..dba60ee 100644
--- a/arch/arm/src/common/arm_modifyreg16.c
+++ b/arch/arm/src/common/arm_modifyreg16.c
@@ -64,10 +64,10 @@ void modifyreg16(unsigned int addr, uint16_t clearbits, uint16_t setbits)
   irqstate_t flags;
   uint16_t   regval;
 
-  flags   = spin_lock_irqsave();
+  flags   = spin_lock_irqsave(NULL);
   regval  = getreg16(addr);
   regval &= ~clearbits;
   regval |= setbits;
   putreg16(regval, addr);
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
diff --git a/arch/arm/src/common/arm_modifyreg32.c b/arch/arm/src/common/arm_modifyreg32.c
index 66ddd78..74bddd0 100644
--- a/arch/arm/src/common/arm_modifyreg32.c
+++ b/arch/arm/src/common/arm_modifyreg32.c
@@ -64,10 +64,10 @@ void modifyreg32(unsigned int addr, uint32_t clearbits, uint32_t setbits)
   irqstate_t flags;
   uint32_t   regval;
 
-  flags   = spin_lock_irqsave();
+  flags   = spin_lock_irqsave(NULL);
   regval  = getreg32(addr);
   regval &= ~clearbits;
   regval |= setbits;
   putreg32(regval, addr);
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
diff --git a/arch/arm/src/common/arm_modifyreg8.c b/arch/arm/src/common/arm_modifyreg8.c
index 1e3db5d..c7446b0 100644
--- a/arch/arm/src/common/arm_modifyreg8.c
+++ b/arch/arm/src/common/arm_modifyreg8.c
@@ -64,10 +64,10 @@ void modifyreg8(unsigned int addr, uint8_t clearbits, uint8_t setbits)
   irqstate_t flags;
   uint8_t    regval;
 
-  flags   = spin_lock_irqsave();
+  flags   = spin_lock_irqsave(NULL);
   regval  = getreg8(addr);
   regval &= ~clearbits;
   regval |= setbits;
   putreg8(regval, addr);
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
diff --git a/arch/arm/src/cxd56xx/cxd56_gpioint.c b/arch/arm/src/cxd56xx/cxd56_gpioint.c
index c60cef7..2259de1 100644
--- a/arch/arm/src/cxd56xx/cxd56_gpioint.c
+++ b/arch/arm/src/cxd56xx/cxd56_gpioint.c
@@ -110,7 +110,7 @@ static int alloc_slot(int pin, bool isalloc)
                                      : CXD56_TOPREG_IOCAPP_INTSEL0;
   int offset = (pin < PIN_IS_CLK) ? 1 : 56;
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
 
   for (slot = 0; slot < MAX_SYS_SLOT; slot++)
     {
@@ -140,12 +140,12 @@ static int alloc_slot(int pin, bool isalloc)
         }
       else
         {
-          spin_unlock_irqrestore(flags);
+          spin_unlock_irqrestore(NULL, flags);
           return -ENXIO; /* no space */
         }
     }
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 
   if (PIN_IS_CLK <= pin)
     {
@@ -305,13 +305,13 @@ static void invert_irq(int irq)
   irqstate_t flags;
   uint32_t val;
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
 
   val = getreg32(CXD56_INTC_INVERT);
   val ^= (1 << (irq - CXD56_IRQ_EXTINT));
   putreg32(val, CXD56_INTC_INVERT);
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 static bool inverted_irq(int irq)
@@ -427,9 +427,9 @@ int cxd56_gpioint_config(uint32_t pin, uint32_t gpiocfg, xcpt_t isr,
       irq_attach(irq, NULL, NULL);
       g_isr[slot] = NULL;
 
-      flags = spin_lock_irqsave();
+      flags = spin_lock_irqsave(NULL);
       g_bothedge &= ~(1 << slot);
-      spin_unlock_irqrestore(flags);
+      spin_unlock_irqrestore(NULL, flags);
       return irq;
     }
 
@@ -443,9 +443,9 @@ int cxd56_gpioint_config(uint32_t pin, uint32_t gpiocfg, xcpt_t isr,
     {
       /* set GPIO pseudo both edge interrupt */
 
-      flags = spin_lock_irqsave();
+      flags = spin_lock_irqsave(NULL);
       g_bothedge |= (1 << slot);
-      spin_unlock_irqrestore(flags);
+      spin_unlock_irqrestore(NULL, flags);
 
       /* detect the change from the current signal */
 
diff --git a/arch/arm/src/cxd56xx/cxd56_irq.c b/arch/arm/src/cxd56xx/cxd56_irq.c
index 1352592..4825f74 100644
--- a/arch/arm/src/cxd56xx/cxd56_irq.c
+++ b/arch/arm/src/cxd56xx/cxd56_irq.c
@@ -476,14 +476,14 @@ void up_disable_irq(int irq)
       g_cpu_for_irq[irq] = -1;
 #endif
 
-      irqstate_t flags = spin_lock_irqsave();
+      irqstate_t flags = spin_lock_irqsave(NULL);
       irq -= CXD56_IRQ_EXTINT;
       bit  = 1 << (irq & 0x1f);
 
       regval  = getreg32(INTC_EN(irq));
       regval &= ~bit;
       putreg32(regval, INTC_EN(irq));
-      spin_unlock_irqrestore(flags);
+      spin_unlock_irqrestore(NULL, flags);
       putreg32(bit, NVIC_IRQ_CLEAR(irq));
     }
   else
@@ -531,14 +531,14 @@ void up_enable_irq(int irq)
         }
 #endif
 
-      irqstate_t flags = spin_lock_irqsave();
+      irqstate_t flags = spin_lock_irqsave(NULL);
       irq -= CXD56_IRQ_EXTINT;
       bit  = 1 << (irq & 0x1f);
 
       regval  = getreg32(INTC_EN(irq));
       regval |= bit;
       putreg32(regval, INTC_EN(irq));
-      spin_unlock_irqrestore(flags);
+      spin_unlock_irqrestore(NULL, flags);
       putreg32(bit, NVIC_IRQ_ENABLE(irq));
     }
   else
diff --git a/arch/arm/src/cxd56xx/cxd56_rtc.c b/arch/arm/src/cxd56xx/cxd56_rtc.c
index ded293e..58cec8a 100644
--- a/arch/arm/src/cxd56xx/cxd56_rtc.c
+++ b/arch/arm/src/cxd56xx/cxd56_rtc.c
@@ -431,7 +431,7 @@ int up_rtc_settime(FAR const struct timespec *tp)
   irqstate_t flags;
   uint64_t count;
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
 
 #ifdef RTC_DIRECT_CONTROL
   /* wait until previous write request is completed */
@@ -454,7 +454,7 @@ int up_rtc_settime(FAR const struct timespec *tp)
   g_rtc_save->offset = (int64_t)count - (int64_t)cxd56_rtc_count();
 #endif
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 
   rtc_dumptime(tp, "Setting time");
 
@@ -482,12 +482,12 @@ uint64_t cxd56_rtc_count(void)
    * 1st post -> 2nd pre, and should be operated in atomic.
    */
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
 
   val = (uint64_t)getreg32(CXD56_RTC0_RTPOSTCNT) << 15;
   val |= getreg32(CXD56_RTC0_RTPRECNT);
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 
   return val;
 }
@@ -509,12 +509,12 @@ uint64_t cxd56_rtc_almcount(void)
   uint64_t val;
   irqstate_t flags;
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
 
   val = (uint64_t)getreg32(CXD56_RTC0_SETALMPOSTCNT(0)) << 15;
   val |= (getreg32(CXD56_RTC0_SETALMPRECNT(0)) & 0x7fff);
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 
   return val;
 }
@@ -555,7 +555,7 @@ int cxd56_rtc_setalarm(FAR struct alm_setalarm_s *alminfo)
     {
       /* The set the alarm */
 
-      flags = spin_lock_irqsave();
+      flags = spin_lock_irqsave(NULL);
 
       cbinfo->ac_cb  = alminfo->as_cb;
       cbinfo->ac_arg = alminfo->as_arg;
@@ -579,7 +579,7 @@ int cxd56_rtc_setalarm(FAR struct alm_setalarm_s *alminfo)
 
       while (RTCREG_ALM_BUSY_MASK & getreg32(CXD56_RTC0_ALMOUTEN(id)));
 
-      spin_unlock_irqrestore(flags);
+      spin_unlock_irqrestore(NULL, flags);
 
       rtc_dumptime(&alminfo->as_time, "New Alarm time");
       ret = OK;
@@ -620,7 +620,7 @@ int cxd56_rtc_cancelalarm(enum alm_id_e alarmid)
     {
       /* Unset the alarm */
 
-      flags = spin_lock_irqsave();
+      flags = spin_lock_irqsave(NULL);
 
       cbinfo->ac_cb = NULL;
 
@@ -628,7 +628,7 @@ int cxd56_rtc_cancelalarm(enum alm_id_e alarmid)
 
       putreg32(0, CXD56_RTC0_ALMOUTEN(alarmid));
 
-      spin_unlock_irqrestore(flags);
+      spin_unlock_irqrestore(NULL, flags);
 
       ret = OK;
     }
diff --git a/arch/arm/src/cxd56xx/cxd56_serial.c b/arch/arm/src/cxd56xx/cxd56_serial.c
index fc588af..80d274c 100644
--- a/arch/arm/src/cxd56xx/cxd56_serial.c
+++ b/arch/arm/src/cxd56xx/cxd56_serial.c
@@ -288,7 +288,7 @@ static inline void up_disableuartint(FAR struct up_dev_s *priv,
 {
   irqstate_t flags;
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
   if (ier)
     {
       *ier = priv->ier & UART_INTR_ALL;
@@ -296,7 +296,7 @@ static inline void up_disableuartint(FAR struct up_dev_s *priv,
 
   priv->ier &= ~UART_INTR_ALL;
   up_serialout(priv, CXD56_UART_IMSC, priv->ier);
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
@@ -307,10 +307,10 @@ static inline void up_restoreuartint(FAR struct up_dev_s *priv, uint32_t ier)
 {
   irqstate_t flags;
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
   priv->ier |= ier & UART_INTR_ALL;
   up_serialout(priv, CXD56_UART_IMSC, priv->ier);
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
@@ -372,7 +372,7 @@ static void up_set_format(struct uart_dev_s *dev)
   uint32_t cr_en;
   irqstate_t flags;
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
 
   /* Get the original state of control register */
 
@@ -438,7 +438,7 @@ static void up_set_format(struct uart_dev_s *dev)
 #endif
   up_serialout(priv, CXD56_UART_CR, cr | cr_en);
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 #endif /* CONFIG_SUPPRESS_UART_CONFIG */
 
@@ -759,7 +759,7 @@ static int up_ioctl(FAR struct file *filep, int cmd, unsigned long arg)
               break;
             }
 
-          flags = spin_lock_irqsave();
+          flags = spin_lock_irqsave(NULL);
 
           termiosp->c_cflag = ((priv->parity != 0) ? PARENB : 0) |
                               ((priv->parity == 1) ? PARODD : 0) |
@@ -793,7 +793,7 @@ static int up_ioctl(FAR struct file *filep, int cmd, unsigned long arg)
                 break;
             }
 
-          spin_unlock_irqrestore(flags);
+          spin_unlock_irqrestore(NULL, flags);
         }
         break;
 
@@ -808,7 +808,7 @@ static int up_ioctl(FAR struct file *filep, int cmd, unsigned long arg)
               break;
             }
 
-          flags = spin_lock_irqsave();
+          flags = spin_lock_irqsave(NULL);
 
           switch (termiosp->c_cflag & CSIZE)
             {
@@ -853,25 +853,25 @@ static int up_ioctl(FAR struct file *filep, int cmd, unsigned long arg)
 
           up_set_format(dev);
 
-          spin_unlock_irqrestore(flags);
+          spin_unlock_irqrestore(NLL, flags);
         }
         break;
 #endif
 
       case TIOCSBRK: /* BSD compatibility: Turn break on, unconditionally */
         {
-          irqstate_t flags = spin_lock_irqsave();
+          irqstate_t flags = spin_lock_irqsave(NULL);
           up_enablebreaks(priv, true);
-          spin_unlock_irqrestore(flags);
+          spin_unlock_irqrestore(NULL, flags);
         }
         break;
 
       case TIOCCBRK: /* BSD compatibility: Turn break off, unconditionally */
         {
           irqstate_t flags;
-          flags = spin_lock_irqsave();
+          flags = spin_lock_irqsave(NULL);
           up_enablebreaks(priv, false);
-          spin_unlock_irqrestore(flags);
+          spin_unlock_irqrestore(NULL, flags);
         }
         break;
 
@@ -922,7 +922,7 @@ static void up_rxint(FAR struct uart_dev_s *dev, bool enable)
   FAR struct up_dev_s *priv = (FAR struct up_dev_s *)dev->priv;
   irqstate_t flags;
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
   if (enable)
     {
 #ifndef CONFIG_SUPPRESS_SERIAL_INTS
@@ -935,7 +935,7 @@ static void up_rxint(FAR struct uart_dev_s *dev, bool enable)
     }
 
   up_serialout(priv, CXD56_UART_IMSC, priv->ier);
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
diff --git a/arch/arm/src/cxd56xx/cxd56_uart.c b/arch/arm/src/cxd56xx/cxd56_uart.c
index e81c823..b8b2f3c 100644
--- a/arch/arm/src/cxd56xx/cxd56_uart.c
+++ b/arch/arm/src/cxd56xx/cxd56_uart.c
@@ -455,7 +455,7 @@ void cxd56_setbaud(uintptr_t uartbase, uint32_t basefreq, uint32_t baud)
   uint32_t div;
   uint32_t lcr_h;
 
-  irqstate_t flags = spin_lock_irqsave();
+  irqstate_t flags = spin_lock_irqsave(NULL);
 
   if (uartbase == CXD56_UART2_BASE)
     {
@@ -467,7 +467,7 @@ void cxd56_setbaud(uintptr_t uartbase, uint32_t basefreq, uint32_t baud)
     }
   else
     {
-      spin_unlock_irqrestore(flags);
+      spin_unlock_irqrestore(NULL, flags);
       return;
     }
 
@@ -494,7 +494,7 @@ void cxd56_setbaud(uintptr_t uartbase, uint32_t basefreq, uint32_t baud)
   putreg32(lcr_h, uartbase + CXD56_UART_LCR_H);
 
 finish:
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
diff --git a/arch/arm/src/imx6/imx_enet.c b/arch/arm/src/imx6/imx_enet.c
index 6d2a031..4de8c6c 100644
--- a/arch/arm/src/imx6/imx_enet.c
+++ b/arch/arm/src/imx6/imx_enet.c
@@ -587,7 +587,7 @@ static int imx_transmit(FAR struct imx_driver_s *priv)
 
   /* Make the following operations atomic */
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
 
   /* Enable TX interrupts */
 
@@ -604,7 +604,7 @@ static int imx_transmit(FAR struct imx_driver_s *priv)
 
   putreg32(ENET_TDAR, IMX_ENET_TDAR);
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 
 #if CONFIG_IMX_ENET_NTXBUFFERS == 1
   priv->txbusy = false;
diff --git a/arch/arm/src/imxrt/imxrt_edma.c b/arch/arm/src/imxrt/imxrt_edma.c
index 4067144..9354282 100644
--- a/arch/arm/src/imxrt/imxrt_edma.c
+++ b/arch/arm/src/imxrt/imxrt_edma.c
@@ -268,10 +268,10 @@ static void imxrt_tcd_free(struct imxrt_edmatcd_s *tcd)
    * a TCD.
    */
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
   sq_addlast((sq_entry_t *)tcd, &g_tcd_free);
   imxrt_givedsem();
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 #endif
 
@@ -1224,7 +1224,7 @@ int imxrt_dmach_start(DMACH_HANDLE handle, edma_callback_t callback,
 
   /* Save the callback info.  This will be invoked when the DMA completes */
 
-  flags           = spin_lock_irqsave();
+  flags           = spin_lock_irqsave(NULL);
   dmach->callback = callback;
   dmach->arg      = arg;
   dmach->state    = IMXRT_DMA_ACTIVE;
@@ -1248,7 +1248,7 @@ int imxrt_dmach_start(DMACH_HANDLE handle, edma_callback_t callback,
       putreg8(regval8, IMXRT_EDMA_SERQ_OFFSET);
     }
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
   return OK;
 }
 
@@ -1276,9 +1276,9 @@ void imxrt_dmach_stop(DMACH_HANDLE handle)
   dmainfo("dmach: %p\n", dmach);
   DEBUGASSERT(dmach != NULL);
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
   imxrt_dmaterminate(dmach, -EINTR);
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
@@ -1375,7 +1375,7 @@ void imxrt_dmasample(DMACH_HANDLE handle, struct imxrt_dmaregs_s *regs)
 
   /* eDMA Global Registers */
 
-  flags          = spin_lock_irqsave();
+  flags          = spin_lock_irqsave(NULL);
 
   regs->cr       = getreg32(IMXRT_EDMA_CR);   /* Control */
   regs->es       = getreg32(IMXRT_EDMA_ES);   /* Error Status */
@@ -1410,7 +1410,7 @@ void imxrt_dmasample(DMACH_HANDLE handle, struct imxrt_dmaregs_s *regs)
   regaddr        = IMXRT_DMAMUX_CHCFG(chan);
   regs->dmamux   = getreg32(regaddr);         /* Channel configuration */
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 #endif /* CONFIG_DEBUG_DMA */
 
diff --git a/arch/arm/src/imxrt/imxrt_enet.c b/arch/arm/src/imxrt/imxrt_enet.c
index 5d5cb0c..0bbb363 100644
--- a/arch/arm/src/imxrt/imxrt_enet.c
+++ b/arch/arm/src/imxrt/imxrt_enet.c
@@ -567,7 +567,7 @@ static int imxrt_transmit(FAR struct imxrt_driver_s *priv)
 
   /* Make the following operations atomic */
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
 
   /* Enable TX interrupts */
 
@@ -584,7 +584,7 @@ static int imxrt_transmit(FAR struct imxrt_driver_s *priv)
 
   putreg32(ENET_TDAR, IMXRT_ENET_TDAR);
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
   return OK;
 }
 
diff --git a/arch/arm/src/imxrt/imxrt_hprtc.c b/arch/arm/src/imxrt/imxrt_hprtc.c
index 4d15986..1540c0b 100644
--- a/arch/arm/src/imxrt/imxrt_hprtc.c
+++ b/arch/arm/src/imxrt/imxrt_hprtc.c
@@ -536,7 +536,7 @@ int imxrt_hprtc_setalarm(FAR struct timespec *ts, hprtc_alarm_callback_t cb)
    * interrupted or preempted.
    */
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
 
   now = imxrt_hprtc_time();
 
@@ -578,7 +578,7 @@ int imxrt_hprtc_setalarm(FAR struct timespec *ts, hprtc_alarm_callback_t cb)
   /* Unconditionally enable the RTC alarm interrupt */
 
   imxrt_hprtc_alarmenable();
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
   return OK;
 }
 #endif
diff --git a/arch/arm/src/imxrt/imxrt_serial.c b/arch/arm/src/imxrt/imxrt_serial.c
index 2074c47..bebf19e 100644
--- a/arch/arm/src/imxrt/imxrt_serial.c
+++ b/arch/arm/src/imxrt/imxrt_serial.c
@@ -883,7 +883,7 @@ static inline void imxrt_disableuartint(struct imxrt_uart_s *priv,
   irqstate_t flags;
   uint32_t regval;
 
-  flags  = spin_lock_irqsave();
+  flags  = spin_lock_irqsave(NULL);
   regval = imxrt_serialin(priv, IMXRT_LPUART_CTRL_OFFSET);
 
   /* Return the current Rx and Tx interrupt state */
@@ -895,7 +895,7 @@ static inline void imxrt_disableuartint(struct imxrt_uart_s *priv,
 
   regval &= ~LPUART_ALL_INTS;
   imxrt_serialout(priv, IMXRT_LPUART_CTRL_OFFSET, regval);
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
@@ -912,12 +912,12 @@ static inline void imxrt_restoreuartint(struct imxrt_uart_s *priv,
    * enabled/disabled.
    */
 
-  flags   = spin_lock_irqsave();
+  flags   = spin_lock_irqsave(NULL);
   regval  = imxrt_serialin(priv, IMXRT_LPUART_CTRL_OFFSET);
   regval &= ~LPUART_ALL_INTS;
   regval |= ie;
   imxrt_serialout(priv, IMXRT_LPUART_CTRL_OFFSET, regval);
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
@@ -1313,7 +1313,7 @@ static int imxrt_ioctl(struct file *filep, int cmd, unsigned long arg)
              * implement TCSADRAIN / TCSAFLUSH
              */
 
-            flags  = spin_lock_irqsave();
+            flags  = spin_lock_irqsave(NULL);
             imxrt_disableuartint(priv, &ie);
             ret = imxrt_setup(dev);
 
@@ -1321,7 +1321,7 @@ static int imxrt_ioctl(struct file *filep, int cmd, unsigned long arg)
 
             imxrt_restoreuartint(priv, ie);
             priv->ie = ie;
-            spin_unlock_irqrestore(flags);
+            spin_unlock_irqrestore(NULL, flags);
           }
       }
       break;
@@ -1334,7 +1334,7 @@ static int imxrt_ioctl(struct file *filep, int cmd, unsigned long arg)
         irqstate_t flags;
         struct imxrt_uart_s *priv = (struct imxrt_uart_s *)dev->priv;
 
-        flags  = spin_lock_irqsave();
+        flags  = spin_lock_irqsave(NULL);
         regval   = imxrt_serialin(priv, IMXRT_LPUART_CTRL_OFFSET);
 
         if ((arg & SER_SINGLEWIRE_ENABLED) != 0)
@@ -1360,7 +1360,7 @@ static int imxrt_ioctl(struct file *filep, int cmd, unsigned long arg)
 
         imxrt_serialout(priv, IMXRT_LPUART_CTRL_OFFSET, regval);
 
-        spin_unlock_irqrestore(flags);
+        spin_unlock_irqrestore(NULL, flags);
       }
       break;
 #endif
@@ -1374,7 +1374,7 @@ static int imxrt_ioctl(struct file *filep, int cmd, unsigned long arg)
         irqstate_t flags;
         struct imxrt_uart_s *priv = (struct imxrt_uart_s *)dev->priv;
 
-        flags  = spin_lock_irqsave();
+        flags  = spin_lock_irqsave(NULL);
         ctrl   = imxrt_serialin(priv, IMXRT_LPUART_CTRL_OFFSET);
         stat   = imxrt_serialin(priv, IMXRT_LPUART_STAT_OFFSET);
         regval = ctrl;
@@ -1410,7 +1410,7 @@ static int imxrt_ioctl(struct file *filep, int cmd, unsigned long arg)
         imxrt_serialout(priv, IMXRT_LPUART_STAT_OFFSET, stat);
         imxrt_serialout(priv, IMXRT_LPUART_CTRL_OFFSET, ctrl);
 
-        spin_unlock_irqrestore(flags);
+        spin_unlock_irqrestore(NULL, flags);
       }
       break;
 #endif
@@ -1461,7 +1461,7 @@ static void imxrt_rxint(struct uart_dev_s *dev, bool enable)
 
   /* Enable interrupts for data available at Rx */
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
   if (enable)
     {
 #ifndef CONFIG_SUPPRESS_SERIAL_INTS
@@ -1477,7 +1477,7 @@ static void imxrt_rxint(struct uart_dev_s *dev, bool enable)
   regval &= ~LPUART_ALL_INTS;
   regval |= priv->ie;
   imxrt_serialout(priv, IMXRT_LPUART_CTRL_OFFSET, regval);
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
@@ -1529,7 +1529,7 @@ static void imxrt_txint(struct uart_dev_s *dev, bool enable)
 
   /* Enable interrupt for TX complete */
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
   if (enable)
     {
 #ifndef CONFIG_SUPPRESS_SERIAL_INTS
@@ -1545,7 +1545,7 @@ static void imxrt_txint(struct uart_dev_s *dev, bool enable)
   regval &= ~LPUART_ALL_INTS;
   regval |= priv->ie;
   imxrt_serialout(priv, IMXRT_LPUART_CTRL_OFFSET, regval);
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
diff --git a/arch/arm/src/imxrt/imxrt_wdog.c b/arch/arm/src/imxrt/imxrt_wdog.c
index 9302afc..7b2a04a 100644
--- a/arch/arm/src/imxrt/imxrt_wdog.c
+++ b/arch/arm/src/imxrt/imxrt_wdog.c
@@ -251,12 +251,12 @@ static int imxrt_wdog_stop(FAR struct watchdog_lowerhalf_s *lower)
 
 static int imxrt_wdog_keepalive(FAR struct watchdog_lowerhalf_s *lower)
 {
-  irqstate_t flags = spin_lock_irqsave();
+  irqstate_t flags = spin_lock_irqsave(NULL);
 
   putreg16(WDOG_KEEP_ALIVE_KEY1, IMXRT_WDOG1_WSR);
   putreg16(WDOG_KEEP_ALIVE_KEY2, IMXRT_WDOG1_WSR);
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 
   return OK;
 }
@@ -326,7 +326,7 @@ static int imxrt_wdog_settimeout(FAR struct watchdog_lowerhalf_s *lower,
 
   priv->timeout = timeout;
 
-  irqstate_t flags = spin_lock_irqsave();
+  irqstate_t flags = spin_lock_irqsave(NULL);
 
   /* write timer value to WCR WT register */
 
@@ -340,7 +340,7 @@ static int imxrt_wdog_settimeout(FAR struct watchdog_lowerhalf_s *lower,
   putreg16(WDOG_KEEP_ALIVE_KEY1, IMXRT_WDOG1_WSR);
   putreg16(WDOG_KEEP_ALIVE_KEY2, IMXRT_WDOG1_WSR);
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 
   return OK;
 }
diff --git a/arch/arm/src/lc823450/lc823450_dma.c b/arch/arm/src/lc823450/lc823450_dma.c
index a9d200d..ab417aa 100644
--- a/arch/arm/src/lc823450/lc823450_dma.c
+++ b/arch/arm/src/lc823450/lc823450_dma.c
@@ -140,7 +140,7 @@ static int dma_interrupt_core(void *context)
 
   pdmach = (struct lc823450_phydmach_s *)context;
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
   q_ent = pdmach->req_q.tail;
   DEBUGASSERT(q_ent != NULL);
   dmach = (struct lc823450_dmach_s *)q_ent;
@@ -150,14 +150,14 @@ static int dma_interrupt_core(void *context)
       /* finish one transfer */
 
       sq_remlast(&pdmach->req_q);
-      spin_unlock_irqrestore(flags);
+      spin_unlock_irqrestore(NULL, flags);
 
       if (dmach->callback)
         dmach->callback((DMA_HANDLE)dmach, dmach->arg, 0);
     }
   else
     {
-      spin_unlock_irqrestore(flags);
+      spin_unlock_irqrestore(NULL, flags);
     }
 
   up_disable_clk(LC823450_CLOCK_DMA);
@@ -214,14 +214,14 @@ static int phydmastart(struct lc823450_phydmach_s *pdmach)
   struct lc823450_dmach_s *dmach;
   sq_entry_t *q_ent;
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
 
   q_ent = pdmach->req_q.tail;
 
   if (!q_ent)
     {
       pdmach->inprogress = 0;
-      spin_unlock_irqrestore(flags);
+      spin_unlock_irqrestore(NULL, flags);
       return 0;
     }
 
@@ -284,7 +284,7 @@ static int phydmastart(struct lc823450_phydmach_s *pdmach)
 
   modifyreg32(DMACCFG(dmach->chn), 0, DMACCFG_ITC | DMACCFG_E);
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
   return 0;
 }
 
@@ -614,7 +614,7 @@ int lc823450_dmastart(DMA_HANDLE handle, dma_callback_t callback, void *arg)
 
   /* select physical channel */
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
 
   sq_addfirst(&dmach->q_ent, &g_dma.phydmach[dmach->chn].req_q);
 
@@ -628,7 +628,7 @@ int lc823450_dmastart(DMA_HANDLE handle, dma_callback_t callback, void *arg)
       phydmastart(&g_dma.phydmach[dmach->chn]);
     }
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 
   return OK;
 }
@@ -645,7 +645,7 @@ void lc823450_dmastop(DMA_HANDLE handle)
 
   DEBUGASSERT(dmach != NULL);
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
 
   modifyreg32(DMACCFG(dmach->chn), DMACCFG_ITC | DMACCFG_E, 0);
 
@@ -661,6 +661,6 @@ void lc823450_dmastop(DMA_HANDLE handle)
       sq_rem(&dmach->q_ent, &pdmach->req_q);
     }
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
   return;
 }
diff --git a/arch/arm/src/lc823450/lc823450_dvfs2.c b/arch/arm/src/lc823450/lc823450_dvfs2.c
index cb13802..5ad33918 100644
--- a/arch/arm/src/lc823450/lc823450_dvfs2.c
+++ b/arch/arm/src/lc823450/lc823450_dvfs2.c
@@ -434,7 +434,7 @@ static void lc823450_dvfs_do_auto(uint32_t idle[])
 
 void lc823450_dvfs_get_idletime(uint64_t idletime[])
 {
-  irqstate_t flags = spin_lock_irqsave();
+  irqstate_t flags = spin_lock_irqsave(NULL);
 
   /* First, copy g_idle_totaltime to the caller */
 
@@ -454,7 +454,7 @@ void lc823450_dvfs_get_idletime(uint64_t idletime[])
     }
 #endif
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
@@ -510,7 +510,7 @@ void lc823450_dvfs_tick_callback(void)
 
 void lc823450_dvfs_enter_idle(void)
 {
-  irqstate_t flags = spin_lock_irqsave();
+  irqstate_t flags = spin_lock_irqsave(NULL);
 
   int me = up_cpu_index();
 
@@ -550,7 +550,7 @@ void lc823450_dvfs_enter_idle(void)
   lc823450_dvfs_set_div(_dvfs_cur_idx, 1);
 
 exit_with_error:
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
@@ -560,7 +560,7 @@ exit_with_error:
 
 void lc823450_dvfs_exit_idle(int irq)
 {
-  irqstate_t flags = spin_lock_irqsave();
+  irqstate_t flags = spin_lock_irqsave(NULL);
 
   int me = up_cpu_index();
   uint64_t d;
@@ -603,7 +603,7 @@ exit_with_error:
 
   _dvfs_cpu_is_active[me] = 1;
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
@@ -635,7 +635,7 @@ int lc823450_dvfs_set_freq(int freq)
       return -1;
     }
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
 
   switch (freq)
     {
@@ -663,6 +663,6 @@ int lc823450_dvfs_set_freq(int freq)
       lc823450_dvfs_set_div(idx, 0);
     }
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
   return ret;
 }
diff --git a/arch/arm/src/lc823450/lc823450_gpio.c b/arch/arm/src/lc823450/lc823450_gpio.c
index 59e99e0..b179245 100644
--- a/arch/arm/src/lc823450/lc823450_gpio.c
+++ b/arch/arm/src/lc823450/lc823450_gpio.c
@@ -224,12 +224,12 @@ int lc823450_gpio_mux(uint16_t gpiocfg)
 
   if (port <= (GPIO_PORT5 >> GPIO_PORT_SHIFT))
     {
-      irqstate_t flags = spin_lock_irqsave();
+      irqstate_t flags = spin_lock_irqsave(NULL);
       val = getreg32(PMDCNT0 + (port * 4));
       val &= ~(3 << (2 * pin));
       val |= (mux << (2 *pin));
       putreg32(val, PMDCNT0 + (port * 4));
-      spin_unlock_irqrestore(flags);
+      spin_unlock_irqrestore(NULL, flags);
     }
   else
     {
@@ -272,7 +272,7 @@ int lc823450_gpio_config(uint16_t gpiocfg)
 
       /* Handle the GPIO configuration by the basic mode of the pin */
 
-      flags = spin_lock_irqsave();
+      flags = spin_lock_irqsave(NULL);
 
       /* pull up/down specified */
 
@@ -297,7 +297,7 @@ int lc823450_gpio_config(uint16_t gpiocfg)
             break;
         }
 
-      spin_unlock_irqrestore(flags);
+      spin_unlock_irqrestore(NULL, flags);
     }
 #ifdef CONFIG_IOEX
   else if (port <= (GPIO_PORTEX >> GPIO_PORT_SHIFT))
@@ -385,7 +385,7 @@ void lc823450_gpio_write(uint16_t gpiocfg, bool value)
 
       regaddr = lc823450_get_gpio_data(port);
 
-      flags = spin_lock_irqsave();
+      flags = spin_lock_irqsave(NULL);
 
       /* Write the value (0 or 1).  To the data register */
 
@@ -402,7 +402,7 @@ void lc823450_gpio_write(uint16_t gpiocfg, bool value)
 
       putreg32(regval, regaddr);
 
-      spin_unlock_irqrestore(flags);
+      spin_unlock_irqrestore(NULL, flags);
     }
 #ifdef CONFIG_IOEX
   else if (port <= (GPIO_PORTEX >> GPIO_PORT_SHIFT))
diff --git a/arch/arm/src/lc823450/lc823450_irq.c b/arch/arm/src/lc823450/lc823450_irq.c
index 4583ae9..436c7ef 100644
--- a/arch/arm/src/lc823450/lc823450_irq.c
+++ b/arch/arm/src/lc823450/lc823450_irq.c
@@ -669,7 +669,7 @@ void up_enable_irq(int irq)
        * set the bit in the System Handler Control and State Register.
        */
 
-      flags = spin_lock_irqsave();
+      flags = spin_lock_irqsave(NULL);
 
       if (irq >= LC823450_IRQ_NIRQS)
         {
@@ -692,7 +692,7 @@ void up_enable_irq(int irq)
           putreg32(regval, regaddr);
         }
 
-      spin_unlock_irqrestore(flags);
+      spin_unlock_irqrestore(NULL, flags);
     }
 
   /* lc823450_dumpnvic("enable", irq); */
@@ -817,7 +817,7 @@ int lc823450_irq_srctype(int irq, enum lc823450_srctype_e srctype)
   port = (irq & 0x70) >> 4;
   gpio = irq & 0xf;
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
 
   regaddr = INTC_REG(EXTINTCND_BASE, port);
   regval = getreg32(regaddr);
@@ -827,7 +827,7 @@ int lc823450_irq_srctype(int irq, enum lc823450_srctype_e srctype)
 
   putreg32(regval, regaddr);
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 
   return OK;
 }
diff --git a/arch/arm/src/lc823450/lc823450_syscontrol.c b/arch/arm/src/lc823450/lc823450_syscontrol.c
index 970732b..35e6b89 100644
--- a/arch/arm/src/lc823450/lc823450_syscontrol.c
+++ b/arch/arm/src/lc823450/lc823450_syscontrol.c
@@ -131,7 +131,7 @@ void mod_stby_regs(uint32_t enabits, uint32_t disbits)
 void up_enable_clk(enum clock_e clk)
 {
   irqstate_t flags;
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
 
   DEBUGASSERT(clk < LC823450_CLOCK_NUM);
 
@@ -141,7 +141,7 @@ void up_enable_clk(enum clock_e clk)
                   0, lc823450_clocks[clk].regmask);
     }
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
@@ -151,7 +151,7 @@ void up_enable_clk(enum clock_e clk)
 void up_disable_clk(enum clock_e clk)
 {
   irqstate_t flags;
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
 
   DEBUGASSERT(clk < LC823450_CLOCK_NUM);
 
@@ -168,7 +168,7 @@ void up_disable_clk(enum clock_e clk)
       lc823450_clocks[clk].count = 0;
     }
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
diff --git a/arch/arm/src/lc823450/lc823450_timer.c b/arch/arm/src/lc823450/lc823450_timer.c
index a54cdd8..526886d 100644
--- a/arch/arm/src/lc823450/lc823450_timer.c
+++ b/arch/arm/src/lc823450/lc823450_timer.c
@@ -182,7 +182,7 @@ static void hrt_queue_refresh(void)
   struct hrt_s *tmp;
   irqstate_t flags;
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
   elapsed = (uint64_t)getreg32(MT20CNT) * (1000 * 1000) * 10 / XT1OSC_CLK;
 
   for (pent = hrt_timer_queue.head; pent; pent = dq_next(pent))
@@ -201,9 +201,9 @@ cont:
       if (tmp->usec <= 0)
         {
           dq_rem(pent, &hrt_timer_queue);
-          spin_unlock_irqrestore(flags);
+          spin_unlock_irqrestore(NULL, flags);
           nxsem_post(&tmp->sem);
-          flags = spin_lock_irqsave();
+          flags = spin_lock_irqsave(NULL);
           goto cont;
         }
       else
@@ -212,7 +212,7 @@ cont:
         }
     }
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 #endif
 
@@ -227,7 +227,7 @@ static void hrt_usleep_setup(void)
   struct hrt_s *head;
   irqstate_t flags;
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
   head = container_of(hrt_timer_queue.head, struct hrt_s, ent);
   if (head == NULL)
     {
@@ -235,7 +235,7 @@ static void hrt_usleep_setup(void)
 
       modifyreg32(MCLKCNTEXT1, MCLKCNTEXT1_MTM2C_CLKEN, 0x0);
       modifyreg32(MCLKCNTEXT1, MCLKCNTEXT1_MTM2_CLKEN, 0x0);
-      spin_unlock_irqrestore(flags);
+      spin_unlock_irqrestore(NULL, flags);
       return;
     }
 
@@ -257,7 +257,7 @@ static void hrt_usleep_setup(void)
   /* Enable MTM2-Ch0 */
 
   putreg32(1, MT2OPR);
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 #endif
 
@@ -296,7 +296,7 @@ static void hrt_usleep_add(struct hrt_s *phrt)
 
   hrt_queue_refresh();
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
 
   /* add phrt to hrt_timer_queue */
 
@@ -318,7 +318,7 @@ static void hrt_usleep_add(struct hrt_s *phrt)
       dq_addlast(&phrt->ent, &hrt_timer_queue);
     }
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 
   hrt_usleep_setup();
 }
@@ -696,7 +696,7 @@ int up_rtc_gettime(FAR struct timespec *tp)
   irqstate_t   flags;
   uint64_t f;
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
 
   /* Get the elapsed time */
 
@@ -707,7 +707,7 @@ int up_rtc_gettime(FAR struct timespec *tp)
   f = up_get_timer_fraction();
   elapsed += f;
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 
   tmrinfo("elapsed = %lld \n", elapsed);
 
diff --git a/arch/arm/src/lc823450/lc823450_usbdev.c b/arch/arm/src/lc823450/lc823450_usbdev.c
index 8c8bd24..dba9ce6 100644
--- a/arch/arm/src/lc823450/lc823450_usbdev.c
+++ b/arch/arm/src/lc823450/lc823450_usbdev.c
@@ -480,7 +480,7 @@ static int lc823450_epclearreq(struct usbdev_ep_s *ep)
   struct lc823450_ep_s *privep = (struct lc823450_ep_s *)ep;
   irqstate_t flags;
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
   while (privep->req_q.tail)
     {
       struct usbdev_req_s *req;
@@ -497,7 +497,7 @@ static int lc823450_epclearreq(struct usbdev_ep_s *ep)
       req->callback(ep, req);
     }
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
   return 0;
 }
 
@@ -663,27 +663,27 @@ static int lc823450_epsubmit(struct usbdev_ep_s *ep,
 
   if (privep->epphy == 0)
     {
-      flags = spin_lock_irqsave();
+      flags = spin_lock_irqsave(NULL);
       req->xfrd = epbuf_write(privep->epphy, req->buf, req->len);
-      spin_unlock_irqrestore(flags);
+      spin_unlock_irqrestore(NULL, flags);
       req->callback(ep, req);
     }
   else if (privep->in)
     {
       /* Send packet request from function driver */
 
-      flags = spin_lock_irqsave();
+      flags = spin_lock_irqsave(NULL);
 
       if ((getreg32(USB_EPCOUNT(privep->epphy * 2)) &
           USB_EPCOUNT_PHYCNT_MASK) >> USB_EPCOUNT_PHYCNT_SHIFT ||
           privep->req_q.tail)
         {
           sq_addfirst(&privreq->q_ent, &privep->req_q); /* non block */
-          spin_unlock_irqrestore(flags);
+          spin_unlock_irqrestore(NULL, flags);
         }
        else
         {
-          spin_unlock_irqrestore(flags);
+          spin_unlock_irqrestore(NULL, flags);
           req->xfrd = epbuf_write(privep->epphy, req->buf, req->len);
           req->callback(ep, req);
         }
@@ -692,9 +692,9 @@ static int lc823450_epsubmit(struct usbdev_ep_s *ep,
     {
       /* receive packet buffer from function driver */
 
-      flags = spin_lock_irqsave();
+      flags = spin_lock_irqsave(NULL);
       sq_addfirst(&privreq->q_ent, &privep->req_q); /* non block */
-      spin_unlock_irqrestore(flags);
+      spin_unlock_irqrestore(NULL, flags);
       lc823450_epack(privep->epphy, 1);
     }
 
@@ -718,9 +718,9 @@ static int lc823450_epcancel(struct usbdev_ep_s *ep,
 
   /* Remove request from req_queue */
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
   sq_remafter(&privreq->q_ent, &privep->req_q);
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
   return 0;
 }
 
@@ -739,7 +739,7 @@ static int lc823450_epstall(struct usbdev_ep_s *ep, bool resume)
 
   /* STALL or RESUME the endpoint */
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
   usbtrace(resume ? TRACE_EPRESUME : TRACE_EPSTALL, privep->epphy);
 
   if (resume)
@@ -753,7 +753,7 @@ static int lc823450_epstall(struct usbdev_ep_s *ep, bool resume)
       epcmd_write(privep->epphy, USB_EPCMD_STALL_SET | USB_EPCMD_TGL_SET);
     }
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
   return OK;
 }
 
@@ -762,11 +762,11 @@ void up_epignore_clear_stall(struct usbdev_ep_s *ep, bool ignore)
 {
   struct lc823450_ep_s *privep = (struct lc823450_ep_s *)ep;
   irqstate_t flags;
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
 
   privep->ignore_clear_stall = ignore;
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 #endif /* CONFIG_USBMSC_IGNORE_CLEAR_STALL */
 
@@ -925,7 +925,7 @@ static void usb_suspend_work_func(void *arg)
     }
 #endif
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
   if (getreg32(USB_DEVS) & USB_DEVS_SUSPEND)
     {
       uinfo("USB BUS SUSPEND\n");
@@ -940,7 +940,7 @@ static void usb_suspend_work_func(void *arg)
       wake_unlock(&priv->wlock);
     }
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 #endif
 
@@ -1258,7 +1258,7 @@ static void subintr_epin(uint8_t epnum, struct lc823450_ep_s *privep)
   /* Send packet done */
 
   irqstate_t flags;
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
 
   if (privep->req_q.tail)
     {
@@ -1269,7 +1269,7 @@ static void subintr_epin(uint8_t epnum, struct lc823450_ep_s *privep)
 
       q_ent = sq_remlast(&privep->req_q);
 
-      spin_unlock_irqrestore(flags);
+      spin_unlock_irqrestore(NULL, flags);
 
       req = &container_of(q_ent, struct lc823450_req_s, q_ent)->req;
 
@@ -1285,7 +1285,7 @@ static void subintr_epin(uint8_t epnum, struct lc823450_ep_s *privep)
     }
   else
     {
-      spin_unlock_irqrestore(flags);
+      spin_unlock_irqrestore(NULL, flags);
       epcmd_write(epnum, USB_EPCMD_EMPTY_CLR);
     }
 }
@@ -1303,7 +1303,7 @@ static void subintr_epout(uint8_t epnum, struct lc823450_ep_s *privep)
   /* Packet receive from host */
 
   irqstate_t flags;
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
 
   if (privep->req_q.tail)
     {
@@ -1322,7 +1322,7 @@ static void subintr_epout(uint8_t epnum, struct lc823450_ep_s *privep)
           lc823450_epack(epnum, 0);
         }
 
-      spin_unlock_irqrestore(flags);
+      spin_unlock_irqrestore(NULL, flags);
 
       /* PIO */
 
@@ -1335,7 +1335,7 @@ static void subintr_epout(uint8_t epnum, struct lc823450_ep_s *privep)
     }
   else
     {
-      spin_unlock_irqrestore(flags);
+      spin_unlock_irqrestore(NULL, flags);
       uinfo("REQ Buffer Exhault\n");
       epcmd_write(epnum, USB_EPCMD_READY_CLR);
     }
@@ -1654,7 +1654,7 @@ int usbdev_unregister(struct usbdevclass_driver_s *driver)
    * canceled while the class driver is still bound.
    */
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
 
 #ifdef CONFIG_WAKELOCK
   /* cancel USB suspend work */
@@ -1690,7 +1690,7 @@ int usbdev_unregister(struct usbdevclass_driver_s *driver)
   pm_unregister(&g_pm_cb);
 #endif /* CONFIG_PM */
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 
 #ifdef CONFIG_LC823450_LSISTBY
   /* disable USB */
@@ -1942,7 +1942,7 @@ static void usbdev_pmnotify(struct pm_callback_s *cb,
 {
   irqstate_t flags;
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
 
   switch (pmstate)
     {
@@ -1965,6 +1965,6 @@ static void usbdev_pmnotify(struct pm_callback_s *cb,
         break;
     }
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 #endif
diff --git a/arch/arm/src/max326xx/max32660/max32660_dma.c b/arch/arm/src/max326xx/max32660/max32660_dma.c
index fe1c9e7..11d5930 100644
--- a/arch/arm/src/max326xx/max32660/max32660_dma.c
+++ b/arch/arm/src/max326xx/max32660/max32660_dma.c
@@ -280,7 +280,7 @@ DMA_HANDLE max326_dma_channel(void)
    * allocation.  Just check each channel until a free one is found (on not).
    */
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
   for (i = 0; i < 0; i++)
     {
       struct max326_dmach_s *dmach = &g_max326_dmach[i];
@@ -292,12 +292,12 @@ DMA_HANDLE max326_dma_channel(void)
           /* No.. allocate this channel */
 
           dmach->inuse = true;
-          spin_unlock_irqrestore(flags);
+          spin_unlock_irqrestore(NULL, flags);
           return (DMA_HANDLE)dmach;
         }
     }
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
   return (DMA_HANDLE)NULL;
 }
 
diff --git a/arch/arm/src/max326xx/max32660/max32660_gpio.c b/arch/arm/src/max326xx/max32660/max32660_gpio.c
index b7f8e6a..4cd6b59 100644
--- a/arch/arm/src/max326xx/max32660/max32660_gpio.c
+++ b/arch/arm/src/max326xx/max32660/max32660_gpio.c
@@ -255,7 +255,7 @@ int max326_gpio_config(max326_pinset_t pinset)
 
   /* Modification of all registers must be atomic */
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
 
   /* First, force the pin configuration to the default generic input state.
    * So that we know we are starting from a known state.
@@ -416,7 +416,7 @@ int max326_gpio_config(max326_pinset_t pinset)
       putreg32(regval, MAX326_GPIO0_WAKEEN);
     }
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
   return OK;
 }
 
@@ -439,7 +439,7 @@ void max326_gpio_write(max326_pinset_t pinset, bool value)
 
   /* Modification of registers must be atomic */
 
-  flags  = spin_lock_irqsave();
+  flags  = spin_lock_irqsave(NULL);
   regval = getreg32(MAX326_GPIO0_OUT);
   if (value)
     {
@@ -451,7 +451,7 @@ void max326_gpio_write(max326_pinset_t pinset, bool value)
     }
 
   putreg32(regval, MAX326_GPIO0_OUT);
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
diff --git a/arch/arm/src/max326xx/max32660/max32660_lowputc.c b/arch/arm/src/max326xx/max32660/max32660_lowputc.c
index 5b453c8..8efea0d 100644
--- a/arch/arm/src/max326xx/max32660/max32660_lowputc.c
+++ b/arch/arm/src/max326xx/max32660/max32660_lowputc.c
@@ -454,18 +454,18 @@ void arm_lowputc(char ch)
        * atomic.
        */
 
-      flags = spin_lock_irqsave();
+      flags = spin_lock_irqsave(NULL);
       if ((getreg32(CONSOLE_BASE + MAX326_UART_STAT_OFFSET) &
            UART_STAT_TXFULL) == 0)
         {
           /* Send the character */
 
           putreg32((uint32_t)ch, CONSOLE_BASE + MAX326_UART_FIFO_OFFSET);
-          spin_unlock_irqrestore(flags);
+          spin_unlock_irqrestore(NULL, flags);
           return;
         }
 
-      spin_unlock_irqrestore(flags);
+      spin_unlock_irqrestore(NULL, flags);
     }
 #endif
 }
diff --git a/arch/arm/src/max326xx/max32660/max32660_rtc.c b/arch/arm/src/max326xx/max32660/max32660_rtc.c
index f05e5ff..3826030 100644
--- a/arch/arm/src/max326xx/max32660/max32660_rtc.c
+++ b/arch/arm/src/max326xx/max32660/max32660_rtc.c
@@ -471,7 +471,7 @@ int up_rtc_settime(FAR const struct timespec *tp)
 
   /* Enable write access to RTC configuration registers */
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
   max326_rtc_wrenable(true);
 
   /* We need to disable the RTC in order to write to the SEC and SSEC
@@ -495,7 +495,7 @@ int up_rtc_settime(FAR const struct timespec *tp)
   max326_rtc_enable(true);
   max326_rtc_wrenable(false);
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
   return OK;
 }
 
@@ -534,7 +534,7 @@ int max326_rtc_setalarm(FAR struct timespec *ts,
 
   /* Is there already something waiting on the ALARM? */
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
   if (g_alarmcb == NULL)
     {
       /* Get the time as a fixed precision number.
@@ -629,7 +629,7 @@ int max326_rtc_setalarm(FAR struct timespec *ts,
     }
 
 errout_with_lock:
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
   return ret;
 }
 #endif
@@ -729,7 +729,7 @@ int max326_rtc_cancelalarm(void)
   uint32_t regval;
   int ret = -ENODATA;
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
 
   if (g_alarmcb != NULL)
     {
@@ -757,7 +757,7 @@ int max326_rtc_cancelalarm(void)
       ret = OK;
     }
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
   return ret;
 }
 #endif
diff --git a/arch/arm/src/max326xx/max32660/max32660_serial.c b/arch/arm/src/max326xx/max32660/max32660_serial.c
index 20cadea..982448b 100644
--- a/arch/arm/src/max326xx/max32660/max32660_serial.c
+++ b/arch/arm/src/max326xx/max32660/max32660_serial.c
@@ -344,11 +344,11 @@ static inline void max326_int_enable(struct max326_dev_s *priv,
   irqstate_t flags;
   uint32_t regval;
 
-  flags   = spin_lock_irqsave();
+  flags   = spin_lock_irqsave(NULL);
   regval  = max326_serialin(priv, MAX326_UART_INTEN_OFFSET);
   regval |= intset;
   max326_serialout(priv, MAX326_UART_INTEN_OFFSET, regval);
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
@@ -361,11 +361,11 @@ static inline void max326_int_disable(struct max326_dev_s *priv,
   irqstate_t flags;
   uint32_t regval;
 
-  flags   = spin_lock_irqsave();
+  flags   = spin_lock_irqsave(NULL);
   regval  = max326_serialin(priv, MAX326_UART_INTEN_OFFSET);
   regval &= ~intset;
   max326_serialout(priv, MAX326_UART_INTEN_OFFSET, regval);
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
@@ -377,14 +377,14 @@ static void max326_int_disableall(struct max326_dev_s *priv,
 {
   irqstate_t flags;
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
   if (intset)
     {
       *intset = max326_serialin(priv, MAX326_UART_INTEN_OFFSET);
     }
 
   max326_serialout(priv, MAX326_UART_INTEN_OFFSET, 0);
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
diff --git a/arch/arm/src/max326xx/max32660/max32660_wdt.c b/arch/arm/src/max326xx/max32660/max32660_wdt.c
index 4cdb2c8..724649e 100644
--- a/arch/arm/src/max326xx/max32660/max32660_wdt.c
+++ b/arch/arm/src/max326xx/max32660/max32660_wdt.c
@@ -375,7 +375,7 @@ static int max326_start(FAR struct watchdog_lowerhalf_s *lower)
 
   /* Perform the reset sequence */
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
   max326_wdog_reset(priv);
 
   /* Enable reset or interrupt */
@@ -388,7 +388,7 @@ static int max326_start(FAR struct watchdog_lowerhalf_s *lower)
   ctrl |= WDT0_CTRL_WDTEN;
   putreg32(ctrl, MAX326_WDT0_CTRL);
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
   return OK;
 }
 
@@ -420,14 +420,14 @@ static int max326_stop(FAR struct watchdog_lowerhalf_s *lower)
 
   /* Disable the watchdog timer, reset, and interrupts */
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
   ctrl  = getreg32(MAX326_WDT0_CTRL);
   ctrl &= ~(WDT0_CTRL_WDTEN | WDT0_CTRL_INTEN | WDT0_CTRL_RSTEN);
 
   up_disable_irq(MAX326_IRQ_WDT0);
   irq_detach(MAX326_IRQ_WDT0);
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
   return OK;
 }
 
@@ -458,9 +458,9 @@ static int max326_keepalive(FAR struct watchdog_lowerhalf_s *lower)
 
   /* Reset WDT timer */
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
   max326_wdog_reset(priv);
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 
   return OK;
 }
@@ -552,7 +552,7 @@ static int max326_settimeout(FAR struct watchdog_lowerhalf_s *lower,
 
   /* Reset WDT timer */
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
   max326_wdog_reset(priv);
 
   /* Convert the timeout value in milliseconds to time exponent used by the
@@ -574,7 +574,7 @@ static int max326_settimeout(FAR struct watchdog_lowerhalf_s *lower,
   ctrl |= (WDT0_CTRL_INTPERIOD(exp) | WDT0_CTRL_RSTPERIOD(exp));
   putreg32(ctrl, MAX326_WDT0_CTRL);
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
   return OK;
 }
 
@@ -607,7 +607,7 @@ static xcpt_t max326_capture(FAR struct watchdog_lowerhalf_s *lower,
 
   /* Get the old handler */
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
   oldhandler = priv->handler;
 
   /* Save the new handler */
@@ -628,7 +628,7 @@ static xcpt_t max326_capture(FAR struct watchdog_lowerhalf_s *lower,
       max326_int_enable(priv);
     }
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
   return oldhandler;
 }
 
diff --git a/arch/arm/src/nrf52/nrf52_gpio.c b/arch/arm/src/nrf52/nrf52_gpio.c
index aa4fda9..cf48124 100644
--- a/arch/arm/src/nrf52/nrf52_gpio.c
+++ b/arch/arm/src/nrf52/nrf52_gpio.c
@@ -288,7 +288,7 @@ int nrf52_gpio_config(nrf52_pinset_t cfgset)
 
       pin = GPIO_PIN_DECODE(cfgset);
 
-      flags = spin_lock_irqsave();
+      flags = spin_lock_irqsave(NULL);
 
       /* First, configure the port as a generic input so that we have a
        * known starting point and consistent behavior during the re-
@@ -323,7 +323,7 @@ int nrf52_gpio_config(nrf52_pinset_t cfgset)
           ret = -EINVAL;
         }
 
-      spin_unlock_irqrestore(flags);
+      spin_unlock_irqrestore(NULL, flags);
     }
   else
     {
diff --git a/arch/arm/src/s32k1xx/s32k1xx_edma.c b/arch/arm/src/s32k1xx/s32k1xx_edma.c
index 64d1ebb..6093974 100644
--- a/arch/arm/src/s32k1xx/s32k1xx_edma.c
+++ b/arch/arm/src/s32k1xx/s32k1xx_edma.c
@@ -268,10 +268,10 @@ static void s32k1xx_tcd_free(struct s32k1xx_edmatcd_s *tcd)
    * a TCD.
    */
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
   sq_addlast((sq_entry_t *)tcd, &g_tcd_free);
   s32k1xx_givedsem();
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 #endif
 
@@ -1194,7 +1194,7 @@ int s32k1xx_dmach_start(DMACH_HANDLE handle, edma_callback_t callback,
 
   /* Save the callback info.  This will be invoked when the DMA completes */
 
-  flags           = spin_lock_irqsave();
+  flags           = spin_lock_irqsave(NULL);
   dmach->callback = callback;
   dmach->arg      = arg;
   dmach->state    = S32K1XX_DMA_ACTIVE;
@@ -1218,7 +1218,7 @@ int s32k1xx_dmach_start(DMACH_HANDLE handle, edma_callback_t callback,
       putreg8(regval8, S32K1XX_EDMA_SERQ_OFFSET);
     }
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
   return OK;
 }
 
@@ -1246,9 +1246,9 @@ void s32k1xx_dmach_stop(DMACH_HANDLE handle)
   dmainfo("dmach: %p\n", dmach);
   DEBUGASSERT(dmach != NULL);
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
   s32k1xx_dmaterminate(dmach, -EINTR);
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
@@ -1346,7 +1346,7 @@ void s32k1xx_dmasample(DMACH_HANDLE handle, struct s32k1xx_dmaregs_s *regs)
 
   /* eDMA Global Registers */
 
-  flags          = spin_lock_irqsave();
+  flags          = spin_lock_irqsave(NULL);
 
   regs->cr       = getreg32(S32K1XX_EDMA_CR);   /* Control */
   regs->es       = getreg32(S32K1XX_EDMA_ES);   /* Error Status */
@@ -1381,7 +1381,7 @@ void s32k1xx_dmasample(DMACH_HANDLE handle, struct s32k1xx_dmaregs_s *regs)
   regaddr        = S32K1XX_DMAMUX_CHCFG(chan);
   regs->dmamux   = getreg32(regaddr);         /* Channel configuration */
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 #endif /* CONFIG_DEBUG_DMA */
 
diff --git a/arch/arm/src/s32k1xx/s32k1xx_enet.c b/arch/arm/src/s32k1xx/s32k1xx_enet.c
index 4319e41..df58baa 100644
--- a/arch/arm/src/s32k1xx/s32k1xx_enet.c
+++ b/arch/arm/src/s32k1xx/s32k1xx_enet.c
@@ -562,7 +562,7 @@ static int s32k1xx_transmit(FAR struct s32k1xx_driver_s *priv)
 
   /* Make the following operations atomic */
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
 
   /* Enable TX interrupts */
 
@@ -579,7 +579,7 @@ static int s32k1xx_transmit(FAR struct s32k1xx_driver_s *priv)
 
   putreg32(ENET_TDAR, S32K1XX_ENET_TDAR);
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
   return OK;
 }
 
diff --git a/arch/arm/src/s32k1xx/s32k1xx_serial.c b/arch/arm/src/s32k1xx/s32k1xx_serial.c
index 8e6da23..e16975c 100644
--- a/arch/arm/src/s32k1xx/s32k1xx_serial.c
+++ b/arch/arm/src/s32k1xx/s32k1xx_serial.c
@@ -444,7 +444,7 @@ static inline void s32k1xx_disableuartint(struct s32k1xx_uart_s *priv,
   irqstate_t flags;
   uint32_t regval;
 
-  flags  = spin_lock_irqsave();
+  flags  = spin_lock_irqsave(NULL);
   regval = s32k1xx_serialin(priv, S32K1XX_LPUART_CTRL_OFFSET);
 
   /* Return the current Rx and Tx interrupt state */
@@ -456,7 +456,7 @@ static inline void s32k1xx_disableuartint(struct s32k1xx_uart_s *priv,
 
   regval &= ~LPUART_ALL_INTS;
   s32k1xx_serialout(priv, S32K1XX_LPUART_CTRL_OFFSET, regval);
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
@@ -473,12 +473,12 @@ static inline void s32k1xx_restoreuartint(struct s32k1xx_uart_s *priv,
    * enabled/disabled.
    */
 
-  flags   = spin_lock_irqsave();
+  flags   = spin_lock_irqsave(NULL);
   regval  = s32k1xx_serialin(priv, S32K1XX_LPUART_CTRL_OFFSET);
   regval &= ~LPUART_ALL_INTS;
   regval |= ie;
   s32k1xx_serialout(priv, S32K1XX_LPUART_CTRL_OFFSET, regval);
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
@@ -894,7 +894,7 @@ static int s32k1xx_ioctl(struct file *filep, int cmd, unsigned long arg)
         irqstate_t flags;
         struct s32k1xx_uart_s *priv = (struct s32k1xx_uart_s *)dev->priv;
 
-        flags  = spin_lock_irqsave();
+        flags  = spin_lock_irqsave(NULL);
         ctrl   = s32k1xx_serialin(priv, S32K1XX_LPUART_CTRL_OFFSET);
         stat   = s32k1xx_serialin(priv, S32K1XX_LPUART_STAT_OFFSET);
         regval = ctrl;
@@ -930,7 +930,7 @@ static int s32k1xx_ioctl(struct file *filep, int cmd, unsigned long arg)
         s32k1xx_serialout(priv, S32K1XX_LPUART_STAT_OFFSET, stat);
         s32k1xx_serialout(priv, S32K1XX_LPUART_CTRL_OFFSET, ctrl);
 
-        spin_unlock_irqrestore(flags);
+        spin_unlock_irqrestore(NULL, flags);
       }
       break;
 #endif
@@ -981,7 +981,7 @@ static void s32k1xx_rxint(struct uart_dev_s *dev, bool enable)
 
   /* Enable interrupts for data available at Rx */
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
   if (enable)
     {
 #ifndef CONFIG_SUPPRESS_SERIAL_INTS
@@ -997,7 +997,7 @@ static void s32k1xx_rxint(struct uart_dev_s *dev, bool enable)
   regval &= ~LPUART_ALL_INTS;
   regval |= priv->ie;
   s32k1xx_serialout(priv, S32K1XX_LPUART_CTRL_OFFSET, regval);
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
@@ -1049,7 +1049,7 @@ static void s32k1xx_txint(struct uart_dev_s *dev, bool enable)
 
   /* Enable interrupt for TX complete */
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
   if (enable)
     {
 #ifndef CONFIG_SUPPRESS_SERIAL_INTS
@@ -1065,7 +1065,7 @@ static void s32k1xx_txint(struct uart_dev_s *dev, bool enable)
   regval &= ~LPUART_ALL_INTS;
   regval |= priv->ie;
   s32k1xx_serialout(priv, S32K1XX_LPUART_CTRL_OFFSET, regval);
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
diff --git a/arch/arm/src/stm32/stm32_hciuart.c b/arch/arm/src/stm32/stm32_hciuart.c
index 3da5ae2..96457b9 100644
--- a/arch/arm/src/stm32/stm32_hciuart.c
+++ b/arch/arm/src/stm32/stm32_hciuart.c
@@ -1895,7 +1895,7 @@ static void hciuart_rxattach(const struct btuart_lowerhalf_s *lower,
 
   /* If the callback is NULL, then we are detaching */
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
   if (callback == NULL)
     {
       uint32_t intset;
@@ -1918,7 +1918,7 @@ static void hciuart_rxattach(const struct btuart_lowerhalf_s *lower,
       state->callback = callback;
     }
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
@@ -1983,7 +1983,7 @@ static void hciuart_rxenable(const struct btuart_lowerhalf_s *lower,
        * "           "    USART_SR_ORE  Overrun Error Detected
        */
 
-      flags = spin_lock_irqsave();
+      flags = spin_lock_irqsave(NULL);
       if (enable)
         {
           /* Receive an interrupt when their is anything in the Rx data
@@ -1999,7 +1999,7 @@ static void hciuart_rxenable(const struct btuart_lowerhalf_s *lower,
           hciuart_disableints(config, intset);
         }
 
-      spin_unlock_irqrestore(flags);
+      spin_unlock_irqrestore(NULL, flags);
     }
 #endif
 }
@@ -2198,9 +2198,9 @@ static ssize_t hciuart_write(const struct btuart_lowerhalf_s *lower,
    * USART_CR3_CTSIE  USART_SR_CTS  CTS flag               (not used)
    */
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
   hciuart_disableints(config, USART_CR1_TXEIE);
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 
   /* Loop until all of the user data have been moved to the Tx buffer */
 
@@ -2293,9 +2293,9 @@ static ssize_t hciuart_write(const struct btuart_lowerhalf_s *lower,
 
   if (state->txhead != state->txtail)
     {
-      flags = spin_lock_irqsave();
+      flags = spin_lock_irqsave(NULL);
       hciuart_enableints(config, USART_CR1_TXEIE);
-      spin_unlock_irqrestore(flags);
+      spin_unlock_irqrestore(NULL, flags);
     }
 
   return ntotal;
@@ -2629,7 +2629,7 @@ void stm32_serial_dma_poll(void)
 {
   irqstate_t flags;
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
 
 #ifdef CONFIG_STM32_HCIUART1_RXDMA
   if (g_hciusart1_config.state->rxdmastream != NULL)
@@ -2680,6 +2680,6 @@ void stm32_serial_dma_poll(void)
     }
 #endif
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 #endif
diff --git a/arch/arm/src/tiva/cc13xx/cc13xx_enablepwr.c b/arch/arm/src/tiva/cc13xx/cc13xx_enablepwr.c
index a5271ed..722dcf6 100644
--- a/arch/arm/src/tiva/cc13xx/cc13xx_enablepwr.c
+++ b/arch/arm/src/tiva/cc13xx/cc13xx_enablepwr.c
@@ -79,13 +79,13 @@ void cc13xx_periph_enablepwr(uint32_t peripheral)
 
   /* Remember that this peripheral needs power in this domain */
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
   g_domain_usage[dndx] |= (1 << pndx);
 
   /* Make sure that power is enabled in that domain */
 
   prcm_powerdomain_on(domain);
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 
   /* Wait for the power domain to be ready.  REVISIT:  This really should be
    * in the critical section but this could take too long.
@@ -113,7 +113,7 @@ void cc13xx_periph_disablepwr(uint32_t peripheral)
 
   /* This peripheral no longer needs power in this domain */
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
   g_domain_usage[dndx] &= ~(1 << pndx);
 
   /* If there are no peripherals needing power in this domain, then turn off
@@ -126,5 +126,5 @@ void cc13xx_periph_disablepwr(uint32_t peripheral)
                            PRCM_DOMAIN_SERIAL : PRCM_DOMAIN_PERIPH);
     }
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
diff --git a/arch/arm/src/tiva/cc13xx/cc13xx_gpio.c b/arch/arm/src/tiva/cc13xx/cc13xx_gpio.c
index 0e3e1d8..f214645 100644
--- a/arch/arm/src/tiva/cc13xx/cc13xx_gpio.c
+++ b/arch/arm/src/tiva/cc13xx/cc13xx_gpio.c
@@ -77,7 +77,7 @@ int tiva_configgpio(pinconfig_t pinconfig)
 
   /* The following requires exclusive access to the GPIO registers */
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
 
 #ifdef CONFIG_TIVA_GPIO_IRQS
   /* Mask and clear any pending GPIO interrupt */
@@ -136,7 +136,7 @@ int tiva_configgpio(pinconfig_t pinconfig)
       putreg32(regval, TIVA_GPIO_DOE);
     }
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
   return OK;
 }
 
diff --git a/arch/arm/src/tiva/common/tiva_hciuart.c b/arch/arm/src/tiva/common/tiva_hciuart.c
index 085abe5..7f00bda 100644
--- a/arch/arm/src/tiva/common/tiva_hciuart.c
+++ b/arch/arm/src/tiva/common/tiva_hciuart.c
@@ -1242,7 +1242,7 @@ static void hciuart_rxattach(const struct btuart_lowerhalf_s *lower,
 
   /* If the callback is NULL, then we are detaching */
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
   if (callback == NULL)
     {
       uint32_t intset;
@@ -1264,7 +1264,7 @@ static void hciuart_rxattach(const struct btuart_lowerhalf_s *lower,
       state->callback = callback;
     }
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
@@ -1292,7 +1292,7 @@ static void hciuart_rxenable(const struct btuart_lowerhalf_s *lower,
       uint32_t intset;
       irqstate_t flags;
 
-      flags = spin_lock_irqsave();
+      flags = spin_lock_irqsave(NULL);
       if (enable)
         {
           /* Receive an interrupt when their is anything in the Rx data
@@ -1308,7 +1308,7 @@ static void hciuart_rxenable(const struct btuart_lowerhalf_s *lower,
           hciuart_disableints(config, intset);
         }
 
-      spin_unlock_irqrestore(flags);
+      spin_unlock_irqrestore(NULL, flags);
     }
 }
 
@@ -1494,9 +1494,9 @@ static ssize_t hciuart_write(const struct btuart_lowerhalf_s *lower,
 
   /* Make sure that the Tx Interrupts are disabled. */
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
   hciuart_disableints(config, UART_IM_TXIM);
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 
   /* Loop until all of the user data have been moved to the Tx buffer */
 
@@ -1591,9 +1591,9 @@ static ssize_t hciuart_write(const struct btuart_lowerhalf_s *lower,
 
   if (state->txhead != state->txtail)
     {
-      flags = spin_lock_irqsave();
+      flags = spin_lock_irqsave(NULL);
       hciuart_enableints(config, UART_IM_TXIM);
-      spin_unlock_irqrestore(flags);
+      spin_unlock_irqrestore(NULL, flags);
     }
 
   return ntotal;
diff --git a/arch/or1k/src/common/up_modifyreg16.c b/arch/or1k/src/common/up_modifyreg16.c
index 618109f..06b71b4 100644
--- a/arch/or1k/src/common/up_modifyreg16.c
+++ b/arch/or1k/src/common/up_modifyreg16.c
@@ -64,10 +64,10 @@ void modifyreg16(unsigned int addr, uint16_t clearbits, uint16_t setbits)
   irqstate_t flags;
   uint16_t   regval;
 
-  flags   = spin_lock_irqsave();
+  flags   = spin_lock_irqsave(NULL);
   regval  = getreg16(addr);
   regval &= ~clearbits;
   regval |= setbits;
   putreg16(regval, addr);
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
diff --git a/arch/or1k/src/common/up_modifyreg32.c b/arch/or1k/src/common/up_modifyreg32.c
index 550aaf0..9244d50 100644
--- a/arch/or1k/src/common/up_modifyreg32.c
+++ b/arch/or1k/src/common/up_modifyreg32.c
@@ -64,10 +64,10 @@ void modifyreg32(unsigned int addr, uint32_t clearbits, uint32_t setbits)
   irqstate_t flags;
   uint32_t   regval;
 
-  flags   = spin_lock_irqsave();
+  flags   = spin_lock_irqsave(NULL);
   regval  = getreg32(addr);
   regval &= ~clearbits;
   regval |= setbits;
   putreg32(regval, addr);
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
diff --git a/arch/or1k/src/common/up_modifyreg8.c b/arch/or1k/src/common/up_modifyreg8.c
index ad6ecfd..d054604 100644
--- a/arch/or1k/src/common/up_modifyreg8.c
+++ b/arch/or1k/src/common/up_modifyreg8.c
@@ -64,10 +64,10 @@ void modifyreg8(unsigned int addr, uint8_t clearbits, uint8_t setbits)
   irqstate_t flags;
   uint8_t    regval;
 
-  flags   = spin_lock_irqsave();
+  flags   = spin_lock_irqsave(NULL);
   regval  = getreg8(addr);
   regval &= ~clearbits;
   regval |= setbits;
   putreg8(regval, addr);
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
diff --git a/arch/risc-v/src/bl602/bl602_timerisr.c b/arch/risc-v/src/bl602/bl602_timerisr.c
index f02b2ec..f889ca5 100644
--- a/arch/risc-v/src/bl602/bl602_timerisr.c
+++ b/arch/risc-v/src/bl602/bl602_timerisr.c
@@ -84,7 +84,7 @@ static inline void bl602_clint_time_cmp_write(uint64_t v)
 
 static void bl602_reload_mtimecmp(void)
 {
-  irqstate_t flags = spin_lock_irqsave();
+  irqstate_t flags = spin_lock_irqsave(NULL);
 
   uint64_t current;
   uint64_t next;
@@ -103,7 +103,7 @@ static void bl602_reload_mtimecmp(void)
 
   bl602_clint_time_cmp_write(next);
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
diff --git a/arch/risc-v/src/common/riscv_modifyreg32.c b/arch/risc-v/src/common/riscv_modifyreg32.c
index ee99893..c36a2da 100644
--- a/arch/risc-v/src/common/riscv_modifyreg32.c
+++ b/arch/risc-v/src/common/riscv_modifyreg32.c
@@ -64,10 +64,10 @@ void modifyreg32(uintptr_t addr, uint32_t clearbits, uint32_t setbits)
   irqstate_t flags;
   uint32_t   regval;
 
-  flags   = spin_lock_irqsave();
+  flags   = spin_lock_irqsave(NULL);
   regval  = getreg32(addr);
   regval &= ~clearbits;
   regval |= setbits;
   putreg32(regval, addr);
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
diff --git a/arch/risc-v/src/fe310/fe310_gpio.c b/arch/risc-v/src/fe310/fe310_gpio.c
index 938fce5..370fbb1 100644
--- a/arch/risc-v/src/fe310/fe310_gpio.c
+++ b/arch/risc-v/src/fe310/fe310_gpio.c
@@ -159,7 +159,7 @@ int fe310_gpio_config(uint16_t gpiocfg)
 
   uint32_t pin  = fe310_gpio_getpin(gpiocfg);
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
 
   /* Disable IOF for the pin to be used as GPIO */
 
@@ -194,7 +194,7 @@ int fe310_gpio_config(uint16_t gpiocfg)
         break;
     }
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 
   return ret;
 }
diff --git a/arch/risc-v/src/fe310/fe310_timerisr.c b/arch/risc-v/src/fe310/fe310_timerisr.c
index a888661..93d4536 100644
--- a/arch/risc-v/src/fe310/fe310_timerisr.c
+++ b/arch/risc-v/src/fe310/fe310_timerisr.c
@@ -80,7 +80,7 @@ static bool _b_tick_started = false;
 
 static void fe310_reload_mtimecmp(void)
 {
-  irqstate_t flags = spin_lock_irqsave();
+  irqstate_t flags = spin_lock_irqsave(NULL);
 
   uint64_t current;
   uint64_t next;
@@ -98,7 +98,7 @@ static void fe310_reload_mtimecmp(void)
   next = current + TICK_COUNT;
   putreg64(next, FE310_CLINT_MTIMECMP);
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
diff --git a/arch/risc-v/src/k210/k210_timerisr.c b/arch/risc-v/src/k210/k210_timerisr.c
index 57a1e2d..49f5867 100644
--- a/arch/risc-v/src/k210/k210_timerisr.c
+++ b/arch/risc-v/src/k210/k210_timerisr.c
@@ -80,7 +80,7 @@ static bool _b_tick_started = false;
 
 static void k210_reload_mtimecmp(void)
 {
-  irqstate_t flags = spin_lock_irqsave();
+  irqstate_t flags = spin_lock_irqsave(NULL);
 
   uint64_t current;
   uint64_t next;
@@ -100,7 +100,7 @@ static void k210_reload_mtimecmp(void)
 
   putreg64(next, K210_CLINT_MTIMECMP);
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
diff --git a/arch/risc-v/src/litex/litex_timerisr.c b/arch/risc-v/src/litex/litex_timerisr.c
index 396c3d3..1ec14d2 100644
--- a/arch/risc-v/src/litex/litex_timerisr.c
+++ b/arch/risc-v/src/litex/litex_timerisr.c
@@ -133,7 +133,7 @@ static inline void litex_clint_time_cmp_write(uint64_t v)
 
 static void litex_reload_mtimecmp(void)
 {
-  irqstate_t flags = spin_lock_irqsave();
+  irqstate_t flags = spin_lock_irqsave(NULL);
 
   uint64_t current;
   uint64_t next;
@@ -156,7 +156,7 @@ static void litex_reload_mtimecmp(void)
   csr_set(mie, MIE_MTIE);
   csr_clear(mip, MIP_MTIP);
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
diff --git a/arch/xtensa/src/esp32/esp32_himem.c b/arch/xtensa/src/esp32/esp32_himem.c
index 618b5d0..f48dc19 100644
--- a/arch/xtensa/src/esp32/esp32_himem.c
+++ b/arch/xtensa/src/esp32/esp32_himem.c
@@ -360,11 +360,11 @@ int esp_himem_alloc(size_t size, esp_himem_handle_t *handle_out)
       goto nomem;
     }
 
-  spinlock_flags = spin_lock_irqsave();
+  spinlock_flags = spin_lock_irqsave(NULL);
 
   ok = allocate_blocks(blocks, r->block);
 
-  spin_unlock_irqrestore(spinlock_flags);
+  spin_unlock_irqrestore(NULL, spinlock_flags);
   if (!ok)
     {
       goto nomem;
@@ -400,13 +400,13 @@ int esp_himem_free(esp_himem_handle_t handle)
 
   /* Mark blocks as free */
 
-  spinlock_flags = spin_lock_irqsave();
+  spinlock_flags = spin_lock_irqsave(NULL);
   for (i = 0; i < handle->block_ct; i++)
     {
       g_ram_descriptor[handle->block[i]].is_alloced = false;
     }
 
-  spin_unlock_irqrestore(spinlock_flags);
+  spin_unlock_irqrestore(NULL, spinlock_flags);
 
   /* Free handle */
 
@@ -442,7 +442,7 @@ int esp_himem_alloc_map_range(size_t size,
   r->block_start = -1;
 
   start_free = 0;
-  spinlock_flags = spin_lock_irqsave();
+  spinlock_flags = spin_lock_irqsave(NULL);
 
   for (i = 0; i < g_rangeblockcnt; i++)
     {
@@ -469,7 +469,7 @@ int esp_himem_alloc_map_range(size_t size,
       /* Couldn't find enough free blocks */
 
       free(r);
-      spin_unlock_irqrestore(spinlock_flags);
+      spin_unlock_irqrestore(NULL, spinlock_flags);
       return -ENOMEM;
     }
 
@@ -480,7 +480,7 @@ int esp_himem_alloc_map_range(size_t size,
       g_range_descriptor[r->block_start + i].is_alloced = 1;
     }
 
-  spin_unlock_irqrestore(spinlock_flags);
+  spin_unlock_irqrestore(NULL, spinlock_flags);
 
   /* All done. */
 
@@ -509,14 +509,14 @@ int esp_himem_free_map_range(esp_himem_rangehandle_t handle)
 
   /* We should be good to free this. Mark blocks as free. */
 
-  spinlock_flags = spin_lock_irqsave();
+  spinlock_flags = spin_lock_irqsave(NULL);
 
   for (i = 0; i < handle->block_ct; i++)
     {
       g_range_descriptor[i + handle->block_start].is_alloced = 0;
     }
 
-  spin_unlock_irqrestore(spinlock_flags);
+  spin_unlock_irqrestore(NULL, spinlock_flags);
   free(handle);
   return OK;
 }
@@ -572,7 +572,7 @@ int esp_himem_map(esp_himem_handle_t handle,
 
   /* Map and mark as mapped */
 
-  spinlock_flags = spin_lock_irqsave();
+  spinlock_flags = spin_lock_irqsave(NULL);
 
   for (i = 0; i < blockcount; i++)
     {
@@ -583,7 +583,7 @@ int esp_himem_map(esp_himem_handle_t handle,
                         handle->block[i + ram_block];
     }
 
-  spin_unlock_irqrestore(spinlock_flags);
+  spin_unlock_irqrestore(NULL, spinlock_flags);
 
   for (i = 0; i < blockcount; i++)
     {
@@ -624,7 +624,7 @@ int esp_himem_unmap(esp_himem_rangehandle_t range, void *ptr,
   HIMEM_CHECK(range_block + blockcount > range->block_ct,
               "range out of bounds for handle", -EINVAL);
 
-  spinlock_flags = spin_lock_irqsave();
+  spinlock_flags = spin_lock_irqsave(NULL);
 
   for (i = 0; i < blockcount; i++)
     {
@@ -637,7 +637,7 @@ int esp_himem_unmap(esp_himem_rangehandle_t range, void *ptr,
     }
 
   esp_spiram_writeback_cache();
-  spin_unlock_irqrestore(spinlock_flags);
+  spin_unlock_irqrestore(NULL, spinlock_flags);
   return OK;
 }
 
diff --git a/arch/xtensa/src/esp32/esp32_idle.c b/arch/xtensa/src/esp32/esp32_idle.c
index ca0d149..fc5eedb 100644
--- a/arch/xtensa/src/esp32/esp32_idle.c
+++ b/arch/xtensa/src/esp32/esp32_idle.c
@@ -88,7 +88,7 @@ static void up_idlepm(void)
 
   if (newstate != oldstate)
     {
-      flags = spin_lock_irqsave();
+      flags = spin_lock_irqsave(NULL);
 
       /* Perform board-specific, state-dependent logic here */
 
@@ -110,7 +110,7 @@ static void up_idlepm(void)
           oldstate = newstate;
         }
 
-      spin_unlock_irqrestore(flags);
+      spin_unlock_irqrestore(NULL, flags);
 
       /* MCU-specific power management logic */
 
diff --git a/arch/xtensa/src/esp32/esp32_spiram.c b/arch/xtensa/src/esp32/esp32_spiram.c
index bb41e00..326c9a1 100644
--- a/arch/xtensa/src/esp32/esp32_spiram.c
+++ b/arch/xtensa/src/esp32/esp32_spiram.c
@@ -190,7 +190,7 @@ unsigned int IRAM_ATTR cache_sram_mmu_set(int cpu_no, int pid,
    * the flash guards to make sure the cache is disabled.
    */
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
 
   spi_disable_cache(0, &statecpu0);
 
@@ -227,7 +227,7 @@ unsigned int IRAM_ATTR cache_sram_mmu_set(int cpu_no, int pid,
   spi_enable_cache(1, statecpu1);
 #endif
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
   return 0;
 }
 
diff --git a/boards/arm/imxrt/imxrt1020-evk/src/imxrt_ethernet.c b/boards/arm/imxrt/imxrt1020-evk/src/imxrt_ethernet.c
index d89299e..647ad81 100644
--- a/boards/arm/imxrt/imxrt1020-evk/src/imxrt_ethernet.c
+++ b/boards/arm/imxrt/imxrt1020-evk/src/imxrt_ethernet.c
@@ -247,7 +247,7 @@ int arch_phy_irq(FAR const char *intf, xcpt_t handler, void *arg,
    * following operations are atomic.
    */
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
 
   /* Configure the interrupt */
 
@@ -282,7 +282,7 @@ int arch_phy_irq(FAR const char *intf, xcpt_t handler, void *arg,
 
   /* Return the old handler (so that it can be restored) */
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
   return OK;
 }
 #endif /* GPIO_ENET_IRQ */
diff --git a/boards/arm/imxrt/imxrt1050-evk/src/imxrt_ethernet.c b/boards/arm/imxrt/imxrt1050-evk/src/imxrt_ethernet.c
index 98921de..6722627 100644
--- a/boards/arm/imxrt/imxrt1050-evk/src/imxrt_ethernet.c
+++ b/boards/arm/imxrt/imxrt1050-evk/src/imxrt_ethernet.c
@@ -255,7 +255,7 @@ int arch_phy_irq(FAR const char *intf, xcpt_t handler, void *arg,
    * following operations are atomic.
    */
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
 
   /* Configure the interrupt */
 
@@ -290,7 +290,7 @@ int arch_phy_irq(FAR const char *intf, xcpt_t handler, void *arg,
 
   /* Return the old handler (so that it can be restored) */
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
   return OK;
 }
 #endif /* CONFIG_IMXRT_GPIO1_0_15_IRQ */
diff --git a/boards/arm/imxrt/imxrt1060-evk/src/imxrt_ethernet.c b/boards/arm/imxrt/imxrt1060-evk/src/imxrt_ethernet.c
index b964649..639987d 100644
--- a/boards/arm/imxrt/imxrt1060-evk/src/imxrt_ethernet.c
+++ b/boards/arm/imxrt/imxrt1060-evk/src/imxrt_ethernet.c
@@ -248,7 +248,7 @@ int arch_phy_irq(FAR const char *intf, xcpt_t handler, void *arg,
    * following operations are atomic.
    */
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
 
   /* Configure the interrupt */
 
@@ -283,7 +283,7 @@ int arch_phy_irq(FAR const char *intf, xcpt_t handler, void *arg,
 
   /* Return the old handler (so that it can be restored) */
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
   return OK;
 }
 #endif /* CONFIG_IMXRT_GPIO1_0_15_IRQ */
diff --git a/boards/arm/imxrt/teensy-4.x/src/imxrt_ethernet.c b/boards/arm/imxrt/teensy-4.x/src/imxrt_ethernet.c
index 74d78f6..786738c 100644
--- a/boards/arm/imxrt/teensy-4.x/src/imxrt_ethernet.c
+++ b/boards/arm/imxrt/teensy-4.x/src/imxrt_ethernet.c
@@ -232,7 +232,7 @@ int arch_phy_irq(FAR const char *intf, xcpt_t handler, void *arg,
    * following operations are atomic.
    */
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
 
   /* Configure the interrupt */
 
@@ -267,7 +267,7 @@ int arch_phy_irq(FAR const char *intf, xcpt_t handler, void *arg,
 
   /* Return the old handler (so that it can be restored) */
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
   return OK;
 }
 #endif /* CONFIG_IMXRT_GPIO1_0_15_IRQ */
diff --git a/boards/arm/max326xx/max32660-evsys/src/max326_button.c b/boards/arm/max326xx/max32660-evsys/src/max326_button.c
index 1449f8d..fa31826 100644
--- a/boards/arm/max326xx/max32660-evsys/src/max326_button.c
+++ b/boards/arm/max326xx/max32660-evsys/src/max326_button.c
@@ -120,7 +120,7 @@ int board_button_irq(int id, xcpt_t irqhandler, FAR void *arg)
        * following operations are atomic.
        */
 
-      flags = spin_lock_irqsave();
+      flags = spin_lock_irqsave(NULL);
 
       /* Are we attaching or detaching? */
 
@@ -139,7 +139,7 @@ int board_button_irq(int id, xcpt_t irqhandler, FAR void *arg)
           irq_detach(BUTTON_IRQ);
         }
 
-      spin_unlock_irqrestore(flags);
+      spin_unlock_irqrestore(NULL, flags);
       ret = OK;
     }
 
diff --git a/boards/arm/stm32/stm32f4discovery/src/stm32_gs2200m.c b/boards/arm/stm32/stm32f4discovery/src/stm32_gs2200m.c
index 47e3151..bdd220a 100644
--- a/boards/arm/stm32/stm32f4discovery/src/stm32_gs2200m.c
+++ b/boards/arm/stm32/stm32f4discovery/src/stm32_gs2200m.c
@@ -103,7 +103,7 @@ static int gs2200m_irq_attach(xcpt_t handler, FAR void *arg)
 
 static void gs2200m_irq_enable(void)
 {
-  irqstate_t flags = spin_lock_irqsave();
+  irqstate_t flags = spin_lock_irqsave(NULL);
   uint32_t dready = 0;
 
   wlinfo("== ec:%" PRId32 " called=%" PRId32 " \n",
@@ -123,7 +123,7 @@ static void gs2200m_irq_enable(void)
 
   _enable_count++;
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 
   if (dready)
     {
@@ -140,7 +140,7 @@ static void gs2200m_irq_enable(void)
 
 static void gs2200m_irq_disable(void)
 {
-  irqstate_t flags = spin_lock_irqsave();
+  irqstate_t flags = spin_lock_irqsave(NULL);
 
   wlinfo("== ec:%" PRId32 " called=%" PRId32 " \n",
          _enable_count, _n_called++);
@@ -153,7 +153,7 @@ static void gs2200m_irq_disable(void)
                          false, NULL, NULL);
     }
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
@@ -162,7 +162,7 @@ static void gs2200m_irq_disable(void)
 
 static uint32_t gs2200m_dready(int *ec)
 {
-  irqstate_t flags = spin_lock_irqsave();
+  irqstate_t flags = spin_lock_irqsave(NULL);
 
   uint32_t r = stm32_gpioread(GPIO_GS2200M_INT);
 
@@ -173,7 +173,7 @@ static uint32_t gs2200m_dready(int *ec)
       *ec = _enable_count;
     }
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
   return r;
 }
 
diff --git a/drivers/audio/cxd56.c b/drivers/audio/cxd56.c
index da1abf3..aaf3308 100644
--- a/drivers/audio/cxd56.c
+++ b/drivers/audio/cxd56.c
@@ -1275,7 +1275,7 @@ static void _process_audio_with_src(cxd56_dmahandle_t hdl, uint16_t err_code)
 
   /* Trigger new DMA job */
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
 
   if (err_code == CXD56_AUDIO_ECODE_DMA_TRANS)
     {
@@ -1286,10 +1286,10 @@ static void _process_audio_with_src(cxd56_dmahandle_t hdl, uint16_t err_code)
         {
           msg.msg_id = AUDIO_MSG_STOP;
           msg.u.data = 0;
-          spin_unlock_irqrestore(flags);
+          spin_unlock_irqrestore(NULL, flags);
           ret = file_mq_send(&dev->mq, (FAR const char *)&msg,
                              sizeof(msg), CONFIG_CXD56_MSG_PRIO);
-          flags = spin_lock_irqsave();
+          flags = spin_lock_irqsave(NULL);
           if (ret != OK)
             {
               auderr("ERROR: file_mq_send to stop failed (%d)\n", ret);
@@ -1310,9 +1310,9 @@ static void _process_audio_with_src(cxd56_dmahandle_t hdl, uint16_t err_code)
           struct ap_buffer_s *apb;
 
           apb = dq_get(&dev->up_runq);
-          spin_unlock_irqrestore(flags);
+          spin_unlock_irqrestore(NULL, flags);
           dev->dev.upper(dev->dev.priv, AUDIO_CALLBACK_DEQUEUE, apb, OK);
-          flags = spin_lock_irqsave();
+          flags = spin_lock_irqsave(NULL);
 
           /* End of data? */
 
@@ -1320,10 +1320,10 @@ static void _process_audio_with_src(cxd56_dmahandle_t hdl, uint16_t err_code)
             {
               msg.msg_id = AUDIO_MSG_STOP;
               msg.u.data = 0;
-              spin_unlock_irqrestore(flags);
+              spin_unlock_irqrestore(NULL, flags);
               ret = file_mq_send(&dev->mq, (FAR const char *)&msg,
                                  sizeof(msg), CONFIG_CXD56_MSG_PRIO);
-              flags = spin_lock_irqsave();
+              flags = spin_lock_irqsave(NULL);
               if (ret != OK)
                 {
                   auderr("ERROR: file_mq_send to stop failed (%d)\n", ret);
@@ -1340,17 +1340,17 @@ static void _process_audio_with_src(cxd56_dmahandle_t hdl, uint16_t err_code)
 
       msg.msg_id = AUDIO_MSG_DATA_REQUEST;
       msg.u.data = 0;
-      spin_unlock_irqrestore(flags);
+      spin_unlock_irqrestore(NULL, flags);
       ret = file_mq_send(&dev->mq, (FAR const char *) &msg,
                          sizeof(msg), CONFIG_CXD56_MSG_PRIO);
-      flags = spin_lock_irqsave();
+      flags = spin_lock_irqsave(NULL);
       if (ret != OK)
         {
           auderr("ERROR: file_mq_send to request failed (%d)\n", ret);
         }
     }
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 #else
@@ -1365,19 +1365,19 @@ static void _process_audio(cxd56_dmahandle_t hdl, uint16_t err_code)
 
   /* Trigger new DMA job */
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
 
   if (dq_count(&dev->up_runq) > 0)
     {
       FAR struct ap_buffer_s *apb;
 
       apb = (struct ap_buffer_s *) dq_get(&dev->up_runq);
-      spin_unlock_irqrestore(flags);
+      spin_unlock_irqrestore(NULL, flags);
       dev->dev.upper(dev->dev.priv, AUDIO_CALLBACK_DEQUEUE, apb, OK);
-      flags = spin_lock_irqsave();
+      flags = spin_lock_irqsave(NULL);
     }
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 
   if (err_code == CXD56_AUDIO_ECODE_DMA_TRANS)
     {
@@ -3177,7 +3177,7 @@ static int cxd56_start_dma(FAR struct cxd56_dev_s *dev)
   uint32_t size;
   int ret = OK;
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
 #ifdef CONFIG_AUDIO_CXD56_SRC
   FAR struct ap_buffer_s *src_apb;
 
@@ -3190,9 +3190,9 @@ static int cxd56_start_dma(FAR struct cxd56_dev_s *dev)
 
       audwarn("Underrun \n");
 
-      spin_unlock_irqrestore(flags);
+      spin_unlock_irqrestore(NULL, flags);
       ret = cxd56_stop_dma(dev);
-      flags = spin_lock_irqsave();
+      flags = spin_lock_irqsave(NULL);
       audwarn("STOP DMA due to underrun \n");
       if (ret != CXD56_AUDIO_ECODE_OK)
         {
@@ -3259,9 +3259,9 @@ static int cxd56_start_dma(FAR struct cxd56_dev_s *dev)
             {
               /* Turn on amplifier */
 
-              spin_unlock_irqrestore(flags);
+              spin_unlock_irqrestore(NULL, flags);
               board_external_amp_mute_control(false);
-              flags = spin_lock_irqsave();
+              flags = spin_lock_irqsave(NULL);
 
               /* Mask interrupts */
 
@@ -3377,10 +3377,10 @@ static int cxd56_start_dma(FAR struct cxd56_dev_s *dev)
               msg.msg_id = AUDIO_MSG_STOP;
               msg.u.data = 0;
 
-              spin_unlock_irqrestore(flags);
+              spin_unlock_irqrestore(NULL, flags);
               ret = file_mq_send(&dev->mq, (FAR const char *)&msg,
                                  sizeof(msg), CONFIG_CXD56_MSG_PRIO);
-              flags = spin_lock_irqsave();
+              flags = spin_lock_irqsave(NULL);
 
               if (ret != OK)
                 {
@@ -3393,7 +3393,7 @@ static int cxd56_start_dma(FAR struct cxd56_dev_s *dev)
     }
 
 exit:
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 
   return ret;
 }
@@ -3422,12 +3422,12 @@ static int cxd56_enqueuebuffer(FAR struct audio_lowerhalf_s *lower,
   else
     {
 #endif
-      flags = spin_lock_irqsave();
+      flags = spin_lock_irqsave(NULL);
 
       apb->dq_entry.flink = NULL;
       dq_put(&priv->up_pendq, &apb->dq_entry);
 
-      spin_unlock_irqrestore(flags);
+      spin_unlock_irqrestore(NULL, flags);
 
       if (priv->mq.f_inode != NULL)
         {
diff --git a/drivers/audio/cxd56_src.c b/drivers/audio/cxd56_src.c
index f32effe..2c3f14a 100644
--- a/drivers/audio/cxd56_src.c
+++ b/drivers/audio/cxd56_src.c
@@ -115,18 +115,18 @@ static struct ap_buffer_s *cxd56_src_get_apb()
   struct ap_buffer_s *src_apb;
   irqstate_t flags;
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
 
   if (dq_count(g_src.inq) == 0)
     {
       size_t bufsize = sizeof(struct ap_buffer_s) +
                               CONFIG_CXD56_AUDIO_BUFFER_SIZE;
 
-      spin_unlock_irqrestore(flags);
+      spin_unlock_irqrestore(NULL, flags);
 
       src_apb = kmm_zalloc(bufsize);
 
-      flags = spin_lock_irqsave();
+      flags = spin_lock_irqsave(NULL);
 
       if (!src_apb)
         {
@@ -148,7 +148,7 @@ static struct ap_buffer_s *cxd56_src_get_apb()
 
 errorout_with_lock:
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 
   return src_apb;
 }
@@ -186,9 +186,9 @@ static int cxd56_src_process(FAR struct ap_buffer_s *apb)
       src_apb->nbytes = apb->nbytes;
       src_apb->flags |= AUDIO_APB_SRC_FINAL;
 
-      flags = spin_lock_irqsave();
+      flags = spin_lock_irqsave(NULL);
       dq_put(g_src.outq, &src_apb->dq_entry);
-      spin_unlock_irqrestore(flags);
+      spin_unlock_irqrestore(NULL, flags);
 
       goto exit;
     }
@@ -290,9 +290,9 @@ static int cxd56_src_process(FAR struct ap_buffer_s *apb)
 
               /* Put in out queue to be DMA'd */
 
-              flags = spin_lock_irqsave();
+              flags = spin_lock_irqsave(NULL);
               dq_put(g_src.outq, &src_apb->dq_entry);
-              spin_unlock_irqrestore(flags);
+              spin_unlock_irqrestore(NULL, flags);
 
 #ifdef DUMP_DATA
               write(dump_file_post, src_apb->samp, src_apb->nbytes);
@@ -321,9 +321,9 @@ static int cxd56_src_process(FAR struct ap_buffer_s *apb)
 
           src_apb->nbytes += g_src.bytewidth * src_nframes * g_src.channels;
 
-          flags = spin_lock_irqsave();
+          flags = spin_lock_irqsave(NULL);
           dq_put_back(g_src.inq, &src_apb->dq_entry);
-          spin_unlock_irqrestore(flags);
+          spin_unlock_irqrestore(NULL, flags);
 
           apb->curbyte += (float_in_left * g_src.bytewidth);
         }
diff --git a/drivers/audio/wm8776.c b/drivers/audio/wm8776.c
index 53dadc1..5b97766 100644
--- a/drivers/audio/wm8776.c
+++ b/drivers/audio/wm8776.c
@@ -547,7 +547,7 @@ static void  wm8776_senddone(FAR struct i2s_dev_s *i2s,
    * against that possibility.
    */
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
 
   /* Add the completed buffer to the end of our doneq.  We do not yet
    * decrement the reference count.
@@ -565,7 +565,7 @@ static void  wm8776_senddone(FAR struct i2s_dev_s *i2s,
   /* REVISIT:  This can be overwritten */
 
   priv->result = result;
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 
   /* Now send a message to the worker thread, informing it that there are
    * buffers in the done queue that need to be cleaned up.
@@ -600,13 +600,13 @@ static void wm8776_returnbuffers(FAR struct wm8776_dev_s *priv)
    * use interrupt controls to protect against that possibility.
    */
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
   while (dq_peek(&priv->doneq) != NULL)
     {
       /* Take the next buffer from the queue of completed transfers */
 
       apb = (FAR struct ap_buffer_s *)dq_remfirst(&priv->doneq);
-      spin_unlock_irqrestore(flags);
+      spin_unlock_irqrestore(NULL, flags);
 
       audinfo("Returning: apb=%p curbyte=%d nbytes=%d flags=%04x\n",
               apb, apb->curbyte, apb->nbytes, apb->flags);
@@ -641,10 +641,10 @@ static void wm8776_returnbuffers(FAR struct wm8776_dev_s *priv)
 #else
       priv->dev.upper(priv->dev.priv, AUDIO_CALLBACK_DEQUEUE, apb, OK);
 #endif
-      flags = spin_lock_irqsave();
+      flags = spin_lock_irqsave(NULL);
     }
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
@@ -697,9 +697,9 @@ static int wm8776_sendbuffer(FAR struct wm8776_dev_s *priv)
        * to avoid a possible race condition.
        */
 
-      flags = spin_lock_irqsave();
+      flags = spin_lock_irqsave(NULL);
       priv->inflight++;
-      spin_unlock_irqrestore(flags);
+      spin_unlock_irqrestore(NULL, flags);
 
       shift  = (priv->bpsamp == 8) ? 14 - 3 : 14 - 4;
       shift -= (priv->nchannels > 1) ? 1 : 0;
diff --git a/drivers/i2c/i2c_bitbang.c b/drivers/i2c/i2c_bitbang.c
index 65e4542..5f9a029 100644
--- a/drivers/i2c/i2c_bitbang.c
+++ b/drivers/i2c/i2c_bitbang.c
@@ -110,7 +110,7 @@ static int i2c_bitbang_transfer(FAR struct i2c_master_s *dev,
 
   /* Lock to enforce timings */
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
 
   for (i = 0; i < count; i++)
     {
@@ -239,7 +239,7 @@ out:
   i2c_bitbang_set_scl(priv, true, false);
   i2c_bitbang_set_sda(priv, true);
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 
   return ret;
 }
diff --git a/drivers/ioexpander/gpio.c b/drivers/ioexpander/gpio.c
index 4b17d55..7a7f7a1 100644
--- a/drivers/ioexpander/gpio.c
+++ b/drivers/ioexpander/gpio.c
@@ -394,7 +394,7 @@ static int gpio_ioctl(FAR struct file *filep, int cmd, unsigned long arg)
         if (arg && dev->gp_pintype >= GPIO_INTERRUPT_PIN)
           {
             pid = getpid();
-            flags = spin_lock_irqsave();
+            flags = spin_lock_irqsave(NULL);
             for (i = 0; i < CONFIG_DEV_GPIO_NSIGNALS; i++)
               {
                 FAR struct gpio_signal_s *signal = &dev->gp_signals[i];
@@ -409,7 +409,7 @@ static int gpio_ioctl(FAR struct file *filep, int cmd, unsigned long arg)
                   }
               }
 
-            spin_unlock_irqrestore(flags);
+            spin_unlock_irqrestore(NULL, flags);
 
             if (i == 0)
               {
@@ -444,7 +444,7 @@ static int gpio_ioctl(FAR struct file *filep, int cmd, unsigned long arg)
         if (dev->gp_pintype >= GPIO_INTERRUPT_PIN)
           {
             pid = getpid();
-            flags = spin_lock_irqsave();
+            flags = spin_lock_irqsave(NULL);
             for (i = 0; i < CONFIG_DEV_GPIO_NSIGNALS; i++)
               {
                 if (pid == dev->gp_signals[i].gp_pid)
@@ -470,7 +470,7 @@ static int gpio_ioctl(FAR struct file *filep, int cmd, unsigned long arg)
                   }
                 }
 
-            spin_unlock_irqrestore(flags);
+            spin_unlock_irqrestore(NULL, flags);
 
             if (i == 0 && j == 0)
               {
diff --git a/drivers/wireless/bluetooth/bt_uart_shim.c b/drivers/wireless/bluetooth/bt_uart_shim.c
index a52d174..85671cd 100644
--- a/drivers/wireless/bluetooth/bt_uart_shim.c
+++ b/drivers/wireless/bluetooth/bt_uart_shim.c
@@ -136,7 +136,7 @@ hciuart_rxattach(FAR const struct btuart_lowerhalf_s *lower,
 
   /* If the callback is NULL, then we are detaching */
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
   if (callback == NULL)
     {
       /* Disable Rx callbacks and detach the Rx callback */
@@ -153,7 +153,7 @@ hciuart_rxattach(FAR const struct btuart_lowerhalf_s *lower,
       state->callback = callback;
     }
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
@@ -175,7 +175,7 @@ static void hciuart_rxenable(FAR const struct btuart_lowerhalf_s *lower,
   FAR struct hciuart_config_s *config = (FAR struct hciuart_config_s *)lower;
   FAR struct hciuart_state_s *s = &config->state;
 
-  irqstate_t flags = spin_lock_irqsave();
+  irqstate_t flags = spin_lock_irqsave(NULL);
   if (enable != s->enabled)
     {
       wlinfo(enable ? "Enable\n" : "Disable\n");
@@ -183,7 +183,7 @@ static void hciuart_rxenable(FAR const struct btuart_lowerhalf_s *lower,
 
   s->enabled = enable;
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
diff --git a/include/nuttx/irq.h b/include/nuttx/irq.h
index 22ff1af..c5758b0 100644
--- a/include/nuttx/irq.h
+++ b/include/nuttx/irq.h
@@ -32,6 +32,7 @@
 # include <assert.h>
 # ifdef CONFIG_SMP
 #  include <stdbool.h>
+#  include <nuttx/spinlock.h>
 # endif
 #endif
 
@@ -274,30 +275,38 @@ void leave_critical_section(irqstate_t flags);
  *
  * Description:
  *   If SMP is are enabled:
- *     Disable local interrupts and take the global spinlock (g_irq_spin)
+ *     If the argument lock is not specified (i.e. NULL),
+ *     disable local interrupts and take the global spinlock (g_irq_spin)
  *     if the call counter (g_irq_spin_count[cpu]) equals to 0. Then the
- *     counter on the CPU is increment to allow nested call.
+ *     counter on the CPU is increment to allow nested call and return
+ *     the interrupt state.
+ *
+ *     If the argument lock is specified,
+ *     disable local interrupts and take the lock spinlock and return
+ *     the interrupt state.
  *
  *     NOTE: This API is very simple to protect data (e.g. H/W register
  *     or internal data structure) in SMP mode. But do not use this API
  *     with kernel APIs which suspend a caller thread. (e.g. nxsem_wait)
  *
  *   If SMP is not enabled:
- *     This function is equivalent to enter_critical_section().
+ *     This function is equivalent to up_irq_save().
  *
  * Input Parameters:
- *   None
+ *   lock - Caller specific spinlock. If specified NULL, g_irq_spin is used
+ *          and can be nested. Otherwise, nested call for the same lock
+ *          would cause a deadlock
  *
  * Returned Value:
  *   An opaque, architecture-specific value that represents the state of
- *   the interrupts prior to the call to spin_lock_irqsave();
+ *   the interrupts prior to the call to spin_lock_irqsave(lock);
  *
  ****************************************************************************/
 
 #if defined(CONFIG_SMP)
-irqstate_t spin_lock_irqsave(void);
+irqstate_t spin_lock_irqsave(spinlock_t *lock);
 #else
-#  define spin_lock_irqsave() enter_critical_section()
+#  define spin_lock_irqsave(l) up_irq_save()
 #endif
 
 /****************************************************************************
@@ -305,17 +314,24 @@ irqstate_t spin_lock_irqsave(void);
  *
  * Description:
  *   If SMP is enabled:
- *     Decrement the call counter (g_irq_spin_count[cpu]) and if it
+ *     If the argument lock is not specified (i.e. NULL),
+ *     decrement the call counter (g_irq_spin_count[cpu]) and if it
  *     decrements to zero then release the spinlock (g_irq_spin) and
  *     restore the interrupt state as it was prior to the previous call to
- *     spin_lock_irqsave().
+ *     spin_lock_irqsave(NULL).
+ *
+ *     If the argument lock is specified, release the the lock and
+ *     restore the interrupt state as it was prior to the previous call to
+ *     spin_lock_irqsave(lock).
  *
  *   If SMP is not enabled:
- *     This function is equivalent to leave_critical_section().
+ *     This function is equivalent to up_irq_restore().
  *
  * Input Parameters:
+ *   lock - Caller specific spinlock. If specified NULL, g_irq_spin is used.
+ *
  *   flags - The architecture-specific value that represents the state of
- *           the interrupts prior to the call to spin_lock_irqsave();
+ *           the interrupts prior to the call to spin_lock_irqsave(lock);
  *
  * Returned Value:
  *   None
@@ -323,9 +339,9 @@ irqstate_t spin_lock_irqsave(void);
  ****************************************************************************/
 
 #if defined(CONFIG_SMP)
-void spin_unlock_irqrestore(irqstate_t flags);
+void spin_unlock_irqrestore(spinlock_t *lock, irqstate_t flags);
 #else
-#  define spin_unlock_irqrestore(f) leave_critical_section(f)
+#  define spin_unlock_irqrestore(l, f) up_irq_restore(f)
 #endif
 
 #undef EXTERN
diff --git a/sched/clock/clock_gettime.c b/sched/clock/clock_gettime.c
index d350862..0c2ef34 100644
--- a/sched/clock/clock_gettime.c
+++ b/sched/clock/clock_gettime.c
@@ -126,12 +126,12 @@ int clock_gettime(clockid_t clock_id, struct timespec *tp)
            * was last set, this gives us the current time.
            */
 
-          flags = spin_lock_irqsave();
+          flags = spin_lock_irqsave(NULL);
 
           ts.tv_sec  += (uint32_t)g_basetime.tv_sec;
           ts.tv_nsec += (uint32_t)g_basetime.tv_nsec;
 
-          spin_unlock_irqrestore(flags);
+          spin_unlock_irqrestore(NULL, flags);
 
           /* Handle carry to seconds. */
 
diff --git a/sched/group/group_exitinfo.c b/sched/group/group_exitinfo.c
index 885833d..fc9a07e 100644
--- a/sched/group/group_exitinfo.c
+++ b/sched/group/group_exitinfo.c
@@ -82,14 +82,14 @@ int group_exitinfo(pid_t pid, FAR struct binary_s *bininfo)
   irqstate_t flags;
 
   DEBUGASSERT(bininfo != NULL);
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
 
   /* Get the TCB associated with the PID */
 
   tcb = nxsched_get_tcb(pid);
   if (tcb == NULL)
     {
-      spin_unlock_irqrestore(flags);
+      spin_unlock_irqrestore(NULL, flags);
       return -ESRCH;
     }
 
@@ -102,7 +102,7 @@ int group_exitinfo(pid_t pid, FAR struct binary_s *bininfo)
 
   group->tg_bininfo = bininfo;
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
   return OK;
 }
 
diff --git a/sched/group/group_tlsalloc.c b/sched/group/group_tlsalloc.c
index 3aff908..ef4a7d5 100644
--- a/sched/group/group_tlsalloc.c
+++ b/sched/group/group_tlsalloc.c
@@ -69,7 +69,7 @@ int tls_alloc(void)
    * avoid concurrent modification of the group TLS index set.
    */
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
   for (candidate = 0; candidate < CONFIG_TLS_NELEM; candidate++)
     {
       /* Is this candidate index available? */
@@ -84,7 +84,7 @@ int tls_alloc(void)
         }
     }
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 
   /* Check if found a valid TLS data index. */
 
diff --git a/sched/group/group_tlsfree.c b/sched/group/group_tlsfree.c
index 7f95c30..f07f68f 100644
--- a/sched/group/group_tlsfree.c
+++ b/sched/group/group_tlsfree.c
@@ -73,11 +73,11 @@ int tls_free(int tlsindex)
        */
 
       mask  = (1 << tlsindex);
-      flags = spin_lock_irqsave();
+      flags = spin_lock_irqsave(NULL);
 
       DEBUGASSERT((group->tg_tlsset & mask) != 0);
       group->tg_tlsset &= ~mask;
-      spin_unlock_irqrestore(flags);
+      spin_unlock_irqrestore(NULL, flags);
 
       ret = OK;
     }
diff --git a/sched/irq/irq_spinlock.c b/sched/irq/irq_spinlock.c
index 10b0560..060d068 100644
--- a/sched/irq/irq_spinlock.c
+++ b/sched/irq/irq_spinlock.c
@@ -53,39 +53,55 @@ static volatile uint8_t g_irq_spin_count[CONFIG_SMP_NCPUS];
  *
  * Description:
  *   If SMP is enabled:
- *     Disable local interrupts and take the global spinlock (g_irq_spin)
+ *     If the argument lock is not specified (i.e. NULL),
+ *     disable local interrupts and take the global spinlock (g_irq_spin)
  *     if the call counter (g_irq_spin_count[cpu]) equals to 0. Then the
- *     counter on the CPU is increment to allow nested call.
+ *     counter on the CPU is increment to allow nested call and return
+ *     the interrupt state.
+ *
+ *     If the argument lock is specified,
+ *     disable local interrupts and take the lock spinlock and return
+ *     the interrupt state.
  *
  *     NOTE: This API is very simple to protect data (e.g. H/W register
  *     or internal data structure) in SMP mode. But do not use this API
  *     with kernel APIs which suspend a caller thread. (e.g. nxsem_wait)
  *
  *   If SMP is not enabled:
- *     This function is equivalent to enter_critical_section().
+ *     This function is equivalent to up_irq_save().
  *
  * Input Parameters:
- *   None
+ *   lock - Caller specific spinlock. If specified NULL, g_irq_spin is used
+ *          and can be nested. Otherwise, nested call for the same lock
+ *          would cause a deadlock
  *
  * Returned Value:
  *   An opaque, architecture-specific value that represents the state of
- *   the interrupts prior to the call to spin_lock_irqsave();
+ *   the interrupts prior to the call to spin_lock_irqsave(lock);
  *
  ****************************************************************************/
 
-irqstate_t spin_lock_irqsave(void)
+irqstate_t spin_lock_irqsave(spinlock_t *lock)
 {
   irqstate_t ret;
   ret = up_irq_save();
 
-  int me = this_cpu();
-  if (0 == g_irq_spin_count[me])
+  if (NULL == lock)
+    {
+      int me = this_cpu();
+      if (0 == g_irq_spin_count[me])
+        {
+          spin_lock(&g_irq_spin);
+        }
+
+      g_irq_spin_count[me]++;
+      DEBUGASSERT(0 != g_irq_spin_count[me]);
+    }
+  else
     {
-      spin_lock(&g_irq_spin);
+      spin_lock(lock);
     }
 
-  g_irq_spin_count[me]++;
-  DEBUGASSERT(0 != g_irq_spin_count[me]);
   return ret;
 }
 
@@ -94,33 +110,47 @@ irqstate_t spin_lock_irqsave(void)
  *
  * Description:
  *   If SMP is enabled:
- *     Decrement the call counter (g_irq_spin_count[cpu]) and if it
+ *     If the argument lock is not specified (i.e. NULL),
+ *     decrement the call counter (g_irq_spin_count[cpu]) and if it
  *     decrements to zero then release the spinlock (g_irq_spin) and
  *     restore the interrupt state as it was prior to the previous call to
- *     spin_lock_irqsave().
+ *     spin_lock_irqsave(NULL).
+ *
+ *     If the argument lock is specified, release the the lock and
+ *     restore the interrupt state as it was prior to the previous call to
+ *     spin_lock_irqsave(lock).
  *
  *   If SMP is not enabled:
- *     This function is equivalent to leave_critical_section().
+ *     This function is equivalent to up_irq_restore().
  *
  * Input Parameters:
+ *   lock - Caller specific spinlock. If specified NULL, g_irq_spin is used.
+ *
  *   flags - The architecture-specific value that represents the state of
- *           the interrupts prior to the call to spin_lock_irqsave();
+ *           the interrupts prior to the call to spin_lock_irqsave(lock);
  *
  * Returned Value:
  *   None
  *
  ****************************************************************************/
 
-void spin_unlock_irqrestore(irqstate_t flags)
+void spin_unlock_irqrestore(spinlock_t *lock, irqstate_t flags)
 {
   int me = this_cpu();
 
-  DEBUGASSERT(0 < g_irq_spin_count[me]);
-  g_irq_spin_count[me]--;
+  if (NULL == lock)
+    {
+      DEBUGASSERT(0 < g_irq_spin_count[me]);
+      g_irq_spin_count[me]--;
 
-  if (0 == g_irq_spin_count[me])
+      if (0 == g_irq_spin_count[me])
+        {
+          spin_unlock(&g_irq_spin);
+        }
+    }
+  else
     {
-      spin_unlock(&g_irq_spin);
+      spin_unlock(lock);
     }
 
   up_irq_restore(flags);
diff --git a/sched/signal/sig_default.c b/sched/signal/sig_default.c
index f3b06b6..15d4771 100644
--- a/sched/signal/sig_default.c
+++ b/sched/signal/sig_default.c
@@ -534,9 +534,9 @@ _sa_handler_t nxsig_default(FAR struct tcb_s *tcb, int signo, bool defaction)
         {
           /* nxsig_addset() is not atomic (but neither is sigaction()) */
 
-          flags = spin_lock_irqsave();
+          flags = spin_lock_irqsave(NULL);
           nxsig_addset(&group->tg_sigdefault, signo);
-          spin_unlock_irqrestore(flags);
+          spin_unlock_irqrestore(NULL, flags);
         }
     }
 
@@ -546,9 +546,9 @@ _sa_handler_t nxsig_default(FAR struct tcb_s *tcb, int signo, bool defaction)
        * atomic (but neither is sigaction()).
        */
 
-      flags = spin_lock_irqsave();
+      flags = spin_lock_irqsave(NULL);
       nxsig_delset(&group->tg_sigdefault, signo);
-      spin_unlock_irqrestore(flags);
+      spin_unlock_irqrestore(NULL, flags);
     }
 
   return handler;
diff --git a/wireless/bluetooth/bt_atomic.c b/wireless/bluetooth/bt_atomic.c
index ae392e7..40ae3c7 100644
--- a/wireless/bluetooth/bt_atomic.c
+++ b/wireless/bluetooth/bt_atomic.c
@@ -52,10 +52,10 @@ bt_atomic_t bt_atomic_incr(FAR bt_atomic_t *ptr)
   irqstate_t flags;
   bt_atomic_t value;
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
   value = *ptr;
   *ptr  = value + 1;
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 
   return value;
 }
@@ -65,10 +65,10 @@ bt_atomic_t bt_atomic_decr(FAR bt_atomic_t *ptr)
   irqstate_t flags;
   bt_atomic_t value;
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
   value = *ptr;
   *ptr  = value - 1;
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 
   return value;
 }
@@ -78,10 +78,10 @@ bt_atomic_t bt_atomic_setbit(FAR bt_atomic_t *ptr, bt_atomic_t bitno)
   irqstate_t flags;
   bt_atomic_t value;
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
   value = *ptr;
   *ptr  = value | (1 << bitno);
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 
   return value;
 }
@@ -91,10 +91,10 @@ bt_atomic_t bt_atomic_clrbit(FAR bt_atomic_t *ptr, bt_atomic_t bitno)
   irqstate_t flags;
   bt_atomic_t value;
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
   value = *ptr;
   *ptr  = value & ~(1 << bitno);
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 
   return value;
 }
@@ -104,10 +104,10 @@ bool bt_atomic_testsetbit(FAR bt_atomic_t *ptr, bt_atomic_t bitno)
   irqstate_t flags;
   bt_atomic_t value;
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
   value = *ptr;
   *ptr  = value | (1 << bitno);
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 
   return (value & (1 << bitno)) != 0;
 }
@@ -117,10 +117,10 @@ bool bt_atomic_testclrbit(FAR bt_atomic_t *ptr, bt_atomic_t bitno)
   irqstate_t flags;
   bt_atomic_t value;
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
   value = *ptr;
   *ptr  = value & ~(1 << bitno);
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 
   return (value & (1 << bitno)) != 0;
 }
diff --git a/wireless/bluetooth/bt_buf.c b/wireless/bluetooth/bt_buf.c
index 26cdc83..e4f0992 100644
--- a/wireless/bluetooth/bt_buf.c
+++ b/wireless/bluetooth/bt_buf.c
@@ -243,7 +243,7 @@ FAR struct bt_buf_s *bt_buf_alloc(enum bt_buf_type_e type,
    * then try the list of messages reserved for interrupt handlers
    */
 
-  flags = spin_lock_irqsave(); /* Always necessary in SMP mode */
+  flags = spin_lock_irqsave(NULL); /* Always necessary in SMP mode */
   if (up_interrupt_context())
     {
 #if CONFIG_BLUETOOTH_BUFFER_PREALLOC > CONFIG_BLUETOOTH_BUFFER_IRQRESERVE
@@ -254,7 +254,7 @@ FAR struct bt_buf_s *bt_buf_alloc(enum bt_buf_type_e type,
           buf            = g_buf_free;
           g_buf_free     = buf->flink;
 
-          spin_unlock_irqrestore(flags);
+          spin_unlock_irqrestore(NULL, flags);
           pool           = POOL_BUFFER_GENERAL;
         }
       else
@@ -267,13 +267,13 @@ FAR struct bt_buf_s *bt_buf_alloc(enum bt_buf_type_e type,
           buf            = g_buf_free_irq;
           g_buf_free_irq = buf->flink;
 
-          spin_unlock_irqrestore(flags);
+          spin_unlock_irqrestore(NULL, flags);
           pool           = POOL_BUFFER_IRQ;
         }
       else
 #endif
         {
-          spin_unlock_irqrestore(flags);
+          spin_unlock_irqrestore(NULL, flags);
           return NULL;
         }
     }
@@ -290,7 +290,7 @@ FAR struct bt_buf_s *bt_buf_alloc(enum bt_buf_type_e type,
           buf           = g_buf_free;
           g_buf_free    = buf->flink;
 
-          spin_unlock_irqrestore(flags);
+          spin_unlock_irqrestore(NULL, flags);
           pool          = POOL_BUFFER_GENERAL;
         }
       else
@@ -300,7 +300,7 @@ FAR struct bt_buf_s *bt_buf_alloc(enum bt_buf_type_e type,
            * will have to allocate one from the kernel memory pool.
            */
 
-          spin_unlock_irqrestore(flags);
+          spin_unlock_irqrestore(NULL, flags);
           buf = (FAR struct bt_buf_s *)
                     kmm_malloc((sizeof (struct bt_buf_s)));
 
@@ -430,10 +430,10 @@ void bt_buf_release(FAR struct bt_buf_s *buf)
        * list from interrupt handlers.
        */
 
-      flags      = spin_lock_irqsave();
+      flags      = spin_lock_irqsave(NULL);
       buf->flink = g_buf_free;
       g_buf_free = buf;
-      spin_unlock_irqrestore(flags);
+      spin_unlock_irqrestore(NULL, flags);
     }
   else
 #endif
@@ -449,10 +449,10 @@ void bt_buf_release(FAR struct bt_buf_s *buf)
        * list from interrupt handlers.
        */
 
-      flags          = spin_lock_irqsave();
+      flags          = spin_lock_irqsave(NULL);
       buf->flink     = g_buf_free_irq;
       g_buf_free_irq = buf;
-      spin_unlock_irqrestore(flags);
+      spin_unlock_irqrestore(NULL, flags);
     }
   else
 #endif
diff --git a/wireless/bluetooth/bt_hcicore.c b/wireless/bluetooth/bt_hcicore.c
index 787a568..23a6111 100644
--- a/wireless/bluetooth/bt_hcicore.c
+++ b/wireless/bluetooth/bt_hcicore.c
@@ -143,7 +143,7 @@ static void bt_enqueue_bufwork(FAR struct bt_bufferlist_s *list,
 {
   irqstate_t flags;
 
-  flags      = spin_lock_irqsave();
+  flags      = spin_lock_irqsave(NULL);
   buf->flink = list->head;
   if (list->head == NULL)
     {
@@ -151,7 +151,7 @@ static void bt_enqueue_bufwork(FAR struct bt_bufferlist_s *list,
     }
 
   list->head = buf;
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
 }
 
 /****************************************************************************
@@ -176,7 +176,7 @@ static FAR struct bt_buf_s *
   FAR struct bt_buf_s *buf;
   irqstate_t flags;
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
   buf   = list->tail;
   if (buf != NULL)
     {
@@ -205,7 +205,7 @@ static FAR struct bt_buf_s *
       buf->flink = NULL;
     }
 
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
   return buf;
 }
 
diff --git a/wireless/bluetooth/bt_netdev.c b/wireless/bluetooth/bt_netdev.c
index cb834ad..ca7e744 100644
--- a/wireless/bluetooth/bt_netdev.c
+++ b/wireless/bluetooth/bt_netdev.c
@@ -808,7 +808,7 @@ static int btnet_ifdown(FAR struct net_driver_s *netdev)
 
   /* Disable interruption */
 
-  flags = spin_lock_irqsave();
+  flags = spin_lock_irqsave(NULL);
 
   /* Cancel the TX poll timer and TX timeout timers */
 
@@ -822,7 +822,7 @@ static int btnet_ifdown(FAR struct net_driver_s *netdev)
   /* Mark the device "down" */
 
   priv->bd_bifup = false;
-  spin_unlock_irqrestore(flags);
+  spin_unlock_irqrestore(NULL, flags);
   return OK;
 }