You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by ac...@apache.org on 2022/02/03 14:09:26 UTC

[incubator-nuttx] 02/03: arch/arm: correct the sched_lock/spin_lock handling

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

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

commit ed4f852073ca71e53de785d3a8e082c382de03bb
Author: chao.an <an...@xiaomi.com>
AuthorDate: Thu Feb 3 15:29:14 2022 +0800

    arch/arm: correct the sched_lock/spin_lock handling
    
    Signed-off-by: chao.an <an...@xiaomi.com>
---
 arch/arm/src/imxrt/imxrt_hprtc.c                   | 1 +
 arch/arm/src/sama5/sam_hsmci.c                     | 1 +
 arch/arm/src/samv7/sam_hsmci.c                     | 1 +
 boards/arm/cxd56xx/drivers/audio/cxd56_audio_dma.c | 2 ++
 4 files changed, 5 insertions(+)

diff --git a/arch/arm/src/imxrt/imxrt_hprtc.c b/arch/arm/src/imxrt/imxrt_hprtc.c
index d686156..fccfe84 100644
--- a/arch/arm/src/imxrt/imxrt_hprtc.c
+++ b/arch/arm/src/imxrt/imxrt_hprtc.c
@@ -538,6 +538,7 @@ int imxrt_hprtc_setalarm(FAR struct timespec *ts, hprtc_alarm_callback_t cb)
   if ((uint32_t)ts->tv_sec <= now)
     {
       rtcwarn("WARNING: time is in the past\n");
+      spin_unlock_irqrestore(NULL, flags);
       return -EINVAL;
     }
 
diff --git a/arch/arm/src/sama5/sam_hsmci.c b/arch/arm/src/sama5/sam_hsmci.c
index 3a8d6d7..852cae8 100644
--- a/arch/arm/src/sama5/sam_hsmci.c
+++ b/arch/arm/src/sama5/sam_hsmci.c
@@ -2261,6 +2261,7 @@ static int sam_sendsetup(FAR struct sdio_dev_s *dev,
 
           lcderr("ERROR: sr %08" PRIx32 "\n", sr);
           leave_critical_section(flags);
+          sched_unlock();
           return -EIO;
         }
       else if ((sr & HSMCI_INT_TXRDY) != 0)
diff --git a/arch/arm/src/samv7/sam_hsmci.c b/arch/arm/src/samv7/sam_hsmci.c
index 1e2bda1..ddc0068 100644
--- a/arch/arm/src/samv7/sam_hsmci.c
+++ b/arch/arm/src/samv7/sam_hsmci.c
@@ -2249,6 +2249,7 @@ static int sam_sendsetup(FAR struct sdio_dev_s *dev,
 
           mcerr("ERROR: sr %08" PRIx32 "\n", sr);
           leave_critical_section(flags);
+          sched_unlock();
           return -EIO;
         }
       else if ((sr & HSMCI_INT_TXRDY) != 0)
diff --git a/boards/arm/cxd56xx/drivers/audio/cxd56_audio_dma.c b/boards/arm/cxd56xx/drivers/audio/cxd56_audio_dma.c
index d0fe9c6..e128d93 100644
--- a/boards/arm/cxd56xx/drivers/audio/cxd56_audio_dma.c
+++ b/boards/arm/cxd56xx/drivers/audio/cxd56_audio_dma.c
@@ -237,6 +237,8 @@ static CXD56_AUDIO_ECODE exec_dma_ch_sync_workaround(
 
       if (timeout_cnt == DMA_TIMEOUT_CNT)
         {
+          sched_unlock();
+          up_irq_enable();
           return CXD56_AUDIO_ECODE_DMA_SMP_TIMEOUT;
         }