[PATCH net-next v4 0/6] net: Move system_long_wq to system_dfl_long_wq
flat view
HOTtoday
From: Marco Crivellari <hidden>
Date: 2026-10-12 09:55:06
Also in:
lkml
Revision v4 of 4 in this series.
Revisions (4)
- rfc [diff vs current]
- v2 [diff vs current]
- v3 [diff vs current]
- v4 current
Hello, This is only rebased as it seems the patches didn't land in the next release because are marked as Rejected (likely because of initial feedback on 5/6),despite the general positive overall feedbacks (also on Patch 5/6, later): https://lore.kernel.org/all/20260906080818.GC6356@carbon.k.g/ (local) --- Currently the code uses the per-cpu workqueue system_long_wq to schedule long running 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. More details on this will follow in the next section. Recently, a new unbound workqueue specific for long running work has been added: c116737e972e ("workqueue: Add system_dfl_long_wq for long unbound works") ~~~ Details about queue_delayed_work ~~~ system_long_wq is a per-cpu workqueue and it is used as a parameter of queue_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 the new system_dfl_long_wq, so that the used workqueue is now unbound and can benefit from scheduler task placement. Thanks! --- Changes in v4: - rebased on v7.3-rc7 - added review-by Sebastian on 5/6 Link to v3: https://lore.kernel.org/all/20260720100902.155605-1-marco.crivellari@suse.com/ (local) Changes in v3: - rebased on v7.2-rc4 - added "net: ti: icssg-prueth: Move long delayed work on system_dfl_long_wq" - changed also the workqueue in ibmvnic_reset(). Link to v2: https://lore.kernel.org/all/20260706134033.244295-1-marco.crivellari@suse.com/ (local) Changes in v2: - rebased on v7.2-rc2 - dropped the RFC prefix, kept Ack and review tags Link to v1: https://lore.kernel.org/all/20260511092846.120141-1-marco.crivellari@suse.com/ (local) Marco Crivellari (6): ibmvnic: Move long delayed work on system_dfl_long_wq net: ti: icssg-stats: Move long delayed work on system_dfl_long_wq net: ti: icssg-prueth: Move long delayed work on system_dfl_long_wq net: thunderbolt: Move long delayed work on system_dfl_long_wq net: usb: pegasus: Move long delayed work on system_dfl_long_wq net: usb: r8152: Move long delayed work on system_dfl_long_wq drivers/net/ethernet/ibm/ibmvnic.c | 6 +++--- drivers/net/ethernet/ti/icssg/icssg_prueth.c | 2 +- drivers/net/ethernet/ti/icssg/icssg_stats.c | 2 +- drivers/net/thunderbolt/main.c | 7 ++++--- drivers/net/usb/pegasus.c | 9 +++++---- drivers/net/usb/r8152.c | 7 ++++--- 6 files changed, 18 insertions(+), 15 deletions(-) -- 2.55.0