函数逻辑报告

Linux Kernel

v5.5.9

Brick Technologies Co., Ltd

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

函数名称:Invoke any RCU callbacks that have made it to the end of their grace* period. Thottle as specified by rdp->blimit.

函数原型:static void rcu_do_batch(struct rcu_data *rdp)

返回类型:void

参数:

类型参数名称
struct rcu_data *rdp
2140  offloaded等于IS_ENABLED(CONFIG_FOO) evaluates to 1 if CONFIG_FOO is set to 'y' or 'm',* 0 otherwise.(CONFIG_RCU_NOCB_CPU)且Is the specified rcu_segcblist offloaded?
2143  rcl等于RCU_CBLIST_INITIALIZER(rcl)
2145  tlimit等于0
2148  如果非Does the specified rcu_segcblist structure contain callbacks that* are ready to be invoked?
2149  Tracepoint for marking the beginning rcu_do_batch, performed to start* RCU callback invocation
2152  Tracepoint for exiting rcu_do_batch after RCU callbacks have been* invoked
2156  返回
2164  local_irq_save(flags)
2165  rcu_nocb_lock(rdp)
2166  WARN_ON_ONCE(cpu_is_offline(当前cpu ID()))
2167  pending等于Return number of callbacks in segmented callback list.
2168  bl等于两数取大(Upper limit on a processed batch , pending >> rcu_divisor)
2169  如果此条件成立可能性小(为编译器优化)(bl > 100)则tlimit等于local_clock()加Force an exit from rcu_do_batch() after 3 milliseconds.
2171  Tracepoint for marking the beginning rcu_do_batch, performed to start* RCU callback invocation
2174  rcu_segcblist_extract_done_cbs( & Segmented callback list, with , & rcl)
2175  如果offloadeddifferent grace periods. 等于Return number of callbacks in segmented callback list.
2177  rcu_nocb_unlock_irqrestore(rdp, flags)
2180  tick_dep_set_task(当前进程, TICK_DEP_BIT_RCU)
2181  rhp等于rcu_cblist_dequeue( & rcl)
2182 rhp循环
2183  debug_rcu_head_unqueue(rhp)
2184  如果Reclaim the specified callback, either by invoking it (non-lazy case)* or freeing it directly (lazy case). Return true if lazy, false otherwise.Account for the fact that a previously dequeued callback turned out* to be marked as lazy.
2190  如果负len大于等于bl且非offloadedneed_resched()或非是空闲任务且非rcu_is_callbacks_kthread()的值则退出
2196  如果此条件成立可能性大(为编译器优化)(( - len & 31) || local_clock() < tlimit)则继续下一循环
2199  退出
2201  如果offloaded
2203  local_bh_enable()
2207  local_bh_disable()
2211  local_irq_save(flags)
2212  rcu_nocb_lock(rdp)
2213  count等于负len
2214  Tracepoint for exiting rcu_do_batch after RCU callbacks have been* invoked
2218  rcu_segcblist_insert_done_cbs( & Segmented callback list, with , & rcl)
2219  smp_mb()
2220  rcu_segcblist_insert_count( & Segmented callback list, with , & rcl)
2223  count等于Return number of callbacks in segmented callback list.
2224  如果Upper limit on a processed batch 大于等于... even during callback flood. count小于等于qlowmarkUpper limit on a processed batch 等于blimit
2228  如果count恒等于0且different grace periods. 不等于0则
2229  different grace periods. 等于0
2230  qlen at last check for QS forcing 等于Number of calls to
2231  否则如果count小于different grace periods. qhimarkdifferent grace periods. 等于count
2238  WARN_ON_ONCE(count == 0 && !Is the specified rcu_segcblist structure empty?* But careful! The fact that the ->head field is NULL does not* necessarily imply that there are no callbacks associated with* this structure. When callbacks are being invoked, they are* removed as a group)
2239  WARN_ON_ONCE(!IS_ENABLED(CONFIG_FOO) evaluates to 1 if CONFIG_FOO is set to 'y' or 'm',* 0 otherwise.(CONFIG_RCU_NOCB_CPU) && count != 0 && Is the specified rcu_segcblist structure empty?* But careful! The fact that the ->head field is NULL does not* necessarily imply that there are no callbacks associated with* this structure. When callbacks are being invoked, they are* removed as a group)
2242  rcu_nocb_unlock_irqrestore(rdp, flags)
2245  如果非offloadedDoes the specified rcu_segcblist structure contain callbacks that* are ready to be invoked?invoke_rcu_core()
2247  tick_dep_clear_task(当前进程, TICK_DEP_BIT_RCU)
调用者
名称描述
rcu_corePerform RCU core processing work for the current CPU.