aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/p54
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wireless/p54')
-rw-r--r--drivers/net/wireless/p54/p54common.c23
1 files changed, 4 insertions, 19 deletions
diff --git a/drivers/net/wireless/p54/p54common.c b/drivers/net/wireless/p54/p54common.c
index b8578529180..48d81d98e12 100644
--- a/drivers/net/wireless/p54/p54common.c
+++ b/drivers/net/wireless/p54/p54common.c
@@ -822,7 +822,6 @@ void p54_free_skb(struct ieee80211_hw *dev, struct sk_buff *skb)
822 struct ieee80211_tx_info *info; 822 struct ieee80211_tx_info *info;
823 struct p54_tx_info *range; 823 struct p54_tx_info *range;
824 unsigned long flags; 824 unsigned long flags;
825 u32 freed = 0, last_addr = priv->rx_start;
826 825
827 if (unlikely(!skb || !dev || !skb_queue_len(&priv->tx_queue))) 826 if (unlikely(!skb || !dev || !skb_queue_len(&priv->tx_queue)))
828 return; 827 return;
@@ -842,7 +841,6 @@ void p54_free_skb(struct ieee80211_hw *dev, struct sk_buff *skb)
842 841
843 ni = IEEE80211_SKB_CB(skb->prev); 842 ni = IEEE80211_SKB_CB(skb->prev);
844 mr = (struct p54_tx_info *)ni->rate_driver_data; 843 mr = (struct p54_tx_info *)ni->rate_driver_data;
845 last_addr = mr->end_addr;
846 } 844 }
847 if (skb->next != (struct sk_buff *)&priv->tx_queue) { 845 if (skb->next != (struct sk_buff *)&priv->tx_queue) {
848 struct ieee80211_tx_info *ni; 846 struct ieee80211_tx_info *ni;
@@ -850,16 +848,11 @@ void p54_free_skb(struct ieee80211_hw *dev, struct sk_buff *skb)
850 848
851 ni = IEEE80211_SKB_CB(skb->next); 849 ni = IEEE80211_SKB_CB(skb->next);
852 mr = (struct p54_tx_info *)ni->rate_driver_data; 850 mr = (struct p54_tx_info *)ni->rate_driver_data;
853 freed = mr->start_addr - last_addr; 851 }
854 } else
855 freed = priv->rx_end - last_addr;
856 __skb_unlink(skb, &priv->tx_queue); 852 __skb_unlink(skb, &priv->tx_queue);
857 spin_unlock_irqrestore(&priv->tx_queue.lock, flags); 853 spin_unlock_irqrestore(&priv->tx_queue.lock, flags);
858 dev_kfree_skb_any(skb); 854 dev_kfree_skb_any(skb);
859 855 p54_wake_free_queues(dev);
860 if (freed >= priv->headroom + sizeof(struct p54_hdr) + 48 +
861 IEEE80211_MAX_RTS_THRESHOLD + priv->tailroom)
862 p54_wake_free_queues(dev);
863} 856}
864EXPORT_SYMBOL_GPL(p54_free_skb); 857EXPORT_SYMBOL_GPL(p54_free_skb);
865 858
@@ -893,8 +886,6 @@ static void p54_rx_frame_sent(struct ieee80211_hw *dev, struct sk_buff *skb)
893 struct sk_buff *entry; 886 struct sk_buff *entry;
894 u32 addr = le32_to_cpu(hdr->req_id) - priv->headroom; 887 u32 addr = le32_to_cpu(hdr->req_id) - priv->headroom;
895 struct p54_tx_info *range = NULL; 888 struct p54_tx_info *range = NULL;
896 u32 freed = 0;
897 u32 last_addr = priv->rx_start;
898 unsigned long flags; 889 unsigned long flags;
899 int count, idx; 890 int count, idx;
900 891
@@ -908,7 +899,6 @@ static void p54_rx_frame_sent(struct ieee80211_hw *dev, struct sk_buff *skb)
908 899
909 range = (void *)info->rate_driver_data; 900 range = (void *)info->rate_driver_data;
910 if (range->start_addr != addr) { 901 if (range->start_addr != addr) {
911 last_addr = range->end_addr;
912 entry = entry->next; 902 entry = entry->next;
913 continue; 903 continue;
914 } 904 }
@@ -919,11 +909,8 @@ static void p54_rx_frame_sent(struct ieee80211_hw *dev, struct sk_buff *skb)
919 909
920 ni = IEEE80211_SKB_CB(entry->next); 910 ni = IEEE80211_SKB_CB(entry->next);
921 mr = (struct p54_tx_info *)ni->rate_driver_data; 911 mr = (struct p54_tx_info *)ni->rate_driver_data;
922 freed = mr->start_addr - last_addr; 912 }
923 } else
924 freed = priv->rx_end - last_addr;
925 913
926 last_addr = range->end_addr;
927 __skb_unlink(entry, &priv->tx_queue); 914 __skb_unlink(entry, &priv->tx_queue);
928 spin_unlock_irqrestore(&priv->tx_queue.lock, flags); 915 spin_unlock_irqrestore(&priv->tx_queue.lock, flags);
929 916
@@ -1010,9 +997,7 @@ static void p54_rx_frame_sent(struct ieee80211_hw *dev, struct sk_buff *skb)
1010 spin_unlock_irqrestore(&priv->tx_queue.lock, flags); 997 spin_unlock_irqrestore(&priv->tx_queue.lock, flags);
1011 998
1012out: 999out:
1013 if (freed >= priv->headroom + sizeof(struct p54_hdr) + 48 + 1000 p54_wake_free_queues(dev);
1014 IEEE80211_MAX_RTS_THRESHOLD + priv->tailroom)
1015 p54_wake_free_queues(dev);
1016} 1001}
1017 1002
1018static void p54_rx_eeprom_readback(struct ieee80211_hw *dev, 1003static void p54_rx_eeprom_readback(struct ieee80211_hw *dev,