From d5d4006c6b88f2c856d888a107f443832ecc77b1 Mon Sep 17 00:00:00 2001 From: Xiang Xiao Date: Sat, 21 Oct 2023 17:20:02 +0800 Subject: [PATCH] mm/gran: Replace the critical section with spin lock Base on discusion: https://github.com/apache/nuttx/issues/10981 Signed-off-by: Xiang Xiao --- mm/mm_gran/mm_gran.h | 2 ++ mm/mm_gran/mm_grancritical.c | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/mm/mm_gran/mm_gran.h b/mm/mm_gran/mm_gran.h index 3ef67916d3..5840d9682f 100644 --- a/mm/mm_gran/mm_gran.h +++ b/mm/mm_gran/mm_gran.h @@ -32,6 +32,7 @@ #include #include #include +#include /**************************************************************************** * Pre-processor Definitions @@ -68,6 +69,7 @@ struct gran_s uint16_t ngranules; /* The total number of (aligned) granules in the heap */ #ifdef CONFIG_GRAN_INTR irqstate_t irqstate; /* For exclusive access to the GAT */ + spinlock_t lock; #else mutex_t lock; /* For exclusive access to the GAT */ #endif diff --git a/mm/mm_gran/mm_grancritical.c b/mm/mm_gran/mm_grancritical.c index 5a99a89a6d..0b988ecd07 100644 --- a/mm/mm_gran/mm_grancritical.c +++ b/mm/mm_gran/mm_grancritical.c @@ -57,7 +57,7 @@ int gran_enter_critical(FAR struct gran_s *priv) { #ifdef CONFIG_GRAN_INTR - priv->irqstate = enter_critical_section(); + priv->irqstate = spin_lock_irqsave(&priv->lock); return OK; #else return nxmutex_lock(&priv->lock); @@ -67,7 +67,7 @@ int gran_enter_critical(FAR struct gran_s *priv) void gran_leave_critical(FAR struct gran_s *priv) { #ifdef CONFIG_GRAN_INTR - leave_critical_section(priv->irqstate); + spin_unlock_irqrestore(&priv->lock, priv->irqstate); #else nxmutex_unlock(&priv->lock); #endif