这两个宏相对于local_irq_disable和local_irq_enable最大的区别在于,local_irq_save会在关闭中断前,将处理器当前的标志位保持在一个unsigned long flags中,在调用local_irq_restore时,在将保存的flags恢复到处理器的FLAGS寄存器中。这样做是为了防止在一个关闭中断的环境中因为调用local_irq_disable和local_irq_enabl...
413 void disable_irq(unsigned int irq) 414 { 415 if (!__disable_irq_nosync(irq)) 416 synchronize_irq(irq); 417 } 372 static int __disable_irq_nosync(unsigned int irq) 373 { 374 unsigned long flags; 375 struct irq_desc *desc = irq_get_desc_buslock(irq, &flags, IRQ_GET_DESC_ ...
do_div(idle_time, NSEC_PER_USEC);/* Update device last_residency*/dev->last_residency = (int)idle_time;/* Tell the scheduler how much we idled: */sched_clock_idle_wakeup_event(idle_time_ns);local_irq_enable();if(cx->entry_method != ACPI_CSTATE_FFH) current_thread_info()->statu...
这两个宏相对于local_irq_disable和local_irq_enable最大的区别在于,local_irq_save会在关闭中断前,将处理器当前的标志位保持在一个unsigned long flags中,在调用local_irq_restore时,在将保存的flags恢复到处理器的FLAGS寄存器中。这样做是为了防止在一个关闭中断的环境中因为调用local_irq_disable和local_irq_enabl...
ARM64 linux kernel中local_irq_disable()、local_irq_enable()的原理,程序员大本营,技术文章内容聚合第一站。
local_irq_enable宏用于打开本地处理器的中断,local_irq_disable宏则用来关闭本处理器的中断。这两个宏的定义如下:Linux/include/linux/irqflags.h59#definelocal_irq_enable()\60do{trace_hardirqs_on();raw_local_irq_enable();}while(0)61#definelocal_irq_disable()\62do{raw_local_irq_disable();trace...
第一个版本将local_irq_save保存的flags状态值恢复, 而local_irq_enable无条件打开中断. 与 disable_irq不同, local_irq_disable不会维护对多次的调用的跟踪。 如果调用链中有多个函数需要禁止中断, 应该使用local_irq_save. 在2.6内核, 没有方法全局禁用整个系统的所有中断。 内核开发者认为关闭所有中断的代价太...
local_irq_disable的功能是屏蔽当前CPU上的所有中断,通过操作arm核心中的寄存器来屏蔽到达CPU上的中断,此时中断控制器中所有送往该CPU上的中断信号都将被忽略。 Kernel/arch/arm/include/asm/irqflag.h staticinlinevoidarch_local_irq_disable(void){asmvolatile(" cpsid i @ arch_local_irq_disable": ...
local_irq_disable的功能是屏蔽当前CPU上的所有中断,通过操作arm核心中的寄存器来屏蔽到达CPU上的中断,此时中断控制器中所有送往该CPU上的中断信号都将被忽略。 Kernel/arch/arm/include/asm/irqflag.h 代码语言:javascript 复制 staticinlinevoidarch_local_irq_disable(void){asmvolatile(" cpsid i @ arch_local_...
voidlocal_irq_enable(void); 第一个版本将local_irq_save保存的flags状态值恢复, 而local_irq_enable无条件打开中断. 与 disable_irq不同, local_irq_disable不会维护对多次的调用的跟踪。 如果调用链中有多个函数需要禁止中断, 应该使用local_irq_save. ...