[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <1383348890.1737.40.camel@bwh-desktop.uk.level5networks.com>
Date: Fri, 1 Nov 2013 23:34:50 +0000
From: Ben Hutchings <bhutchings@...arflare.com>
To: David Miller <davem@...emloft.net>
CC: <xiyou.wangcong@...il.com>, <mchan@...adcom.com>,
<tdmackey@...leanhaiku.com>, <netdev@...r.kernel.org>,
<linux-kernel@...r.kernel.org>
Subject: Re: [PATCH] bnx2: Use dev_kfree_skb_any() in bnx2_tx_int()
On Fri, 2013-11-01 at 18:01 -0400, David Miller wrote:
> From: Cong Wang <xiyou.wangcong@...il.com>
> Date: Thu, 31 Oct 2013 21:19:16 -0700
>
> > 2013年10月30日 下午9:26于 "David Miller" <davem@...emloft.net>写道:
> >>
> >> We have to provide a softint compatible environment for this callback
> >> to run in else everything is completely broken.
> >>
> >> All these drivers can safely assume softirq safe locking is
> >> sufficient, you're suggesting we need to take this hardirq safety and
> >> I'm really not willing to allow things to go that far. A lot of
> >> effort has been expended precisely to avoid that kind of overhead and
> >> cost.
> >
> > Alright, I am thinking to move netpoll_poll_dev() to a delayed work.
>
> What if the printk is outputting a message that will help us discover
> that work queues are deadlocked?
>
> You can't delay the message, because every layer of indirection you
> add increases the possibility that the message it never seen. You
> have to do it synchronously.
As you've said, the ndo_start_xmit and NAPI poll operations are intended
to be called in softirq context, so everything that interlocks with them
will use spin_lock_bh(). Calling them from hardirq context obviously
opens the possibility of a deadlock. How do you expect anyone to solve
that?
I think that most of the time netpoll doesn't actually call the NAPI
poll function, and the driver ndo_start_xmit function doesn't take any
locks, so we don't actually hit the deadlock in practice (on mainline
kernels - RT is a different story).
Obviously, the less machinery netpoll relies on continuing to work, the
better, so it should preferably defer to sofirq context rather than
workqueue context. I think this means hooking queue_process() into
net_tx_action(), and then cutting out much of the rest of netpoll.
Ben.
--
Ben Hutchings, Staff Engineer, Solarflare
Not speaking for my employer; that's the marketing department's job.
They asked us to note that Solarflare product names are trademarked.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists