[PATCH RFC 0/2] HID: Replace system_wq with system_dfl_wq

From: Marco Crivellari

Date: Tue Jul 07 2026 - 11:08:08 EST


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.

Thanks!

Marco Crivellari (2):
HID: hid-oxp: Replace system_wq with system_dfl_wq
HID: appletb-kdb: Replace system_wq with system_dfl_wq

drivers/hid/hid-appletb-kbd.c | 6 +++---
drivers/hid/hid-oxp.c | 8 ++++----
2 files changed, 7 insertions(+), 7 deletions(-)

--
2.54.0