Function report |
Source Code:kernel\rcu\rcuperf.c |
Create Date:2022-07-28 10:23:47 |
| Last Modify:2020-03-12 14:18:49 | Copyright©Brick |
| home page | Tree |
| Annotation kernel can get tool activity | Download SCCT | Chinese |
Name:RCU perf writer kthread. Repeatedly does a grace period.
Proto:static int rcu_perf_writer(void *arg)
Type:int
Parameter:
| Type | Parameter | Name |
|---|---|---|
| void * | arg |
| 350 | i = 0 |
| 353 | struct callback_head * rhp = NULL |
| 358 | wdpp = writer_durations[me] |
| 360 | VERBOSE_PERFOUT_STRING("rcu_perf_writer task started") |
| 362 | set_cpus_allowed_ptr(current process, cpumask_of - the cpumask containing just a given cpu*@cpu: the cpu (<= nr_cpu_ids)(me % nr_cpu_ids)) |
| 363 | sched_priority = 1 |
| 366 | If holdoff Then schedule_timeout_uninterruptible(holdoff * HZ) |
| 374 | When Not gp_exp && Values used for system_state. Ordering of the states must not be changed* as code checks for <, <=, >, >= STATE. != SYSTEM_RUNNING cycle |
| 377 | t = ktime_get_mono_fast_ns() |
| 378 | If atomic_inc_return( & n_rcu_perf_writer_started) >= nrealwriters Then |
| 379 | t_rcu_perf_writer_started = t |
| 380 | If gp_exp Then |
| 381 | b_rcu_perf_writer_started = exp_completed() / 2 |
| 383 | Else |
| 384 | b_rcu_perf_writer_started = get_gp_seq() |
| 388 | Do |
| 392 | wdp = ktime_get_mono_fast_ns() |
| 393 | If gp_async Then |
| 394 | retry : |
| 395 | If Not rhp Then rhp = Allocation memory |
| 397 | If rhp && atomic_read(this_cpu_ptr( & n_async_inflight)) < gp_async_max Then |
| 398 | atomic_inc(this_cpu_ptr( & n_async_inflight)) |
| 400 | rhp = NULL |
| 402 | gp_barrier() |
| 403 | Go to retry |
| 404 | Else |
| 407 | Else if gp_exp Then |
| 408 | exp_sync() |
| 409 | Else |
| 410 | sync() |
| 412 | t = ktime_get_mono_fast_ns() |
| 415 | If Not started && atomic_read( & n_rcu_perf_writer_started) >= nrealwriters Then started = true |
| 419 | done = true |
| 420 | sched_priority = 0 |
| 425 | If atomic_inc_return( & n_rcu_perf_writer_finished) >= nrealwriters Then |
| 427 | schedule_timeout_interruptible(10) |
| 429 | PERFOUT_STRING("Test complete") |
| 430 | t_rcu_perf_writer_finished = t |
| 431 | If gp_exp Then |
| 432 | b_rcu_perf_writer_finished = exp_completed() / 2 |
| 434 | Else |
| 435 | b_rcu_perf_writer_finished = get_gp_seq() |
| 438 | If shutdown Then |
| 439 | smp_mb() |
| 440 | wake_up( & shutdown_wq) |
| 444 | If done && Not alldone && atomic_read( & n_rcu_perf_writer_finished) >= nrealwriters Then alldone = true |
| 450 | When Not Is it time for the current torture test to stop? cycle |
| 451 | If gp_async Then |
| 452 | gp_barrier() |
| 454 | writer_n_durations[me] = i_max |
| 456 | Return 0 |
| Source code conversion tool public plug-in interface | X |
|---|---|
| Support c/c++/esqlc/java Oracle/Informix/Mysql Plug-in can realize: logical Report Code generation and batch code conversion |