ar9170usb: atomic pending urbs counter
authorChristian Lamparter <chunkeey@googlemail.com>
Sat, 17 Oct 2009 19:56:51 +0000 (21:56 +0200)
committerJohn W. Linville <linville@tuxdriver.com>
Tue, 27 Oct 2009 20:48:34 +0000 (16:48 -0400)
This patch follows "ar9170: atomic pending A-MPDU counter"
idea and converts another critical counter to atomic_*.

Signed-off-by: Christian Lamparter <chunkeey@googlemail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/ath/ar9170/usb.c
drivers/net/wireless/ath/ar9170/usb.h

index e974e5829e1a08dc7be666fea2705fc947b91f94..6bdcdf6d1cc0435de5918e8c8c4ba89f7216a40e 100644 (file)
@@ -108,15 +108,15 @@ static void ar9170_usb_submit_urb(struct ar9170_usb *aru)
                return ;
 
        spin_lock_irqsave(&aru->tx_urb_lock, flags);
-       if (aru->tx_submitted_urbs >= AR9170_NUM_TX_URBS) {
+       if (atomic_read(&aru->tx_submitted_urbs) >= AR9170_NUM_TX_URBS) {
                spin_unlock_irqrestore(&aru->tx_urb_lock, flags);
                return ;
        }
-       aru->tx_submitted_urbs++;
+       atomic_inc(&aru->tx_submitted_urbs);
 
        urb = usb_get_from_anchor(&aru->tx_pending);
        if (!urb) {
-               aru->tx_submitted_urbs--;
+               atomic_dec(&aru->tx_submitted_urbs);
                spin_unlock_irqrestore(&aru->tx_urb_lock, flags);
 
                return ;
@@ -133,7 +133,7 @@ static void ar9170_usb_submit_urb(struct ar9170_usb *aru)
                                err);
 
                usb_unanchor_urb(urb);
-               aru->tx_submitted_urbs--;
+               atomic_dec(&aru->tx_submitted_urbs);
                ar9170_tx_callback(&aru->common, urb->context);
        }
 
@@ -151,7 +151,7 @@ static void ar9170_usb_tx_urb_complete_frame(struct urb *urb)
                return ;
        }
 
-       aru->tx_submitted_urbs--;
+       atomic_dec(&aru->tx_submitted_urbs);
 
        ar9170_tx_callback(&aru->common, skb);
 
@@ -794,7 +794,7 @@ static int ar9170_usb_probe(struct usb_interface *intf,
        spin_lock_init(&aru->tx_urb_lock);
 
        aru->tx_pending_urbs = 0;
-       aru->tx_submitted_urbs = 0;
+       atomic_set(&aru->tx_submitted_urbs, 0);
 
        aru->common.stop = ar9170_usb_stop;
        aru->common.flush = ar9170_usb_flush;
index d098f4d5d2f2cac71684f50ecf7af5b8bfc2942e..a2ce3b169ceb3ea43757716ef03716114678506a 100644 (file)
@@ -67,7 +67,7 @@ struct ar9170_usb {
        bool req_one_stage_fw;
 
        spinlock_t tx_urb_lock;
-       unsigned int tx_submitted_urbs;
+       atomic_t tx_submitted_urbs;
        unsigned int tx_pending_urbs;
 
        struct completion cmd_wait;