From: mingming cao <mmc@linux.ibm.com>
To: Marco Crivellari <marco.crivellari@suse.com>,
linux-kernel@vger.kernel.org, netdev@vger.kernel.org
Cc: Tejun Heo <tj@kernel.org>, Lai Jiangshan <jiangshanlai@gmail.com>,
Frederic Weisbecker <frederic@kernel.org>,
Sebastian Andrzej Siewior <bigeasy@linutronix.de>,
Michal Hocko <mhocko@suse.com>,
Andrew Lunn <andrew+netdev@lunn.ch>,
"David S . Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
Haren Myneni <haren@linux.ibm.com>,
Rick Lindsley <ricklind@linux.ibm.com>,
Nick Child <nnac123@linux.ibm.com>,
Madhavan Srinivasan <maddy@linux.ibm.com>,
Michael Ellerman <mpe@ellerman.id.au>,
Nicholas Piggin <npiggin@gmail.com>,
"Christophe Leroy (CS GROUP)" <chleroy@kernel.org>,
linuxppc-dev@lists.ozlabs.org
Subject: Re: [PATCH net-next v4 1/6] ibmvnic: Move long delayed work on system_dfl_long_wq
Date: Fri, 16 Oct 2026 14:19:46 -0700 [thread overview]
Message-ID: <de6d786b-fdbd-42f8-b2c9-b175a6a33c69@linux.ibm.com> (raw)
In-Reply-To: <20261012095452.135828-2-marco.crivellari@suse.com>
On 10/12/26 2:54 AM, Marco Crivellari wrote:
> Currently the code enqueue work items using {queue|mod}_delayed_work(),
> using system_long_wq. This workqueue should be used when long works are
> expected and it is a per-cpu workqueue.
>
> The function(s) end up calling __queue_delayed_work(), which set a global
> timer that could fire anywhere, enqueuing the work where the timer fired.
>
> Unbound works could benefit from scheduler task placement, to optimize
> performance and power consumption. Long work shouldn't stick to a single
> CPU.
>
> Recently, a new unbound workqueue specific for long running work has
> been added:
>
> c116737e972e ("workqueue: Add system_dfl_long_wq for long unbound works")
>
> 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
> system_long_wq with system_dfl_long_wq so that the work may benefit from
> scheduler task placement.
>
> Cc: Haren Myneni <haren@linux.ibm.com>
> Cc: Rick Lindsley <ricklind@linux.ibm.com>
> Cc: Nick Child <nnac123@linux.ibm.com>
> Cc: Madhavan Srinivasan <maddy@linux.ibm.com>
> Cc: Michael Ellerman <mpe@ellerman.id.au>
> Cc: Nicholas Piggin <npiggin@gmail.com>
> Cc: Christophe Leroy (CS GROUP) <chleroy@kernel.org>
> Cc: linuxppc-dev@lists.ozlabs.org
> Signed-off-by: Marco Crivellari <marco.crivellari@suse.com>
> ---
> drivers/net/ethernet/ibm/ibmvnic.c | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c
> index 5a510eed335e..d4c284c8ef43 100644
> --- a/drivers/net/ethernet/ibm/ibmvnic.c
> +++ b/drivers/net/ethernet/ibm/ibmvnic.c
> @@ -3229,7 +3229,7 @@ static void __ibmvnic_reset(struct work_struct *work)
> if (adapter->state == VNIC_PROBING &&
> !wait_for_completion_timeout(&adapter->probe_done, timeout)) {
> dev_err(dev, "Reset thread timed out on probe");
> - queue_delayed_work(system_long_wq,
> + queue_delayed_work(system_dfl_long_wq,
> &adapter->ibmvnic_delayed_reset,
> IBMVNIC_RESET_DELAY);
> return;
> @@ -3267,7 +3267,7 @@ static void __ibmvnic_reset(struct work_struct *work)
> spin_lock(&adapter->rwi_lock);
> if (!list_empty(&adapter->rwi_list)) {
> if (test_and_set_bit_lock(0, &adapter->resetting)) {
> - queue_delayed_work(system_long_wq,
> + queue_delayed_work(system_dfl_long_wq,
> &adapter->ibmvnic_delayed_reset,
> IBMVNIC_RESET_DELAY);
> } else {
> @@ -3454,7 +3454,7 @@ static int ibmvnic_reset(struct ibmvnic_adapter *adapter,
> list_add_tail(&rwi->list, &adapter->rwi_list);
> netdev_dbg(adapter->netdev, "Scheduling reset (reason %s)\n",
> reset_reason_to_string(reason));
> - queue_work(system_long_wq, &adapter->ibmvnic_reset);
> + queue_work(system_dfl_long_wq, &adapter->ibmvnic_reset);
>
> ret = 0;
> err:
On 10/12/26 2:54 AM, Marco Crivellari wrote:
> Currently the code enqueue work items using {queue|mod}_delayed_work(),
> using system_long_wq. This workqueue should be used when long works are
> expected and it is a per-cpu workqueue.
>
> The function(s) end up calling __queue_delayed_work(), which set a global
> timer that could fire anywhere, enqueuing the work where the timer fired.
>
> Unbound works could benefit from scheduler task placement, to optimize
> performance and power consumption. Long work shouldn't stick to a single
> CPU.
>
> Recently, a new unbound workqueue specific for long running work has
> been added:
>
> c116737e972e ("workqueue: Add system_dfl_long_wq for long
unbound works")
>
> 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
> system_long_wq with system_dfl_long_wq so that the work may benefit from
> scheduler task placement.
>
> Cc: Haren Myneni <haren@linux.ibm.com>
> Cc: Rick Lindsley <ricklind@linux.ibm.com>
> Cc: Nick Child <nnac123@linux.ibm.com>
> Cc: Madhavan Srinivasan <maddy@linux.ibm.com>
> Cc: Michael Ellerman <mpe@ellerman.id.au>
> Cc: Nicholas Piggin <npiggin@gmail.com>
> Cc: Christophe Leroy (CS GROUP) <chleroy@kernel.org>
> Cc: linuxppc-dev@lists.ozlabs.org
> Signed-off-by: Marco Crivellari <marco.crivellari@suse.com>
> ---
> drivers/net/ethernet/ibm/ibmvnic.c | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/net/ethernet/ibm/ibmvnic.c
b/drivers/net/ethernet/ibm/ibmvnic.c
> index 5a510eed335e..d4c284c8ef43 100644
> --- a/drivers/net/ethernet/ibm/ibmvnic.c
> +++ b/drivers/net/ethernet/ibm/ibmvnic.c
> @@ -3229,7 +3229,7 @@ static void __ibmvnic_reset(struct work_struct
*work)
> if (adapter->state == VNIC_PROBING &&
> !wait_for_completion_timeout(&adapter->probe_done, timeout)) {
> dev_err(dev, "Reset thread timed out on probe");
> - queue_delayed_work(system_long_wq,
> + queue_delayed_work(system_dfl_long_wq,
> &adapter->ibmvnic_delayed_reset,
> IBMVNIC_RESET_DELAY);
> return;
> @@ -3267,7 +3267,7 @@ static void __ibmvnic_reset(struct work_struct
*work)
> spin_lock(&adapter->rwi_lock);
> if (!list_empty(&adapter->rwi_list)) {
> if (test_and_set_bit_lock(0, &adapter->resetting)) {
> - queue_delayed_work(system_long_wq,
> + queue_delayed_work(system_dfl_long_wq,
> &adapter->ibmvnic_delayed_reset,
> IBMVNIC_RESET_DELAY);
> } else {
> @@ -3454,7 +3454,7 @@ static int ibmvnic_reset(struct ibmvnic_adapter
*adapter,
> list_add_tail(&rwi->list, &adapter->rwi_list);
> netdev_dbg(adapter->netdev, "Scheduling reset (reason %s)\n",
> reset_reason_to_string(reason));
> - queue_work(system_long_wq, &adapter->ibmvnic_reset);
> + queue_work(system_dfl_long_wq, &adapter->ibmvnic_reset);
>
> ret = 0;
> err:
I walked through the reset path and the conversion looks fine.
All three system_long_wq users move together and there are no
remaining users in the driver. The work items don't rely on per-CPU
state, so system_dfl_long_wq seems appropriate here.
Minor commit message nit: ibmvnic doesn't use mod_delayed_work(), and
one of the conversions is queue_work() rather than delayed work.
Acked-by: Mingming Cao <mmc@linux.ibm.com>
next prev parent reply other threads:[~2026-10-16 21:20 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-12 9:54 [PATCH net-next v4 0/6] net: Move system_long_wq to system_dfl_long_wq Marco Crivellari
2026-10-12 9:54 ` [PATCH net-next v4 1/6] ibmvnic: Move long delayed work on system_dfl_long_wq Marco Crivellari
2026-10-13 9:57 ` netdev-bot+sashiko
2026-10-16 21:19 ` mingming cao [this message]
2026-10-12 9:54 ` [PATCH net-next v4 2/6] net: ti: icssg-stats: " Marco Crivellari
2026-10-13 9:57 ` netdev-bot+sashiko
2026-10-12 9:54 ` [PATCH net-next v4 3/6] net: ti: icssg-prueth: " Marco Crivellari
2026-10-13 9:57 ` netdev-bot+sashiko
2026-10-12 9:54 ` [PATCH net-next v4 4/6] net: thunderbolt: " Marco Crivellari
2026-10-13 9:57 ` netdev-bot+sashiko
2026-10-12 9:54 ` [PATCH net-next v4 5/6] net: usb: pegasus: " Marco Crivellari
2026-10-12 9:54 ` [PATCH net-next v4 6/6] net: usb: r8152: " Marco Crivellari
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=de6d786b-fdbd-42f8-b2c9-b175a6a33c69@linux.ibm.com \
--to=mmc@linux.ibm.com \
--cc=andrew+netdev@lunn.ch \
--cc=bigeasy@linutronix.de \
--cc=chleroy@kernel.org \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=frederic@kernel.org \
--cc=haren@linux.ibm.com \
--cc=jiangshanlai@gmail.com \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=maddy@linux.ibm.com \
--cc=marco.crivellari@suse.com \
--cc=mhocko@suse.com \
--cc=mpe@ellerman.id.au \
--cc=netdev@vger.kernel.org \
--cc=nnac123@linux.ibm.com \
--cc=npiggin@gmail.com \
--cc=pabeni@redhat.com \
--cc=ricklind@linux.ibm.com \
--cc=tj@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®