idle->pid, idle->comm);/* must be idle task! */}rcu_sched_qs(0);/* implies rcu_bh_qsctr_inc(0) */} 开发者ID:openube,项目名称:android_kernel_sony_c2305,代码行数:21,代码来源:rcutiny.c 示例5: rcu_idle_enter_common ▲点赞 1▼ /* Common code for rcu_idle_enter() and rcu_...
rcu_sched_qs() rcu_bh_qs() rcu_preempt_qs() 我们再进一步跟踪这几个函数,就可以对不同flavor检测QS的过程进行梳理。 定时检查 在sched_timer的中断中会调用rcu_check_callbacks()函数,如果发生中断的时刻cpu正在运行用户态代码或者是从内核中的idleloop,则认为此CPU不在读临界区,sched和bh类型的RCU都上报QS...
rcu_sched/rcu_bh类型的RCU中,当检测CPU处于用户模式或处于idle线程中,说明当前CPU已经离开了临界区,经历了一个QS静止状态,对于rcu_bh的RCU,如果没有出去softirq上下文中,也表明CPU经历了QS静止状态; 在rcu_pending满足条件的情况下,触发软中断的执行,rcu_process_callbacks将会被调用; 在rcu_process_callbacks回调函...
*/voidrcu_sched_qs(void){unsignedlongflags; local_irq_save(flags); mutant_covered =1;/* MUTANT (rep_op) */if(rcu_qsctr_help(&rcu_sched_ctrlblk) -rcu_qsctr_help(&rcu_bh_ctrlblk)) raise_softirq(RCU_SOFTIRQ); local_irq_restore(flags); } 开发者ID:agroce,项目名称:cbmcmutate,代码行...
rcu_bh_qs(cpu); } rcu_preempt_check_callbacks(cpu); if (rcu_pending(cpu)) invoke_rcu_core(); ... } 这里补充一个细节说明,Tree RCU有多个类型的RCU State,用于不同的RCU场景,包括rcu_sched_state、rcu_bh_state和rcu_preempt_state。不同的场景使用不同的RCU API,度过宽限期的方式就有所区别。
例如上面代码中的rcu_sched_qs和rcu_bh_qs,就是为了标记不同的state度过quiescent state。普通的RCU例如内核线程、系统调用等场景,使用rcu_read_lock或者rcu_read_lock_sched,他们的实现是一样的;软中断上下文则可以使用rcu_read_lock_bh,使得宽限期更快度过。
rcu_sched/rcu_bh类型的RCU中,当检测CPU处于用户模式或处于idle线程中,说明当前CPU已经离开了临界区,经历了一个QS静止状态,对于rcu_bh的RCU,如果没有出去softirq上下文中,也表明CPU经历了QS静止状态; 在rcu_pending满足条件的情况下,触发软中断的执行,rcu_process_callbacks将会被调用; ...
rcu_sched/rcu_bh类型的RCU中,当检测CPU处于用户模式或处于idle线程中,说明当前CPU已经离开了临界区,经历了一个QS静止状态,对于rcu_bh的RCU,如果没有出去softirq上下文中,也表明CPU经历了QS静止状态; 在rcu_pending满足条件的情况下,触发软中断的执行,rcu_process_callbacks将会被调用; ...
call_rcu_func_t call; //指向特定RCU类型的call_rcu函数:call_rcu_sched, call_rcu_bh等 int ncpus; // 处理器数量 unsigned long gpnum; //当前宽限期编号,gpnum > completed,表明正处在宽限期内 unsigned long completed; //上一个结束的宽限期编号,如果与gpnum相等,表明RCU空闲 ...
CPU通过检测QS状态。RCU中代表CPU状态的数据类型是rcu_data。在rcu_data定义中,有两个成员变量对QS检测至关重要。跟踪这些变量,我们能了解不同flavor的检测过程。定时检查在sched_timer中断中调用rcu_check_callbacks()函数,判断CPU是否在读临界区。对于调度和基本中断类型的RCU,若中断时刻CPU处于用户态...