Lines Matching refs:test_parman
2 * lib/test_parman.c - Test module for parman
77 struct test_parman {
94 struct test_parman *test_parman = priv;
98 prio_array = krealloc(test_parman->prio_array,
104 old_count = test_parman->prio_array_limit;
108 test_parman->prio_array = prio_array;
109 test_parman->prio_array_limit = new_count;
116 struct test_parman *test_parman = priv;
117 struct test_parman_item **prio_array = test_parman->prio_array;
132 static void test_parman_rnd_init(struct test_parman *test_parman)
134 prandom_seed_state(&test_parman->rnd, 3141592653589793238ULL);
137 static u32 test_parman_rnd_get(struct test_parman *test_parman)
139 return prandom_u32_state(&test_parman->rnd);
142 static unsigned long test_parman_priority_gen(struct test_parman *test_parman)
148 priority = test_parman_rnd_get(test_parman);
153 struct test_parman_prio *prio = &test_parman->prios[i];
163 static void test_parman_prios_init(struct test_parman *test_parman)
168 struct test_parman_prio *prio = &test_parman->prios[i];
171 prio->priority = test_parman_priority_gen(test_parman);
172 parman_prio_init(test_parman->parman, &prio->parman_prio,
177 static void test_parman_prios_fini(struct test_parman *test_parman)
182 struct test_parman_prio *prio = &test_parman->prios[i];
188 static void test_parman_items_init(struct test_parman *test_parman)
193 struct test_parman_item *item = &test_parman->items[i];
194 unsigned int prio_index = test_parman_rnd_get(test_parman) &
198 item->prio = &test_parman->prios[prio_index];
202 static void test_parman_items_fini(struct test_parman *test_parman)
207 struct test_parman_item *item = &test_parman->items[i];
211 parman_item_remove(test_parman->parman,
217 static struct test_parman *test_parman_create(const struct parman_ops *ops)
219 struct test_parman *test_parman;
222 test_parman = kzalloc(sizeof(*test_parman), GFP_KERNEL);
223 if (!test_parman)
225 err = test_parman_resize(test_parman, TEST_PARMAN_BASE_COUNT);
228 test_parman->parman = parman_create(ops, test_parman);
229 if (!test_parman->parman) {
233 test_parman_rnd_init(test_parman);
234 test_parman_prios_init(test_parman);
235 test_parman_items_init(test_parman);
236 test_parman->run_budget = TEST_PARMAN_RUN_BUDGET;
237 return test_parman;
240 test_parman_resize(test_parman, 0);
242 kfree(test_parman);
246 static void test_parman_destroy(struct test_parman *test_parman)
248 test_parman_items_fini(test_parman);
249 test_parman_prios_fini(test_parman);
250 parman_destroy(test_parman->parman);
251 test_parman_resize(test_parman, 0);
252 kfree(test_parman);
255 static bool test_parman_run_check_budgets(struct test_parman *test_parman)
257 if (test_parman->run_budget-- == 0)
259 if (test_parman->bulk_budget-- != 0)
262 test_parman->bulk_budget = test_parman_rnd_get(test_parman) &
264 test_parman->bulk_noop = test_parman_rnd_get(test_parman) & 1;
268 static int test_parman_run(struct test_parman *test_parman)
270 unsigned int i = test_parman_rnd_get(test_parman);
273 while (test_parman_run_check_budgets(test_parman)) {
275 struct test_parman_item *item = &test_parman->items[item_index];
277 if (test_parman->bulk_noop)
281 err = parman_item_add(test_parman->parman,
286 test_parman->prio_array[item->parman_item.index] = item;
287 test_parman->used_items++;
289 test_parman->prio_array[item->parman_item.index] = NULL;
290 parman_item_remove(test_parman->parman,
293 test_parman->used_items--;
300 static int test_parman_check_array(struct test_parman *test_parman,
308 if (test_parman->prio_array_limit < TEST_PARMAN_BASE_COUNT) {
310 test_parman->prio_array_limit, TEST_PARMAN_BASE_COUNT);
314 for (i = 0; i < test_parman->prio_array_limit; i++) {
315 struct test_parman_item *item = test_parman->prio_array[i];
343 if (used_items != test_parman->used_items) {
345 used_items, test_parman->used_items);
362 struct test_parman *test_parman;
365 test_parman = test_parman_create(&test_parman_lsort_ops);
366 if (IS_ERR(test_parman))
367 return PTR_ERR(test_parman);
369 err = test_parman_run(test_parman);
373 err = test_parman_check_array(test_parman, false);
377 test_parman_destroy(test_parman);