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