summaryrefslogtreecommitdiff
path: root/src/irq.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/irq.c')
-rw-r--r--src/irq.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/irq.c b/src/irq.c
index 72d220bd92..ee03204819 100644
--- a/src/irq.c
+++ b/src/irq.c
@@ -8,6 +8,7 @@
* 2006-02-24 Bernard first version
* 2006-05-03 Bernard add IRQ_DEBUG
* 2016-08-09 ArdaFu add interrupt enter and leave hook.
+ * 2018-11-22 Jesven rt_interrupt_get_nest function add disable irq
*/
#include <rthw.h>
@@ -48,7 +49,11 @@ void rt_interrupt_leave_sethook(void (*hook)(void))
/**@{*/
+#ifdef RT_USING_SMP
+#define rt_interrupt_nest rt_cpu_self()->irq_nest
+#else
volatile rt_uint8_t rt_interrupt_nest;
+#endif
/**
* This function will be invoked by BSP, when enter interrupt service routine
@@ -102,7 +107,13 @@ RTM_EXPORT(rt_interrupt_leave);
*/
rt_uint8_t rt_interrupt_get_nest(void)
{
- return rt_interrupt_nest;
+ rt_uint8_t ret;
+ rt_base_t level;
+
+ level = rt_hw_interrupt_disable();
+ ret = rt_interrupt_nest;
+ rt_hw_interrupt_enable(level);
+ return ret;
}
RTM_EXPORT(rt_interrupt_get_nest);