void__rcu_irq_enter_check_tick(void); #else staticinlinevoid__rcu_irq_enter_check_tick(void) { } #endif staticinlinevoidrcu_nmi_exit(void) static__always_inlinevoidrcu_irq_enter_check_tick(void) { if(context_tracking_enabled())
rcu_bh_qsctr_inc(cpu); } h++; pending >>= 1; } while (pending); //关CPU 中断 local_irq_disable(); pending = local_softirq_pending(); //在规定次数内,如果有新的软中断了,可以继续在这里处理完 if (pending && --max_restart) goto restart; //依然有没有处理完的软中断,为了提高系统...
/* Make sure that timer wheel updates are propagated */ rcu_irq_exit(); if (idle_cpu(smp_processor_id()) && !in_interrupt() && !need_resched()) tick_nohz_stop_sched_tick(0); #endif preempt_enable_no_resched(); } 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14....
irq_enter()和irq_exit()函数分别用于标记ISR的进入和退出,具体的标记方法请参考介绍preempt_count()的这篇文章。 而generic_handle_irq()函数,实际就是回调IRQ之前安装的第一级处理函数(desc->handle_irq)。 void generic_handle_irq_desc(struct irq_desc *desc) { //执行第一级处理函数 desc->handle_irq...
irq_enter /** Enter an interrupt context.*/voidirq_enter(void){ rcu_irq_enter(); if (is_idle_task(current) && !in_interrupt()) { /* * Prevent raise_softirq from needlessl... kernel 原创 sunlei0625 2023-06-05 13:48:10 54阅读 ...
lockdep_irq_work_enter(work); //默认不使能CONFIG_TRACE_IRQFLAGS,为空函数 /* 处理irq_work的回调函数,参数是irq_work本身 */ work->func(work); lockdep_irq_work_exit(work); //默认不使能CONFIG_TRACE_IRQFLAGS,为空函数s #if IS_ENABLED(CONFIG_MY_IRQ_MONITOR_DEBUG) ...
.exit_rcu = false, }; if (user_mode(regs)) { /* 从用户模式进入中断 */ // irqentry_enter_from_user_mode(regs); return ret; } /* 空闲任务中的中断 */ // if (is_idle_task(current)) { if (false) { arch_local_irq_disable(); ret.exit_rcu = true; return ret; } arch_local...
rcu_init(); tick_nohz_init(); radix_tree_init();/*init some links before init_ISA_irqs()*/early_irq_init();init_IRQ(); tick_init(); init_timers(); hrtimers_init(); softirq_init(); timekeeping_init(); time_init(); profile_init(); ...
<idle>-0 3dn.3 1623us : rcu_irq_exit <-cpu_pm_pmu_setup <idle>-0 3dn.3 1627us : rcu_eqs_enter_common.isra.46 <-rcu_irq_exit <idle>-0 3dn.3 1629us : rcu_irq_enter <-cpu_pm_pmu_setup <idle>-0 3dn.3 1632us : rcu_eqs_exit_common.isra.48 <-rcu_irq_enter <idle>...
6 @@ void irqentry_enter_from_user_mode(struct pt_regs *regs); > */ > void irqentry_exit_to_user_mode(struct pt_regs *regs); > > -#ifndef irqentry_state > -/** > - * struct irqentry_state - Opaque object for exception state storage > - * @exit_rcu: Used exclusively in ...