Changeset a35b458 in mainline for kernel/test/synch/workq-test-core.h
- Timestamp:
- 2018-03-02T20:10:49Z (7 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- f1380b7
- Parents:
- 3061bc1
- git-author:
- Jiří Zárevúcky <zarevucky.jiri@…> (2018-02-28 17:38:31)
- git-committer:
- Jiří Zárevúcky <zarevucky.jiri@…> (2018-03-02 20:10:49)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/test/synch/workq-test-core.h
r3061bc1 ra35b458 54 54 { 55 55 ++work->wave; 56 56 57 57 if (work->wave < WAVES) { 58 58 work->count_down = COUNT; … … 79 79 child->count_down = work->count_down; 80 80 } 81 81 82 82 return child; 83 83 } … … 93 93 /* Ensure work_item is ours for the taking. */ 94 94 memsetb(work_item, sizeof(work_t), 0xec); 95 95 96 96 test_work_t *work = (test_work_t *)work_item; 97 97 98 98 atomic_inc(&call_cnt[work->wave]); 99 99 100 100 if (0 < work->count_down) { 101 101 /* Sleep right before creating the last generation. */ … … 108 108 } 109 109 } 110 110 111 111 --work->count_down; 112 112 … … 122 122 } 123 123 } 124 124 125 125 if (!core_workq_enqueue(work_item, reproduce)) { 126 126 if (work->master) … … 131 131 } else { 132 132 /* We're done with this wave - only the master survives. */ 133 133 134 134 if (work->master && new_wave(work)) { 135 135 if (!core_workq_enqueue(work_item, reproduce)) { … … 140 140 if (work->master) 141 141 TPRINTF("\nMaster work item done.\n"); 142 142 143 143 free_work(work); 144 144 } … … 157 157 work->wave = 0; 158 158 work->count_down = COUNT; 159 159 160 160 /* 161 161 * k == COUNT_POW … … 166 166 */ 167 167 size_t exp_call_cnt = (COUNT_POW + 2) * (1 << (COUNT_POW - 1)); 168 168 169 169 TPRINTF("waves: %d, count_down: %d, total expected calls: %zu\n", 170 170 WAVES, COUNT, exp_call_cnt * WAVES); 171 171 172 172 173 173 core_workq_enqueue(&work->work_item, reproduce); 174 174 175 175 size_t sleep_cnt = 0; 176 176 /* At least 40 seconds total (or 2 sec to end while there's work). */ 177 177 size_t max_sleep_secs = end_prematurely ? 2 : MAIN_MAX_SLEEP_SEC; 178 178 size_t max_sleep_cnt = (max_sleep_secs * 1000) / MAIN_POLL_SLEEP_MS; 179 179 180 180 for (int i = 0; i < WAVES; ++i) { 181 181 while (atomic_get(&call_cnt[i]) < exp_call_cnt … … 186 186 } 187 187 } 188 188 189 189 bool success = true; 190 190 191 191 for (int i = 0; i < WAVES; ++i) { 192 192 if (atomic_get(&call_cnt[i]) == exp_call_cnt) { … … 199 199 } 200 200 } 201 202 201 202 203 203 if (success) 204 204 return NULL;
Note:
See TracChangeset
for help on using the changeset viewer.