通过函数注释我们看到了当抢占发生在读临界区以内,会将被抢占的进程记录在rcu_node的gp_tasks成员中,若此进程是当前GP下第一个被抢占的进程则使用blkd_tasks成员指向它。挂在gp_tasks链表中的进程当执行rcu_read_unlock()时会自己把自己从gp_tasks链表中删除。 可抢占RCU和不可抢占RCU的判断渡过静止态的区别就在...
static struct task_struct *rcu_exp_par_gp_task(struct rcu_node *rnp) @@ -4450,7 +4450,7 @@ static void __init rcu_start_exp_gp_kworker(void) } if (IS_ENABLED(CONFIG_RCU_EXP_KTHREAD)) sched_setscheduler_nocheck(rcu_exp_gp_kworker->task, SCHED_FIFO, ¶m); sched_setscheduler_...
queue_work_on(cpu, rcu_par_gp_wq, &rnp->rew.rew_work); rnp->exp_need_flush = true; } /* Wait for workqueue jobs (if any) to complete. */ rcu_for_each_leaf_node(rnp) if (rnp->exp_need_flush) flush_work(&rnp->rew.rew_work); ...
[19249.003575] rcu_gp_kthread+0x4a0/0xa10[19249.007397] kthread+0x140/0x160[19249.010611] ret_from_fork+0x10/0x34[19311.929662] rcu: INFO: rcu_preempt detected stalls on CPUs/tasks:[19311.935738] rcu: 1-...!: (0 ticks this GP) idle=b8e/1/0x4000000000000000 soft...
1756-PAR2 OMC139 2711-K5A5L11 9WSEG30-003 IC695CPE305 8LSA25R0060D000-0 3500/05-01-02-00-00-00 0608750113 HMS01.1N-W0070-A-07-NNNN 1394-AM07 PMC422FP T8846 BENNING 46393 1746SC-CTR8 VT3015 SBS-6AH SLIO 01 A06B-6141-H015#H580 D CCN 01 TPMC815-11 LXN1604-6 3BHL000986P70...
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx- Latency: 0, Cache Line Size: 32 bytes Interrupt: pin A routed to IRQ 25 Region 0: Memory at b0220000 (64-bit, non-prefetchable) [size=128K] ...
queue_work_on(cpu, rcu_par_gp_wq, &rnp->rew.rew_work); rnp->exp_need_flush = true; } /* Wait for workqueue jobs (if any) to complete. */ rcu_for_each_leaf_node(rnp) if (rnp->exp_need_flush) flush_work(&rnp->rew.rew_work); ...