Re: [PATCH RFC 0/2] HID: Replace system_wq with system_dfl_wq
Jiri Kosina <[email protected]> Mon, 3 Aug 2026 21:04:52 +0200 (CEST)
| Newsgroups | org.kernel.vger.linux-input,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
On Tue, 7 Jul 2026, Marco Crivellari wrote:
> Hi,
>
> Currently the code uses the per-cpu workqueue system_wq to schedule
> delayed works.
>
> Unbound works could benefit from scheduler task placement, to optimize
> performance and power consumption. Another good reason to have this unbound,
> is the "queue_delayed_work()" function, used to enqueue the work item.
>
> ~~~ Details about queue_delayed_work ~~~
>
> system_wq is a per-cpu workqueue and it is used as a parameter of
> mod_delayed_work(). This function schedule an item that it will later
> be enqueued (once the timer will fire). __queue_delayed_work() does the job
> receiving as "cpu" WORK_CPU_UNBOUND:
>
> if (housekeeping_enabled(HK_TYPE_TIMER)) {
> // [....]
> } else {
> if (likely(cpu == WORK_CPU_UNBOUND))
> add_timer_global(timer);
> else
> add_timer_on(timer, cpu);
> }
>
> The timer is global, so can fire everywhere, and the work item will be
> enqueued where the timer fired.
>
> Since the workqueue work doesn't rely on per-cpu variables, there is no
> obvious reason that justify the use of a per-cpu workqueue. So change the
> workqueue with system_dfl_wq, so that the used workqueue is now unbound
> and can benefit from scheduler task placement.
This definitely is a step in a right direction, thanks! Now applied (and
sorry for the delay).
--
Jiri Kosina
SUSE Labs