summaryrefslogtreecommitdiff
path: root/src/irq.c
diff options
context:
space:
mode:
authorShell <[email protected]>2024-01-09 23:09:49 +0800
committerGitHub <[email protected]>2024-01-09 23:09:49 +0800
commitcc157baf23b3757b1741ca06da4bad45b5ff8ddc (patch)
tree70f9e8e36b4d9eb988978eb0fb8ff1113add269a /src/irq.c
parentacaa23052f2d24de5cc5c389014ed8a8513e7311 (diff)
[kernel] fixup of data racing accessing percpu objects (#8475)
Signed-off-by: Shell <[email protected]>
Diffstat (limited to 'src/irq.c')
-rw-r--r--src/irq.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/irq.c b/src/irq.c
index 03287200cf..fb5a50275a 100644
--- a/src/irq.c
+++ b/src/irq.c
@@ -13,6 +13,7 @@
* 2022-01-07 Gabriel Moving __on_rt_xxxxx_hook to irq.c
* 2022-07-04 Yunjie fix RT_DEBUG_LOG
* 2023-09-15 xqyjlj perf rt_hw_interrupt_disable/enable
+ * 2024-01-05 Shell Fixup of data racing in rt_interrupt_get_nest
*/
#include <rthw.h>
@@ -114,7 +115,13 @@ RTM_EXPORT(rt_interrupt_leave);
*/
rt_weak rt_uint8_t rt_interrupt_get_nest(void)
{
- return rt_atomic_load(&rt_interrupt_nest);
+ rt_uint8_t ret;
+ rt_base_t level;
+
+ level = rt_hw_local_irq_disable();
+ ret = rt_atomic_load(&rt_interrupt_nest);
+ rt_hw_local_irq_enable(level);
+ return ret;
}
RTM_EXPORT(rt_interrupt_get_nest);