[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