From: Oscar Maes <oscmaes92@gmail.com>
To: Alexander Lobakin <aleksander.lobakin@intel.com>
Cc: netdev@vger.kernel.org, edumazet@google.com, kuba@kernel.org,
pabeni@redhat.com, andrew@lunn.ch
Subject: Re: [PATCH net] pcnet32: stop holding device spin lock during napi_complete_done
Date: Thu, 28 May 2026 19:07:47 +0200 [thread overview]
Message-ID: <20260528170747-oscmaes92@gmail.com> (raw)
In-Reply-To: <60438b0d-e664-4c86-b4f6-27343fe2fc7a@intel.com>
On Thu, May 28, 2026 at 04:55:55PM +0200, Alexander Lobakin wrote:
> From: Oscar Maes <oscmaes92@gmail.com>
> Date: Thu, 28 May 2026 16:03:20 +0200
>
> > napi_complete_done may call gro_flush_normal (though not currently, as GRO
> > is unsupported at the moment), which may result in packet TX. This will
> > eventually result in calling pcnet32_start_xmit - resulting in a deadlock
> > while trying to re-acquire the already locked spin lock.
> >
> > It is safe to split the spinlock block into two, because the hardware
> > registers are still protected from concurrent access, and the two blocks
> > perform unrelated operations that don't need to happen atomically.
> >
> > Fixes: 5b2ec6f2be51 ("pcnet32: use napi_complete_done()")
> > Reviewed-by: Andrew Lunn <andrew@lunn.ch>
> > Signed-off-by: Oscar Maes <oscmaes92@gmail.com>
> > ---
> > NOTE: This patch was a part of the following net-next series:
> > https://lore.kernel.org/netdev/20260525125437.4061-2-oscmaes92@gmail.com/
> >
> > drivers/net/ethernet/amd/pcnet32.c | 4 +++-
> > 1 file changed, 3 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/net/ethernet/amd/pcnet32.c b/drivers/net/ethernet/amd/pcnet32.c
> > index 911808ab13a7..4f3076d4ea34 100644
> > --- a/drivers/net/ethernet/amd/pcnet32.c
> > +++ b/drivers/net/ethernet/amd/pcnet32.c
> > @@ -1407,8 +1407,10 @@ static int pcnet32_poll(struct napi_struct *napi, int budget)
> > pcnet32_restart(dev, CSR0_START);
> > netif_wake_queue(dev);
> > }
> > + spin_unlock_irqrestore(&lp->lock, flags);
> >
> > if (work_done < budget && napi_complete_done(napi, work_done)) {
> > + spin_lock_irqsave(&lp->lock, flags);
> > /* clear interrupt masks */
> > val = lp->a->read_csr(ioaddr, CSR3);
> > val &= 0x00ff;
> > @@ -1416,9 +1418,9 @@ static int pcnet32_poll(struct napi_struct *napi, int budget)
> >
> > /* Set interrupt enable. */
> > lp->a->write_csr(ioaddr, CSR0, CSR0_INTEN);
> > + spin_unlock_irqrestore(&lp->lock, flags);
> > }
> >
> > - spin_unlock_irqrestore(&lp->lock, flags);
> > return work_done;
>
> While this fix is valid, I'm wondering whether this needs a deeper
> rework as it's generally a very bad idea to have IRQs disabled when
> NAPI-polling (except for every short sections).
>
> Could these irqoff sections get narrowed down to reading/writing
> interrupt registers only?
>
> Thanks,
> Olek
Sounds like a good idea, however, I think it's out of scope for this bug fix.
next prev parent reply other threads:[~2026-05-28 17:07 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-28 14:03 [PATCH net] pcnet32: stop holding device spin lock during napi_complete_done Oscar Maes
2026-05-28 14:55 ` Alexander Lobakin
2026-05-28 17:07 ` Oscar Maes [this message]
2026-05-29 15:21 ` Alexander Lobakin
2026-06-02 2:44 ` Jakub Kicinski
2026-06-02 16:41 ` Oscar Maes
2026-06-02 18:34 ` Jakub Kicinski
2026-06-02 18:40 ` patchwork-bot+netdevbpf
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=20260528170747-oscmaes92@gmail.com \
--to=oscmaes92@gmail.com \
--cc=aleksander.lobakin@intel.com \
--cc=andrew@lunn.ch \
--cc=edumazet@google.com \
--cc=kuba@kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.