[Devel] [PATCH 01/14] netpoll: don't free skb from completion_queue in interrupt context

Kirill Tkhai ktkhai at odin.com
Wed Jun 10 01:44:10 PDT 2015


В Ср, 10/06/2015 в 11:33 +0300, Konstantin Khorenko пишет:
> Do we need to send it upstream if the problem still not resolved in 3.10?
> May be it's still valid for 4.x as well?

The call chain from the old patch is still possible.

We may send this to upstream.

> --
> Best regards,
> 
> Konstantin Khorenko,
> Virtuozzo Linux Kernel Team
> 
> On 06/08/2015 05:20 PM, Kirill Tkhai wrote:
> > Porting patch diff-netpoll-dont-free-skb-from-completion_queue-in-interrupt-context
> > from 2.6.32:
> > 
> > skb is queued to completion_queue from dev_kfree_skb_irq,
> > because skb can't be freed in irq context.
> > 
> > This patch fixes the warning:
> > [ 6253.592727] WARNING: at kernel/softirq.c:161 local_bh_enable_ip+0x7d/0xb0()
> > [ 6253.592727] Call Trace:
> > [ 6253.592727]  <IRQ>  [<ffffffff81071927>] ? warn_slowpath_common+0x87/0xc0
> > [ 6253.592727]  [<ffffffff8107197a>] ? warn_slowpath_null+0x1a/0x20
> > [ 6253.592727]  [<ffffffff8107a72d>] ? local_bh_enable_ip+0x7d/0xb0
> > [ 6253.592727]  [<ffffffff8151997b>] ? _spin_unlock_bh+0x1b/0x20
> > [ 6253.592727]  [<ffffffffa041c928>] ? destroy_conntrack+0xd8/0x190 [nf_conntrack]
> > [ 6253.592727]  [<ffffffff81484247>] ? nf_conntrack_destroy+0x17/0x30
> > [ 6253.592727]  [<ffffffff8144b205>] ? skb_release_head_state+0xf5/0x120
> > [ 6253.592727]  [<ffffffff8144af76>] ? __kfree_skb+0x16/0xa0
> > [ 6253.592727]  [<ffffffff8146da54>] ? zap_completion_queue+0x84/0xa0
> > [ 6253.592727]  [<ffffffff8146db95>] ? netpoll_poll_dev+0x125/0x490
> > [ 6253.592727]  [<ffffffff8146e101>] ? netpoll_send_skb_on_dev+0x151/0x230
> > [ 6253.592727]  [<ffffffff8146e3f3>] ? netpoll_send_udp+0x213/0x230
> > [ 6253.592727]  [<ffffffffa001c31b>] ? write_msg+0xbb/0x110 [netconsole]
> > 
> > write_msg calls spin_lock_irqsave, which disables interrupts.
> > Then destroy_conntrack calls spin_lock_bh and we get this warning.
> > 
> > https://jira.sw.ru/browse/PSBM-23346
> > https://bugzilla.openvz.org/show_bug.cgi?id=2526
> > 
> > Signed-off-by: Andrey Vagin <avagin at openvz.org>
> > Signed-off-by: Kirill Tkhai <ktkhai at odin.com>
> > ---
> >  net/core/netpoll.c |    6 +++++-
> >  1 file changed, 5 insertions(+), 1 deletion(-)
> > 
> > diff --git a/net/core/netpoll.c b/net/core/netpoll.c
> > index 99091a2..18eeb81 100644
> > --- a/net/core/netpoll.c
> > +++ b/net/core/netpoll.c
> > @@ -291,8 +291,12 @@ static void refill_skbs(void)
> >  static void zap_completion_queue(void)
> >  {
> >  	unsigned long flags;
> > -	struct softnet_data *sd = &get_cpu_var(softnet_data);
> > +	struct softnet_data *sd;
> >  
> > +	if (in_irq() || irqs_disabled())
> > +		return;
> > +
> > +	sd = &get_cpu_var(softnet_data);
> >  	if (sd->completion_queue) {
> >  		struct sk_buff *clist;
> >  
> > 
> > _______________________________________________
> > Devel mailing list
> > Devel at openvz.org
> > https://lists.openvz.org/mailman/listinfo/devel
> > 





More information about the Devel mailing list