From: Leon Romanovsky <leon@kernel.org>
To: Yang Yingliang <yangyingliang@huawei.com>
Cc: netdev@vger.kernel.org, jdmason@kudzu.us, davem@davemloft.net,
edumazet@google.com, kuba@kernel.org, pabeni@redhat.com
Subject: Re: [PATCH net v3] ethernet: s2io: don't call dev_kfree_skb() under spin_lock_irqsave()
Date: Thu, 8 Dec 2022 12:47:51 +0200 [thread overview]
Message-ID: <Y5HA10woHD9n8mpZ@unreal> (raw)
In-Reply-To: <840947dc-8560-ca51-f4d6-0e2628c181b1@huawei.com>
On Thu, Dec 08, 2022 at 06:31:00PM +0800, Yang Yingliang wrote:
>
> On 2022/12/8 17:43, Leon Romanovsky wrote:
> > On Thu, Dec 08, 2022 at 05:24:11PM +0800, Yang Yingliang wrote:
> > > The dev_kfree_skb() is defined as consume_skb(), and it is not allowed
> > > to call consume_skb() from hardware interrupt context or with interrupts
> > > being disabled. So replace dev_kfree_skb() with dev_consume_skb_irq()
> > > under spin_lock_irqsave().
> > While dev_kfree_skb and consume_skb are the same, the dev_kfree_skb_irq
> > and dev_consume_skb_irq are not. You can't blindly replace
> > dev_kfree_skb with dev_consume_skb_irq. You should check every place, analyze
> > and document why specific option was chosen.
> While calling dev_kfree_skb(consume_skb), the SKB will not be marked as
> dropped,
> to keep the same meaning, so replace it with dev_consume_skb_irq()
This annotation code is relatively new (from 2013), while you are
changing code from pre-git era (<2005).
Thanks
>
> Thanks,
> Yang
> >
> > 3791 static inline void dev_kfree_skb_irq(struct sk_buff *skb)
> > 3792 {
> > 3793 __dev_kfree_skb_irq(skb, SKB_REASON_DROPPED);
> > 3794 }
> > 3795
> > 3796 static inline void dev_consume_skb_irq(struct sk_buff *skb)
> > 3797 {
> > 3798 __dev_kfree_skb_irq(skb, SKB_REASON_CONSUMED);
> > 3799 }
> >
> > Thanks
> >
> >
> > > Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
> > > Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
> > > ---
> > > v2 -> v3:
> > > Update commit message.
> > >
> > > v1 -> v2:
> > > Add fix tag.
> > > ---
> > > drivers/net/ethernet/neterion/s2io.c | 2 +-
> > > 1 file changed, 1 insertion(+), 1 deletion(-)
> > >
> > > diff --git a/drivers/net/ethernet/neterion/s2io.c b/drivers/net/ethernet/neterion/s2io.c
> > > index 1d3c4474b7cb..a83d61d45936 100644
> > > --- a/drivers/net/ethernet/neterion/s2io.c
> > > +++ b/drivers/net/ethernet/neterion/s2io.c
> > > @@ -2386,7 +2386,7 @@ static void free_tx_buffers(struct s2io_nic *nic)
> > > skb = s2io_txdl_getskb(&mac_control->fifos[i], txdp, j);
> > > if (skb) {
> > > swstats->mem_freed += skb->truesize;
> > > - dev_kfree_skb(skb);
> > > + dev_consume_skb_irq(skb);
> > > cnt++;
> > > }
> > > }
> > > --
> > > 2.25.1
> > >
> > .
prev parent reply other threads:[~2022-12-08 10:55 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-12-08 9:24 [PATCH net v3] ethernet: s2io: don't call dev_kfree_skb() under spin_lock_irqsave() Yang Yingliang
2022-12-08 9:43 ` Leon Romanovsky
2022-12-08 10:31 ` Yang Yingliang
2022-12-08 10:47 ` Leon Romanovsky [this message]
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=Y5HA10woHD9n8mpZ@unreal \
--to=leon@kernel.org \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=jdmason@kudzu.us \
--cc=kuba@kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=yangyingliang@huawei.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.