|
@@ -225,12 +225,6 @@ static void ath10k_htt_rx_ring_refill_retry(unsigned long arg)
|
|
ath10k_htt_rx_msdu_buff_replenish(htt);
|
|
ath10k_htt_rx_msdu_buff_replenish(htt);
|
|
}
|
|
}
|
|
|
|
|
|
-static unsigned ath10k_htt_rx_ring_elems(struct ath10k_htt *htt)
|
|
|
|
-{
|
|
|
|
- return (__le32_to_cpu(*htt->rx_ring.alloc_idx.vaddr) -
|
|
|
|
- htt->rx_ring.sw_rd_idx.msdu_payld) & htt->rx_ring.size_mask;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
void ath10k_htt_rx_detach(struct ath10k_htt *htt)
|
|
void ath10k_htt_rx_detach(struct ath10k_htt *htt)
|
|
{
|
|
{
|
|
int sw_rd_idx = htt->rx_ring.sw_rd_idx.msdu_payld;
|
|
int sw_rd_idx = htt->rx_ring.sw_rd_idx.msdu_payld;
|
|
@@ -276,8 +270,10 @@ static inline struct sk_buff *ath10k_htt_rx_netbuf_pop(struct ath10k_htt *htt)
|
|
|
|
|
|
lockdep_assert_held(&htt->rx_ring.lock);
|
|
lockdep_assert_held(&htt->rx_ring.lock);
|
|
|
|
|
|
- if (ath10k_htt_rx_ring_elems(htt) == 0)
|
|
|
|
- ath10k_warn("htt rx ring is empty!\n");
|
|
|
|
|
|
+ if (htt->rx_ring.fill_cnt == 0) {
|
|
|
|
+ ath10k_warn("tried to pop sk_buff from an empty rx ring\n");
|
|
|
|
+ return NULL;
|
|
|
|
+ }
|
|
|
|
|
|
idx = htt->rx_ring.sw_rd_idx.msdu_payld;
|
|
idx = htt->rx_ring.sw_rd_idx.msdu_payld;
|
|
msdu = htt->rx_ring.netbufs_ring[idx];
|
|
msdu = htt->rx_ring.netbufs_ring[idx];
|
|
@@ -312,9 +308,6 @@ static int ath10k_htt_rx_amsdu_pop(struct ath10k_htt *htt,
|
|
|
|
|
|
lockdep_assert_held(&htt->rx_ring.lock);
|
|
lockdep_assert_held(&htt->rx_ring.lock);
|
|
|
|
|
|
- if (ath10k_htt_rx_ring_elems(htt) == 0)
|
|
|
|
- ath10k_warn("htt rx ring is empty!\n");
|
|
|
|
-
|
|
|
|
if (htt->rx_confused) {
|
|
if (htt->rx_confused) {
|
|
ath10k_warn("htt is confused. refusing rx\n");
|
|
ath10k_warn("htt is confused. refusing rx\n");
|
|
return 0;
|
|
return 0;
|