| Function report | 
| Source Code: kernel\rcu\rcutorture.c | Create Date:2022-07-28 10:21:34 | 
| Last Modify:2020-03-12 14:18:49 | Copyright©Brick | 
| home page | Tree | 
| Annotation kernel can get tool activity | Download SCCT | Chinese | 
Name:RCU torture writer kthread. Repeatedly substitutes a new structure* for that pointed to by rcu_torture_current, freeing the old structure* after a series of grace periods (the "pipeline").
Proto:static int rcu_torture_writer(void *arg)
Type:int
Parameter:
| Type | Parameter | Name | 
|---|---|---|
| void * | arg | 
| 942 | expediting = 0 | 
| 949 | static | 
| 950 | int synctype[] = {RTWS_DEF_FREE, RTWS_EXP_SYNC, RTWS_COND_GET, RTWS_SYNC} | 
| 952 | nsynctypes = 0 | 
| 954 | VERBOSE_TOROUT_STRING("rcu_torture_writer task started") | 
| 955 | If Not can_expedite Then pr_alert("%s"TORTURE_FLAG" GP expediting controlled from boot/sysfs for %s.\n", torture_type, name) | 
| 961 | If Not gp_cond1 && Not gp_exp1 && Not gp_normal1 && Not gp_sync1 Then gp_cond1 = gp_exp1 = gp_normal1 = gp_sync1 = true | 
| 964 | synctype[nsynctypes++] = RTWS_COND_GET | 
| 970 | synctype[nsynctypes++] = RTWS_EXP_SYNC | 
| 975 | If gp_normal1 && deferred_free Then | 
| 976 | synctype[nsynctypes++] = RTWS_DEF_FREE | 
| 978 | Else if gp_normal && Not deferred_free Then | 
| 982 | synctype[nsynctypes++] = RTWS_SYNC | 
| 987 | If WARN_ONCE(nsynctypes == 0, "rcu_torture_writer: No update-side primitives.\n") Then | 
| 998 | Do | 
| 1000 | schedule_timeout_uninterruptible(1) | 
| 1002 | If (rp == NULL) Then Continue | 
| 1004 | rtort_pipe_count = 0 | 
| 1006 | 0x10c7 is 2**32 / 1000000 (rounded up) (torture_random( & rand) & 0x3ff) | 
| 1010 | rtort_mbtest = 1 | 
| 1012 | smp_wmb() | 
| 1013 | If old_rp Then | 
| 1014 | i = rtort_pipe_count | 
| 1015 | If i > RCU_TORTURE_PIPE_LEN Then i = RCU_TORTURE_PIPE_LEN | 
| 1017 | atomic_inc( & rcu_torture_wcount[i]) | 
| 1018 | rtort_pipe_count++ | 
| 1020 | Case synctype[torture_random( & rand) % nsynctypes] == RTWS_DEF_FREE | 
| 1024 | Case synctype[torture_random( & rand) % nsynctypes] == RTWS_EXP_SYNC | 
| 1026 | exp_sync() | 
| 1028 | Break | 
| 1029 | Case synctype[torture_random( & rand) % nsynctypes] == RTWS_COND_GET | 
| 1032 | i = torture_random( & rand) % 16 | 
| 1033 | If i != 0 Then schedule_timeout_interruptible(i) | 
| 1035 | 0x10c7 is 2**32 / 1000000 (rounded up) (torture_random( & rand) % 1000) | 
| 1039 | Break | 
| 1040 | Case synctype[torture_random( & rand) % nsynctypes] == RTWS_SYNC | 
| 1042 | sync() | 
| 1044 | Break | 
| 1045 | Default | 
| 1046 | WARN_ON_ONCE(1) | 
| 1047 | Break | 
| 1053 | If can_expedite && Not ( torture_random( & rand) & 0xff & Not Not expediting - 1 ) Then | 
| 1058 | Else _unexpedite_gp - Cancel prior rcu_expedite_gp() invocation* Undo a prior call to rcu_expedite_gp() | 
| 1060 | If ++expediting > 3 Then expediting = -expediting | 
| 1062 | Else if Not can_expedite Then | 
| 1076 | WARN(1, "%s: rtort_pipe_count: %d\n", __func__, rtort_pipe_count) | 
| 1078 | When Not Is it time for the current torture test to stop? cycle | 
| 1080 | If expediting > 0 Then expediting = -expediting | 
| 1082 | When can_expedite && expediting++ < 0 cycle | 
| 1083 | _unexpedite_gp - Cancel prior rcu_expedite_gp() invocation* Undo a prior call to rcu_expedite_gp() | 
| 1085 | If Not can_expedite Then pr_alert("%s"TORTURE_FLAG" Dynamic grace-period expediting was disabled.\n", torture_type) | 
| 1091 | 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 |