]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/staging/rtl8712/rtl871x_sta_mgt.c
Merge remote-tracking branch 'staging/staging-next'
[karo-tx-linux.git] / drivers / staging / rtl8712 / rtl871x_sta_mgt.c
index 162e61c6ea06e4f3a3737f489af4fcdf9b77ac0a..3fe45b6d4853170b8cf5f2a18a264713bcefcd36 100644 (file)
@@ -89,16 +89,11 @@ static void mfree_all_stainfo(struct sta_priv *pstapriv)
        spin_unlock_irqrestore(&pstapriv->sta_hash_lock, irqL);
 }
 
-
-static void mfree_sta_priv_lock(struct sta_priv *pstapriv)
-{
-        mfree_all_stainfo(pstapriv); /* be done before free sta_hash_lock */
-}
-
 u32 _r8712_free_sta_priv(struct sta_priv *pstapriv)
 {
        if (pstapriv) {
-               mfree_sta_priv_lock(pstapriv);
+               /* be done before free sta_hash_lock */
+               mfree_all_stainfo(pstapriv);
                kfree(pstapriv->pallocated_stainfo_buf);
        }
        return _SUCCESS;
@@ -116,13 +111,11 @@ struct sta_info *r8712_alloc_stainfo(struct sta_priv *pstapriv, u8 *hwaddr)
        unsigned long flags;
 
        pfree_sta_queue = &pstapriv->free_sta_queue;
-       spin_lock_irqsave(&(pfree_sta_queue->lock), flags);
-       if (list_empty(&pfree_sta_queue->queue)) {
-               psta = NULL;
-       } else {
-               psta = LIST_CONTAINOR(pfree_sta_queue->queue.next,
-                                     struct sta_info, list);
-               list_del_init(&(psta->list));
+       spin_lock_irqsave(&pfree_sta_queue->lock, flags);
+       psta = list_first_entry_or_null(&pfree_sta_queue->queue,
+                                       struct sta_info, list);
+       if (psta) {
+               list_del_init(&psta->list);
                _init_stainfo(psta);
                memcpy(psta->hwaddr, hwaddr, ETH_ALEN);
                index = wifi_mac_hash(hwaddr);
@@ -130,7 +123,7 @@ struct sta_info *r8712_alloc_stainfo(struct sta_priv *pstapriv, u8 *hwaddr)
                        psta = NULL;
                        goto exit;
                }
-               phash_list = &(pstapriv->sta_hash[index]);
+               phash_list = &pstapriv->sta_hash[index];
                list_add_tail(&psta->hash_list, phash_list);
                pstapriv->asoc_sta_count++;
 
@@ -154,7 +147,7 @@ struct sta_info *r8712_alloc_stainfo(struct sta_priv *pstapriv, u8 *hwaddr)
                }
        }
 exit:
-       spin_unlock_irqrestore(&(pfree_sta_queue->lock), flags);
+       spin_unlock_irqrestore(&pfree_sta_queue->lock, flags);
        return psta;
 }