netdev
[Top] [All Lists]

Re: [PATCH] Prevent netpoll hanging when link is down

To: Andi Kleen <ak@xxxxxxx>
Subject: Re: [PATCH] Prevent netpoll hanging when link is down
From: Matt Mackall <mpm@xxxxxxxxxxx>
Date: Mon, 11 Oct 2004 11:36:01 -0500
Cc: "David S. Miller" <davem@xxxxxxxxxxxxx>, Andrew Morton <akpm@xxxxxxxx>, colin@xxxxxxxxxx, netdev@xxxxxxxxxxx
In-reply-to: <20041011163226.GG26350@xxxxxxxxxxxxx>
References: <20041007112846.5c85b2d9.davem@xxxxxxxxxxxxx> <20041007224422.1c1bea95@xxxxxxxxxxxxxxx> <20041007214505.GB31558@xxxxxxxxxxxxx> <20041008090610.70d7e183@pirandello> <20041008220001.GE31237@xxxxxxxxx> <20041008151839.01823e0c.akpm@xxxxxxxx> <20041010205928.6e54df7e.davem@xxxxxxxxxxxxx> <20041011154000.GB26350@xxxxxxxxxxxxx> <20041011162224.GL31237@xxxxxxxxx> <20041011163226.GG26350@xxxxxxxxxxxxx>
Sender: netdev-bounce@xxxxxxxxxxx
User-agent: Mutt/1.3.28i
On Mon, Oct 11, 2004 at 06:32:26PM +0200, Andi Kleen wrote:
> On Mon, Oct 11, 2004 at 11:22:24AM -0500, Matt Mackall wrote:
> > On Mon, Oct 11, 2004 at 05:40:00PM +0200, Andi Kleen wrote:
> > > On Sun, Oct 10, 2004 at 08:59:28PM -0700, David S. Miller wrote:
> > > > 
> > > > Wait, I think I see the problem.
> > > > 
> > > > Sungem processes link status in it's ->poll() NAPI handler.
> > > > This occurs via calls to gem_pcs_interrupt(), for example.
> > > > Non-pcs sungem variants use a timer to poll link status.
> > > > 
> > > > When the link changes state, this link state processing
> > > > does printk()'s.
> > > > 
> > > > So perhaps that is why it deadlocks.
> > > 
> > > printk handles recursion with the down_trylock on console_sem.
> > > So it shouldn't deadlock.
> > 
> > If we're in the ->poll() handler for non-netpoll reasons, and the link
> > state changes, causing a printk, we'll potentially reenter ->poll() via
> > netconsole.
> 
> It won't because printk catches the case.

It's not recursion on printk that's a problem, it's recursion on
->poll() and attempting to take whatever internal driver locks.

-- 
Mathematics is the supreme nostalgia of our time.

<Prev in Thread] Current Thread [Next in Thread>