Function report

Linux Kernel

v5.5.9

Brick Technologies Co., Ltd

Source Code:kernel\rcu\tree.c Create Date:2022-07-28 10:25:51
Last Modify:2020-03-12 14:18:49 Copyright©Brick
home page Tree
Annotation kernel can get tool activityDownload SCCTChinese

Name: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.

Proto:static int rcu_implicit_dynticks_qs(struct rcu_data *rdp)

Type:int

Parameter:

TypeParameterName
struct rcu_data *rdp
1026  rnp = This CPU's leaf of hierarchy
1036  If 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. Then
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  Return 1
1043  If Not (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) Then
1048  WARN_ON(1)
1049  pr_info("%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  When rnp1 cycle pr_info("%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 = Not Not (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  pr_info("%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  Return 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  If Not 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 )) Then
1080  WRITE_ONCE( * rnhqp, true)
1082  smp_store_release(ruqp, true)
1083  Else if 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) Then
1084  WRITE_ONCE( * ruqp, true)
1095  If 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) Then
1098  WRITE_ONCE( * ruqp, true)
1099  resched_cpu(cpu)
1100  WRITE_ONCE(Time of last rcu_resched(). , jiffies)
1110  If 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 ) Then
1113  resched_cpu(cpu)
1120  Is ->rcu_iw pending? = true
1126  Return 0