local_irq_disable

本文探讨了Linux内核中的local_irq_disable函数,重点关注了当CONFIG_TRACE_IRQFLAGS_SUPPORT配置启用时,如何通过<arch/arm/include/asm/irqflags.h>文件中的raw_local_irq_disable来禁用中断。主要适用于ARM架构的V5及以下版本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[Author: Bo Shen <voice.shen@gmail.com>]

[Linux kernel: git: 0c0bd34]


<include/linux/irqflags.h>

local_irq_disable

如果定义CONFIG_TRACE_IRQFLAGS_SUPPORT

 91 #define local_irq_disable() \
 92         do { raw_local_irq_disable(); trace_hardirqs_off(); } while (0)

如果没有定义CONFIG_TRACE_IRQFLAGS_SUPPORT

137 #define local_irq_disable()     do { raw_local_irq_disable(); } while (0)

下面分析raw_local_irq_disable

 59 #define raw_local_irq_disable()         arch_local_irq_disable()

对于ARM芯片来说,如果芯片使用的架构是 V6或以上,则使用下面语句。

<arch/arm/include/asm/irqflags.h>

 43 static inline void arch_local_irq_disable(void)
 44 {
 45         asm volatile(
 46                 "       cpsid i                 @ arch_local_irq_disable"
 47                 :
 48                 :
 49                 : "memory", "cc");
 50 }

如果ARM芯片使用的架构是V5及以下,使用下面语句。

 91 static inline void arch_local_irq_disable(void)
 92 {
 93         unsigned long temp;
 94         asm volatile(
 95                 "       mrs     %0, cpsr        @ arch_local_irq_disable\n"
 96                 "       orr     %0, %0, #128\n"
 97                 "       msr     cpsr_c, %0"
 98                 : "=r" (temp)
 99                 :
100                 : "memory", "cc");
101 }



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值