函数逻辑报告

Linux Kernel

v5.5.9

Brick Technologies Co., Ltd

Source Code:kernel\rcu\tree.c Create Date:2022-07-27 11:26:13
Last Modify:2020-03-12 14:18:49 Copyright©Brick
首页 函数Tree
注解内核,赢得工具下载SCCTEnglish

函数名称:Return true if the specified CPU has passed through a quiescent* state by virtue of being in or having passed through an dynticks* idle state since the last call to dyntick_save_progress_counter()* for this same CPU, or by virtue of having been offline.

函数原型:static int rcu_implicit_dynticks_qs(struct rcu_data *rdp)

返回类型:int

参数:

类型参数名称
struct rcu_data *rdp
1026  rnp等于This CPU's leaf of hierarchy
1036  如果Return true if the CPU corresponding to the specified rcu_data* structure has spent some time in an extended quiescent state since* rcu_dynticks_snap() returned the specified snapshot.
1037  trace_rcu_fqs(Name of structure. , Track rsp->rcu_gp_seq counter. , cpu, Strings used in tracepoints need to be exported via the* tracing system such that tools like perf and trace-cmd can* translate the string address pointers to actual text.("dti"))
1038  We are reporting a quiescent state on behalf of some other CPU, so* it is our responsibility to check for and handle potential overflow* of the rcu_node ->gp_seq counter with respect to the rcu_data counters
1039  返回:1
1043  如果非Mask to apply to leaf qsmask. 按位与Compute the mask of online CPUs for the specified rcu_node structure.* This will not be stable unless the rcu_node structure's ->lock is* held, but the bit corresponding to the current CPU will be stable* in most contexts.的值且These inlines deal with timer wrapping correctly. You are * strongly encouraged to use them* 1. Because people otherwise forget* 2. Because if the timer wrap changes in future you won't have to* alter your driver code.(jiffies, Time at which GP started, + HZ)则
1048  WARN_ON(1)
1049  打印信息("%s: grp: %d-%d level: %d ->gp_seq %ld ->completedqs %ld\n", __func__, lowest-numbered CPU or group here. , highest-numbered CPU or group here. , is at level 0. , (long)Track rsp->rcu_gp_seq. , (long)All QSes done for this node. )
1052 rnp1循环打印信息("%s: %d:%d ->qsmask %#lx ->qsmaskinit %#lx ->qsmaskinitnext %#lx ->rcu_gp_init_mask %#lx\n", __func__, lowest-numbered CPU or group here. , highest-numbered CPU or group here. , CPUs or groups that need to switch in , qsmaskinit, ginning of each grace period. , Mask of offline CPUs at GP init. )
1055  onl等于非非Mask to apply to leaf qsmask. 按位与Compute the mask of online CPUs for the specified rcu_node structure.* This will not be stable unless the rcu_node structure's ->lock is* held, but the bit corresponding to the current CPU will be stable* in most contexts.的值
1056  打印信息("%s %d: %c online: %ld(%d) offline: %ld(%d)\n", __func__, cpu, ".o"[onl], (long)->gp_seq at last online. , ->gp_flags at last online. , (long)->gp_seq at last offline. , ->gp_flags at last offline. )
1060  返回:1
1074  jtsq等于READ_ONCE(See adjust_jiffies_till_sched_qs(). )
1075  ruqp等于per_cpu_ptr( & rcu_urgent_qs, cpu)
1076  rnhqp等于per_cpu(rcu_need_heavy_qs, cpu)
1077  如果非READ_ONCE( * rnhqp)且These inlines deal with timer wrapping correctly. You are * strongly encouraged to use them* 1. Because people otherwise forget* 2. Because if the timer wrap changes in future you won't have to* alter your driver code.(jiffies, Time at which GP started, + jtsq * 2)或These inlines deal with timer wrapping correctly. You are * strongly encouraged to use them* 1. Because people otherwise forget* 2. Because if the timer wrap changes in future you won't have to* alter your driver code.(jiffies, Time at which to resched )的值则
1080  WRITE_ONCE( * rnhqp, true)
1082  smp_store_release(ruqp, true)
1083  否则如果These inlines deal with timer wrapping correctly. You are * strongly encouraged to use them* 1. Because people otherwise forget* 2. Because if the timer wrap changes in future you won't have to* alter your driver code.(jiffies, Time at which GP started, + jtsq)则
1084  WRITE_ONCE( * ruqp, true)
1095  如果tick_nohz_full_cpu(cpu)且These inlines deal with timer wrapping correctly. You are * strongly encouraged to use them* 1. Because people otherwise forget* 2. Because if the timer wrap changes in future you won't have to* alter your driver code.(jiffies, READ_ONCE(Time of last rcu_resched(). ) + jtsq * 3)则
1098  WRITE_ONCE( * ruqp, true)
1099  resched_cpu(cpu)
1100  WRITE_ONCE(Time of last rcu_resched(). , jiffies)
1110  如果These inlines deal with timer wrapping correctly. You are * strongly encouraged to use them* 1. Because people otherwise forget* 2. Because if the timer wrap changes in future you won't have to* alter your driver code.(jiffies, Time at which to resched )则
1113  resched_cpu(cpu)
1120  Is ->rcu_iw pending? = true
1126  返回:0