Make send_mayday() operate on a PWQ directly instead of taking a work item, so that rescuer_thread() now calls send_mayday(pwq) instead of open-coding the mayday list manipulation.
Showing the changes to kernel/workqueue.c (1 of 1 file). Show all
Unified · Split
| @@ -2976,9 +2976,8 @@ static void idle_cull_fn(struct work_struct *work) · 2975 unmodified lines | ||
| 2976 | 2976 | reap_dying_workers(&cull_list); |
| 2977 | 2977 | } |
| 2978 | 2978 | |
| 2979 | −static void send_mayday(struct work_struct *work) | |
| 2979 | +static void send_mayday(struct pool_workqueue *pwq) | |
| 2980 | 2980 | { |
| 2981 | − struct pool_workqueue *pwq = get_work_pwq(work); | |
| 2982 | 2981 | struct workqueue_struct *wq = pwq->wq; |
| 2983 | 2982 | |
| 2984 | 2983 | lockdep_assert_held(&wq_mayday_lock); |
| @@ -3016,7 +3015,7 @@ static void pool_mayday_timeout(struct timer_list *t) · 31 unmodified lines | ||
| 3016 | 3015 | * rescuers. |
| 3017 | 3016 | */ |
| 3018 | 3017 | list_for_each_entry(work, &pool->worklist, entry) |
| 3019 | − send_mayday(work); | |
| 3018 | + send_mayday(get_work_pwq(work)); | |
| 3020 | 3019 | } |
| 3021 | 3020 | |
| 3022 | 3021 | raw_spin_unlock(&wq_mayday_lock); |
| @@ -3538,13 +3537,7 @@ repeat: · 515 unmodified lines | ||
| 3538 | 3537 | */ |
| 3539 | 3538 | if (pwq->nr_active && need_to_create_worker(pool)) { |
| 3540 | 3539 | raw_spin_lock(&wq_mayday_lock); |
| 3541 | − /* | |
| 3542 | − * Queue iff somebody else hasn't queued it already. | |
| 3543 | − */ | |
| 3544 | − if (list_empty(&pwq->mayday_node)) { | |
| 3545 | − get_pwq(pwq); | |
| 3546 | − list_add_tail(&pwq->mayday_node, &wq->maydays); | |
| 3547 | − } | |
| 3540 | + send_mayday(pwq); | |
| 3548 | 3541 | raw_spin_unlock(&wq_mayday_lock); |
| 3549 | 3542 | } |
| 3550 | 3543 | } |