[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-Id: <20080820.135832.93663823.davem@davemloft.net>
Date: Wed, 20 Aug 2008 13:58:32 -0700 (PDT)
From: David Miller <davem@...emloft.net>
To: penberg@...helsinki.fi
Cc: vegard.nossum@...il.com, vegardno@....uio.no,
netdev@...r.kernel.org, linux-kernel@...r.kernel.org,
jgarzik@...ox.com, adobriyan@...il.com
Subject: Re: [RFC][PATCH] netconsole: avoid deadlock on printk from driver
code
From: Pekka J Enberg <penberg@...helsinki.fi>
Date: Wed, 20 Aug 2008 20:54:01 +0300 (EEST)
> @@ -1721,7 +1723,8 @@ static int rtl8139_start_xmit (struct sk
> return 0;
> }
>
> - spin_lock_irqsave(&tp->lock, flags);
> + local_irq_save(flags);
> + netif_tx_lock(dev);
> RTL_W32_F (TxStatus0 + (entry * sizeof (u32)),
> tp->tx_flag | max(len, (unsigned int)ETH_ZLEN));
The generic networking takes the TX lock for you, you don't
need to take it explicitly here.
You also cannot depend upon IRQ disabled locking, the generic
TX lock is only softirq safe, not hard IRQ safe.
This means you have to move TX descriptor reclaim into a
soft IRQ context, such as NAPI ->poll().
--
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