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