From ed4f852073ca71e53de785d3a8e082c382de03bb Mon Sep 17 00:00:00 2001 From: "chao.an" Date: Thu, 3 Feb 2022 15:29:14 +0800 Subject: [PATCH] arch/arm: correct the sched_lock/spin_lock handling Signed-off-by: chao.an --- 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 d6861562b34..fccfe848cc1 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 3a8d6d71390..852cae83d9e 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 1e2bda1b51c..ddc0068ed27 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 d0fe9c68d00..e128d932aed 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; }