netdev
[Top] [All Lists]

Re: [PATCH] Tulip interrupt uses non IRQ safe spinlock

To: Mark Broadbent <markb@xxxxxxxxxxxxxx>
Subject: Re: [PATCH] Tulip interrupt uses non IRQ safe spinlock
From: Jeff Garzik <jgarzik@xxxxxxxxx>
Date: Fri, 27 May 2005 22:24:03 -0400
Cc: linux-kernel@xxxxxxxxxxxxxxx, netdev@xxxxxxxxxxx
In-reply-to: <E1DRFqC-00028H-Qi@tigger>
References: <E1DRFqC-00028H-Qi@tigger>
Sender: netdev-bounce@xxxxxxxxxxx
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.6) Gecko/20050328 Fedora/1.7.6-1.2.5
Mark Broadbent wrote:
The interrupt handling code in the tulip network driver appears to use a non IRQ safe spinlock in an interrupt context. The following patch should correct this.

Signed-off-by: Mark Broadbent <markb@xxxxxxxxxxxxxx>

Index: linux-2.6.11/drivers/net/tulip/interrupt.c
===================================================================
--- linux-2.6.11.orig/drivers/net/tulip/interrupt.c     2005-03-07 
18:11:23.000000000 +0000
+++ linux-2.6.11/drivers/net/tulip/interrupt.c  2005-04-28 16:16:23.000000000 
+0100
@@ -567,8 +567,9 @@
if (csr5 & (TxNoBuf | TxDied | TxIntr | TimerInt)) {
                        unsigned int dirty_tx;
+                       unsigned long flags;
- spin_lock(&tp->lock);
+                       spin_lock_irqsave(&tp->lock, flags);
for (dirty_tx = tp->dirty_tx; tp->cur_tx - dirty_tx > 0;
                                 dirty_tx++) {
@@ -640,7 +641,7 @@
                                                   dev->name, csr5, 
ioread32(ioaddr + CSR6), tp->csr6);
                                tulip_restart_rxtx(tp);
                        }
-                       spin_unlock(&tp->lock);
+                       spin_unlock_irqrestore(&tp->lock, flags);

It's already inside the interrupt handler, so this patch is not needed.

        Jeff




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