Lines Matching refs:prio

44 	int (*item_add)(struct parman *parman, struct parman_prio *prio,
46 void (*item_remove)(struct parman *parman, struct parman_prio *prio,
87 static bool parman_prio_used(struct parman_prio *prio)
90 return !list_empty(&prio->item_list);
93 static struct parman_item *parman_prio_first_item(struct parman_prio *prio)
95 return list_first_entry(&prio->item_list,
99 static unsigned long parman_prio_first_index(struct parman_prio *prio)
101 return parman_prio_first_item(prio)->index;
104 static struct parman_item *parman_prio_last_item(struct parman_prio *prio)
106 return list_last_entry(&prio->item_list,
110 static unsigned long parman_prio_last_index(struct parman_prio *prio)
112 return parman_prio_last_item(prio)->index;
116 struct parman_prio *prio)
118 list_for_each_entry_from_reverse(prio, &parman->prio_list, list) {
119 if (!parman_prio_used(prio))
121 return parman_prio_last_index(prio) + 1;
126 static void __parman_prio_move(struct parman *parman, struct parman_prio *prio,
134 struct parman_prio *prio)
139 if (!parman_prio_used(prio))
141 item = parman_prio_first_item(prio);
142 to_index = parman_prio_last_index(prio) + 1;
143 __parman_prio_move(parman, prio, item, to_index, 1);
144 list_move_tail(&item->list, &prio->item_list);
149 struct parman_prio *prio)
154 if (!parman_prio_used(prio))
156 item = parman_prio_last_item(prio);
157 to_index = parman_prio_first_index(prio) - 1;
158 __parman_prio_move(parman, prio, item, to_index, 1);
159 list_move(&item->list, &prio->item_list);
164 struct parman_prio *prio,
170 last_item = parman_prio_last_item(prio);
176 __parman_prio_move(parman, prio, last_item, to_index, 1);
183 struct parman_prio *prio,
196 new_index = parman_lsort_new_index_find(parman, prio);
198 if (prio2 == prio)
203 list_add_tail(&item->list, &prio->item_list);
209 struct parman_prio *prio,
212 parman_prio_item_remove(parman, prio, item);
213 list_for_each_entry_continue(prio, &parman->prio_list, list)
214 parman_prio_shift_up(parman, prio);
239 * item 1 with prio 10
240 * item 2 with prio 10
241 * item 3 with prio 10
242 * item 4 with prio 20
243 * item 5 with prio 20
244 * item 6 with prio 30
245 * item 7 with prio 30
246 * item 8 with prio 30
252 * item 2 with prio 10
253 * item 3 with prio 10
254 * item 1 with prio 10
255 * item 5 with prio 20
256 * item 4 with prio 20
257 * item 7 with prio 30
258 * item 8 with prio 30
259 * item 6 with prio 30
300 * @prio: parman prio structure to be initialized
308 void parman_prio_init(struct parman *parman, struct parman_prio *prio,
314 INIT_LIST_HEAD(&prio->item_list);
315 prio->priority = priority;
320 if (prio2->priority > prio->priority)
323 list_add_tail(&prio->list, pos);
329 * @prio: parman prio structure
333 void parman_prio_fini(struct parman_prio *prio)
335 WARN_ON(parman_prio_used(prio));
336 list_del(&prio->list);
343 * @prio: parman prio instance to add the item to
352 int parman_item_add(struct parman *parman, struct parman_prio *prio,
355 return parman->algo->item_add(parman, prio, item);
362 * @prio: parman prio instance to delete the item from
367 void parman_item_remove(struct parman *parman, struct parman_prio *prio,
370 parman->algo->item_remove(parman, prio, item);