lkml.org 
[lkml]   [2007]   [Jan]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
Subject[PATCH] z85230: spinlock logic
At some point someone added a spin_lock(&dev->lock) to the IRQ handler
for the Z85230 driver. This actually correctly fixes a bug but the
neccessary changes to remove the chan->lock calls in the event handlers
were not made (c->lock is the same lock).

Simona Dascenzo reported the problem with the driver and this patch should
fix the problem he found.



--- linux.vanilla-2.6.20-rc4/drivers/net/wan/z85230.c 2007-01-01 21:41:27.000000000 +0000
+++ linux-2.6.20-rc4/drivers/net/wan/z85230.c 2007-01-08 14:50:15.860939112 +0000
@@ -331,8 +331,7 @@
static void z8530_rx(struct z8530_channel *c)
{
u8 ch,stat;
- spin_lock(c->lock);
-
+
while(1)
{
/* FIFO empty ? */
@@ -390,7 +389,6 @@
*/
write_zsctrl(c, ERR_RES);
write_zsctrl(c, RES_H_IUS);
- spin_unlock(c->lock);
}


@@ -406,7 +404,6 @@

static void z8530_tx(struct z8530_channel *c)
{
- spin_lock(c->lock);
while(c->txcount) {
/* FIFO full ? */
if(!(read_zsreg(c, R0)&4))
@@ -434,7 +431,6 @@

z8530_tx_done(c);
write_zsctrl(c, RES_H_IUS);
- spin_unlock(c->lock);
}

/**
@@ -452,7 +448,6 @@
{
u8 status, altered;

- spin_lock(chan->lock);
status=read_zsreg(chan, R0);
altered=chan->status^status;

@@ -487,7 +482,6 @@
}
write_zsctrl(chan, RES_EXT_INT);
write_zsctrl(chan, RES_H_IUS);
- spin_unlock(chan->lock);
}

struct z8530_irqhandler z8530_sync=
@@ -511,7 +505,6 @@

static void z8530_dma_rx(struct z8530_channel *chan)
{
- spin_lock(chan->lock);
if(chan->rxdma_on)
{
/* Special condition check only */
@@ -534,7 +527,6 @@
/* DMA is off right now, drain the slow way */
z8530_rx(chan);
}
- spin_unlock(chan->lock);
}

/**
@@ -547,7 +539,6 @@

static void z8530_dma_tx(struct z8530_channel *chan)
{
- spin_lock(chan->lock);
if(!chan->dma_tx)
{
printk(KERN_WARNING "Hey who turned the DMA off?\n");
@@ -557,7 +548,6 @@
/* This shouldnt occur in DMA mode */
printk(KERN_ERR "DMA tx - bogus event!\n");
z8530_tx(chan);
- spin_unlock(chan->lock);
}

/**
@@ -596,7 +586,6 @@
}
}

- spin_lock(chan->lock);
if(altered&chan->dcdcheck)
{
if(status&chan->dcdcheck)
@@ -618,7 +607,6 @@

write_zsctrl(chan, RES_EXT_INT);
write_zsctrl(chan, RES_H_IUS);
- spin_unlock(chan->lock);
}

struct z8530_irqhandler z8530_dma_sync=
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2007-01-08 16:15    [W:0.431 / U:0.224 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site