diff options
Diffstat (limited to 'drivers/net/bna/bnad.c')
-rw-r--r-- | drivers/net/bna/bnad.c | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/drivers/net/bna/bnad.c b/drivers/net/bna/bnad.c index 5e7a0307f853..f77593638c57 100644 --- a/drivers/net/bna/bnad.c +++ b/drivers/net/bna/bnad.c | |||
@@ -109,7 +109,7 @@ static void | |||
109 | bnad_free_all_txbufs(struct bnad *bnad, | 109 | bnad_free_all_txbufs(struct bnad *bnad, |
110 | struct bna_tcb *tcb) | 110 | struct bna_tcb *tcb) |
111 | { | 111 | { |
112 | u16 unmap_cons; | 112 | u32 unmap_cons; |
113 | struct bnad_unmap_q *unmap_q = tcb->unmap_q; | 113 | struct bnad_unmap_q *unmap_q = tcb->unmap_q; |
114 | struct bnad_skb_unmap *unmap_array; | 114 | struct bnad_skb_unmap *unmap_array; |
115 | struct sk_buff *skb = NULL; | 115 | struct sk_buff *skb = NULL; |
@@ -244,7 +244,7 @@ bnad_tx_free_tasklet(unsigned long bnad_ptr) | |||
244 | { | 244 | { |
245 | struct bnad *bnad = (struct bnad *)bnad_ptr; | 245 | struct bnad *bnad = (struct bnad *)bnad_ptr; |
246 | struct bna_tcb *tcb; | 246 | struct bna_tcb *tcb; |
247 | u32 acked; | 247 | u32 acked = 0; |
248 | int i, j; | 248 | int i, j; |
249 | 249 | ||
250 | for (i = 0; i < bnad->num_tx; i++) { | 250 | for (i = 0; i < bnad->num_tx; i++) { |
@@ -263,6 +263,20 @@ bnad_tx_free_tasklet(unsigned long bnad_ptr) | |||
263 | smp_mb__before_clear_bit(); | 263 | smp_mb__before_clear_bit(); |
264 | clear_bit(BNAD_TXQ_FREE_SENT, &tcb->flags); | 264 | clear_bit(BNAD_TXQ_FREE_SENT, &tcb->flags); |
265 | } | 265 | } |
266 | if (unlikely(!test_bit(BNAD_TXQ_TX_STARTED, | ||
267 | &tcb->flags))) | ||
268 | continue; | ||
269 | if (netif_queue_stopped(bnad->netdev)) { | ||
270 | if (acked && netif_carrier_ok(bnad->netdev) && | ||
271 | BNA_QE_FREE_CNT(tcb, tcb->q_depth) >= | ||
272 | BNAD_NETIF_WAKE_THRESHOLD) { | ||
273 | netif_wake_queue(bnad->netdev); | ||
274 | /* TODO */ | ||
275 | /* Counters for individual TxQs? */ | ||
276 | BNAD_UPDATE_CTR(bnad, | ||
277 | netif_queue_wakeup); | ||
278 | } | ||
279 | } | ||
266 | } | 280 | } |
267 | } | 281 | } |
268 | } | 282 | } |
@@ -334,8 +348,6 @@ bnad_free_all_rxbufs(struct bnad *bnad, struct bna_rcb *rcb) | |||
334 | skb = unmap_q->unmap_array[unmap_cons].skb; | 348 | skb = unmap_q->unmap_array[unmap_cons].skb; |
335 | if (!skb) | 349 | if (!skb) |
336 | continue; | 350 | continue; |
337 | BUG_ON(!(pci_unmap_addr( | ||
338 | &unmap_q->unmap_array[unmap_cons], dma_addr))); | ||
339 | unmap_q->unmap_array[unmap_cons].skb = NULL; | 351 | unmap_q->unmap_array[unmap_cons].skb = NULL; |
340 | pci_unmap_single(bnad->pcidev, pci_unmap_addr(&unmap_q-> | 352 | pci_unmap_single(bnad->pcidev, pci_unmap_addr(&unmap_q-> |
341 | unmap_array[unmap_cons], | 353 | unmap_array[unmap_cons], |