hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
kernel/kernel/padata.c
....@@ -220,14 +220,16 @@
220220 pw = padata_work_alloc();
221221 spin_unlock(&padata_works_lock);
222222
223
+ if (!pw) {
224
+ /* Maximum works limit exceeded, run in the current task. */
225
+ padata->parallel(padata);
226
+ }
227
+
223228 rcu_read_unlock_bh();
224229
225230 if (pw) {
226231 padata_work_init(pw, padata_parallel_worker, padata, 0);
227232 queue_work(pinst->parallel_wq, &pw->pw_work);
228
- } else {
229
- /* Maximum works limit exceeded, run in the current task. */
230
- padata->parallel(padata);
231233 }
232234
233235 return 0;
....@@ -401,13 +403,16 @@
401403 int hashed_cpu = padata_cpu_hash(pd, padata->seq_nr);
402404 struct padata_list *reorder = per_cpu_ptr(pd->reorder_list, hashed_cpu);
403405 struct padata_priv *cur;
406
+ struct list_head *pos;
404407
405408 spin_lock(&reorder->lock);
406409 /* Sort in ascending order of sequence number. */
407
- list_for_each_entry_reverse(cur, &reorder->list, list)
410
+ list_for_each_prev(pos, &reorder->list) {
411
+ cur = list_entry(pos, struct padata_priv, list);
408412 if (cur->seq_nr < padata->seq_nr)
409413 break;
410
- list_add(&padata->list, &cur->list);
414
+ }
415
+ list_add(&padata->list, pos);
411416 spin_unlock(&reorder->lock);
412417
413418 /*