Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d08d2839 authored by Komuro's avatar Komuro Committed by Jeff Garzik
Browse files

modify 3c589_cs to be SMP safe



1. EL3WINDOW is always 1 when lock is not held.

2. The second argument of el3_interrupt is 'void *dev_id',
not 'struct el3_private *lp'.

Signed-off-by: default avatar <komurojun-mbn@nifty.com>
Signed-off-by: default avatarJeff Garzik <jeff@garzik.org>
parent 2596627c
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -606,11 +606,14 @@ static int el3_start_xmit(struct sk_buff *skb, struct net_device *dev)
{
    kio_addr_t ioaddr = dev->base_addr;
    struct el3_private *priv = netdev_priv(dev);
    unsigned long flags;

    DEBUG(3, "%s: el3_start_xmit(length = %ld) called, "
	  "status %4.4x.\n", dev->name, (long)skb->len,
	  inw(ioaddr + EL3_STATUS));

    spin_lock_irqsave(&priv->lock, flags);    

    priv->stats.tx_bytes += skb->len;

    /* Put out the doubleword header... */
@@ -628,6 +631,7 @@ static int el3_start_xmit(struct sk_buff *skb, struct net_device *dev)

    dev_kfree_skb(skb);
    pop_tx_status(dev);
    spin_unlock_irqrestore(&priv->lock, flags);    
    
    return 0;
}
@@ -729,14 +733,13 @@ static void media_check(unsigned long arg)

    if (!netif_device_present(dev)) goto reschedule;

    EL3WINDOW(1);
    /* Check for pending interrupt with expired latency timer: with
       this, we can limp along even if the interrupt is blocked */
    if ((inw(ioaddr + EL3_STATUS) & IntLatch) &&
	(inb(ioaddr + EL3_TIMER) == 0xff)) {
	if (!lp->fast_poll)
	    printk(KERN_WARNING "%s: interrupt(s) dropped!\n", dev->name);
	el3_interrupt(dev->irq, lp);
	el3_interrupt(dev->irq, dev);
	lp->fast_poll = HZ;
    }
    if (lp->fast_poll) {