mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
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>

  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®