diff options
Diffstat (limited to 'drivers/staging/rtl8712/rtl871x_sta_mgt.c')
-rw-r--r-- | drivers/staging/rtl8712/rtl871x_sta_mgt.c | 25 |
1 files changed, 9 insertions, 16 deletions
diff --git a/drivers/staging/rtl8712/rtl871x_sta_mgt.c b/drivers/staging/rtl8712/rtl871x_sta_mgt.c index 162e61c6ea06..3fe45b6d4853 100644 --- a/drivers/staging/rtl8712/rtl871x_sta_mgt.c +++ b/drivers/staging/rtl8712/rtl871x_sta_mgt.c @@ -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; } |