diff --git a/arch/arm/src/imx9/imx9_edma.c b/arch/arm/src/imx9/imx9_edma.c index c045c120a92..c6efff7b3a2 100644 --- a/arch/arm/src/imx9/imx9_edma.c +++ b/arch/arm/src/imx9/imx9_edma.c @@ -548,12 +548,12 @@ static void imx9_dmaterminate(struct imx9_dmach_s *dmach, int result) dmach->arg = NULL; dmach->state = IMX9_DMA_IDLE; + spin_unlock_irqrestore_nopreempt(&g_edma.lock, flags); + if (callback) { callback((DMACH_HANDLE)dmach, arg, true, result); } - - spin_unlock_irqrestore_nopreempt(&g_edma.lock, flags); } /**************************************************************************** diff --git a/arch/arm64/src/imx9/imx9_edma.c b/arch/arm64/src/imx9/imx9_edma.c index af85d41dafa..08327f5d092 100644 --- a/arch/arm64/src/imx9/imx9_edma.c +++ b/arch/arm64/src/imx9/imx9_edma.c @@ -499,12 +499,12 @@ static void imx9_dmaterminate(struct imx9_dmach_s *dmach, int result) dmach->arg = NULL; dmach->state = IMX9_DMA_IDLE; + spin_unlock_irqrestore_nopreempt(&g_edma.lock, flags); + if (callback) { callback((DMACH_HANDLE)dmach, arg, true, result); } - - spin_unlock_irqrestore_nopreempt(&g_edma.lock, flags); } /****************************************************************************