Revert "NET: Fix locking issues in PPP, 6pack, mkiss and strip line disciplines."
[linux-2.6.git] / drivers / net / wireless / strip.c
index 3d39f65..38366a5 100644 (file)
@@ -856,7 +856,6 @@ static int strip_change_mtu(struct net_device *dev, int new_mtu)
        unsigned char *orbuff = strip_info->rx_buff;
        unsigned char *osbuff = strip_info->sx_buff;
        unsigned char *otbuff = strip_info->tx_buff;
-       unsigned long flags;
 
        if (new_mtu > MAX_SEND_MTU) {
                printk(KERN_ERR
@@ -865,11 +864,11 @@ static int strip_change_mtu(struct net_device *dev, int new_mtu)
                return -EINVAL;
        }
 
-       spin_lock_irqsave(&strip_lock, flags);
+       spin_lock_bh(&strip_lock);
        if (!allocate_buffers(strip_info, new_mtu)) {
                printk(KERN_ERR "%s: unable to grow strip buffers, MTU change cancelled.\n",
                       strip_info->dev->name);
-               spin_unlock_irqrestore(&strip_lock, flags);
+               spin_unlock_bh(&strip_lock);
                return -ENOMEM;
        }
 
@@ -893,7 +892,7 @@ static int strip_change_mtu(struct net_device *dev, int new_mtu)
                }
        }
        strip_info->tx_head = strip_info->tx_buff;
-       spin_unlock_irqrestore(&strip_lock, flags);
+       spin_unlock_bh(&strip_lock);
 
        printk(KERN_NOTICE "%s: strip MTU changed fom %d to %d.\n",
               strip_info->dev->name, old_mtu, strip_info->mtu);
@@ -984,13 +983,10 @@ static void strip_seq_neighbours(struct seq_file *seq,
                           const MetricomNodeTable * table,
                           const char *title)
 {
-       unsigned long flags;
+       /* We wrap this in a do/while loop, so if the table changes */
+       /* while we're reading it, we just go around and try again. */
        struct timeval t;
 
-       /*
-        * We wrap this in a do/while loop, so if the table changes
-        * while we're reading it, we just go around and try again.
-        */
        do {
                int i;
                t = table->timestamp;
@@ -999,9 +995,9 @@ static void strip_seq_neighbours(struct seq_file *seq,
                for (i = 0; i < table->num_nodes; i++) {
                        MetricomNode node;
 
-                       spin_lock_irqsave(&strip_lock, flags);
+                       spin_lock_bh(&strip_lock);
                        node = table->node[i];
-                       spin_unlock_irqrestore(&strip_lock, flags);
+                       spin_unlock_bh(&strip_lock);
                        seq_printf(seq, "  %s\n", node.c);
                }
        } while (table->timestamp.tv_sec != t.tv_sec
@@ -1540,7 +1536,6 @@ static void strip_send(struct strip *strip_info, struct sk_buff *skb)
 static int strip_xmit(struct sk_buff *skb, struct net_device *dev)
 {
        struct strip *strip_info = netdev_priv(dev);
-       unsigned long flags;
 
        if (!netif_running(dev)) {
                printk(KERN_ERR "%s: xmit call when iface is down\n",
@@ -1579,11 +1574,11 @@ static int strip_xmit(struct sk_buff *skb, struct net_device *dev)
                               strip_info->dev->name, sx_pps_count / 8);
        }
 
-       spin_lock_irqsave(&strip_lock, flags);
+       spin_lock_bh(&strip_lock);
 
        strip_send(strip_info, skb);
 
-       spin_unlock_irqrestore(&strip_lock, flags);
+       spin_unlock_bh(&strip_lock);
 
        if (skb)
                dev_kfree_skb(skb);
@@ -2268,13 +2263,12 @@ static void strip_receive_buf(struct tty_struct *tty, const unsigned char *cp,
 {
        struct strip *strip_info = tty->disc_data;
        const unsigned char *end = cp + count;
-       unsigned long flags;
 
        if (!strip_info || strip_info->magic != STRIP_MAGIC
            || !netif_running(strip_info->dev))
                return;
 
-       spin_lock_irqsave(&strip_lock, flags);
+       spin_lock_bh(&strip_lock);
 #if 0
        {
                struct timeval tv;
@@ -2341,7 +2335,7 @@ static void strip_receive_buf(struct tty_struct *tty, const unsigned char *cp,
                }
                cp++;
        }
-       spin_unlock_irqrestore(&strip_lock, flags);
+       spin_unlock_bh(&strip_lock);
 }
 
 
@@ -2529,11 +2523,9 @@ static void strip_dev_setup(struct net_device *dev)
 
 static void strip_free(struct strip *strip_info)
 {
-       unsigned long flags;
-
-       spin_lock_irqsave(&strip_lock, flags);
+       spin_lock_bh(&strip_lock);
        list_del_rcu(&strip_info->list);
-       spin_unlock_irqrestore(&strip_lock, flags);
+       spin_unlock_bh(&strip_lock);
 
        strip_info->magic = 0;
 
@@ -2547,7 +2539,6 @@ static void strip_free(struct strip *strip_info)
 static struct strip *strip_alloc(void)
 {
        struct list_head *n;
-       unsigned long flags;
        struct net_device *dev;
        struct strip *strip_info;
 
@@ -2571,7 +2562,7 @@ static struct strip *strip_alloc(void)
        strip_info->idle_timer.function = strip_IdleTask;
 
 
-       spin_lock_irqsave(&strip_lock, flags);
+       spin_lock_bh(&strip_lock);
  rescan:
        /*
         * Search the list to find where to put our new entry
@@ -2590,7 +2581,7 @@ static struct strip *strip_alloc(void)
        sprintf(dev->name, "st%ld", dev->base_addr);
 
        list_add_tail_rcu(&strip_info->list, &strip_list);
-       spin_unlock_irqrestore(&strip_lock, flags);
+       spin_unlock_bh(&strip_lock);
 
        return strip_info;
 }