Netdev List
 help / color / mirror / Atom feed
* [RFC PATCH net-next 0/5] net: Move system_long_wq to system_dfl_long_wq
@ 2026-05-11  9:28 Marco Crivellari
  2026-05-11  9:28 ` [RFC PATCH net-next 1/5] ibmvnic: Move long delayed work on system_dfl_long_wq Marco Crivellari
                   ` (4 more replies)
  0 siblings, 5 replies; 7+ messages in thread
From: Marco Crivellari @ 2026-05-11  9:28 UTC (permalink / raw)
  To: linux-kernel, netdev
  Cc: Tejun Heo, Lai Jiangshan, Frederic Weisbecker,
	Sebastian Andrzej Siewior, Marco Crivellari, Michal Hocko,
	Andrew Lunn, David S . Miller, Eric Dumazet, Jakub Kicinski,
	Paolo Abeni, Christophe Leroy (CS GROUP), Ethan Nelson-Moore,
	Haren Myneni, Madhavan Srinivasan, MD Danish Anwar,
	Michael Ellerman, Mika Westerberg, Nicholas Piggin, Nick Child,
	Petko Manolov, Rick Lindsley, Roger Quadros, Yehezkel Bernat

Hello,

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!

Marco Crivellari (5):
  ibmvnic: Move long delayed work on system_dfl_long_wq
  net: ti: icssg-stats: 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
  r8152: Move long delayed work on system_dfl_long_wq

 drivers/net/ethernet/ibm/ibmvnic.c          | 4 ++--
 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 ++++---
 5 files changed, 16 insertions(+), 13 deletions(-)

-- 
2.54.0


^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2026-05-11 10:14 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-05-11  9:28 [RFC PATCH net-next 0/5] net: Move system_long_wq to system_dfl_long_wq Marco Crivellari
2026-05-11  9:28 ` [RFC PATCH net-next 1/5] ibmvnic: Move long delayed work on system_dfl_long_wq Marco Crivellari
2026-05-11  9:28 ` [RFC PATCH net-next 2/5] net: ti: icssg-stats: " Marco Crivellari
2026-05-11 10:14   ` Richard Cheng
2026-05-11  9:28 ` [RFC PATCH net-next 3/5] net: thunderbolt: " Marco Crivellari
2026-05-11  9:28 ` [RFC PATCH net-next 4/5] net: usb: pegasus: " Marco Crivellari
2026-05-11  9:28 ` [RFC PATCH net-next 5/5] r8152: " Marco Crivellari

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox