[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20100823183227.GB12906@hmsreliant.think-freely.org>
Date: Mon, 23 Aug 2010 14:32:27 -0400
From: Neil Horman <nhorman@...driver.com>
To: David Miller <davem@...emloft.net>
Cc: netdev@...r.kernel.org, klassert@...hematik.tu-chemnitz.de
Subject: Re: [PATCH] Fix deadlock between boomerang_interrupt and
boomerang_start_tx in 3c59x
On Wed, Aug 11, 2010 at 11:13:34PM -0700, David Miller wrote:
> From: Neil Horman <nhorman@...driver.com>
> Date: Wed, 11 Aug 2010 11:00:18 -0400
>
> > @@ -2133,6 +2134,15 @@ boomerang_start_xmit(struct sk_buff *skb, struct net_device *dev)
> > dev->name, vp->cur_tx);
> > }
> >
> > + /*
> > + * We can't allow a recursion from our interrupt handler back into the
> > + * tx routine, as they take the same spin lock, and that causes
> > + * deadlock. Just return NETDEV_TX_BUSY and let the stack try again in
> > + * a bit
> > + */
> > + if (vp->handling_irq)
> > + return NETDEV_TX_BUSY;
> > +
> > if (vp->cur_tx - vp->dirty_tx >= TX_RING_SIZE) {
> > if (vortex_debug > 0)
> > pr_warning("%s: BUG! Tx Ring full, refusing to send buffer.\n",
>
> This is just as racy as your previous patch :-)
>
> You don't hold vp->lock so right after testing this another cpu can
> enter the interrupt handler, take the lock, and set vp->handling_irq
> to '1'.
>
> This is becomming hopeless, you can't synchronize the state without
> holding the same lock which is giving us trouble in the first place.
>
> Maybe just toss the pr_*() statements from the interrupt handler.
>
> This driver is old enough that the easiest to verify fix is probably
> the best one to make.
>
>
Dave, any further thoughts here? Is the explination regarding the lack of
lock-race satisfactory, or would you rather we just pull all the pr_* calls from
the interrupt handler?
Neil
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists