File tree Expand file tree Collapse file tree 2 files changed +18
-7
lines changed
drivers/net/wireless/mediatek/mt7601u Expand file tree Collapse file tree 2 files changed +18
-7
lines changed Original file line number Diff line number Diff line change @@ -241,14 +241,25 @@ static void mt7601u_complete_tx(struct urb *urb)
241
241
struct sk_buff * skb ;
242
242
unsigned long flags ;
243
243
244
- spin_lock_irqsave (& dev -> tx_lock , flags );
244
+ switch (urb -> status ) {
245
+ case - ECONNRESET :
246
+ case - ESHUTDOWN :
247
+ case - ENOENT :
248
+ return ;
249
+ default :
250
+ dev_err_ratelimited (dev -> dev , "tx urb failed: %d\n" ,
251
+ urb -> status );
252
+ /* fall through */
253
+ case 0 :
254
+ break ;
255
+ }
245
256
246
- if (mt7601u_urb_has_error (urb ))
247
- dev_err (dev -> dev , "Error: TX urb failed:%d\n" , urb -> status );
257
+ spin_lock_irqsave (& dev -> tx_lock , flags );
248
258
if (WARN_ONCE (q -> e [q -> start ].urb != urb , "TX urb mismatch" ))
249
259
goto out ;
250
260
251
261
skb = q -> e [q -> start ].skb ;
262
+ q -> e [q -> start ].skb = NULL ;
252
263
trace_mt_tx_dma_done (dev , skb );
253
264
254
265
__skb_queue_tail (& dev -> tx_skb_done , skb );
@@ -448,10 +459,10 @@ static void mt7601u_free_tx_queue(struct mt7601u_tx_queue *q)
448
459
{
449
460
int i ;
450
461
451
- WARN_ON (q -> used );
452
-
453
462
for (i = 0 ; i < q -> entries ; i ++ ) {
454
463
usb_poison_urb (q -> e [i ].urb );
464
+ if (q -> e [i ].skb )
465
+ mt7601u_tx_status (q -> dev , q -> e [i ].skb );
455
466
usb_free_urb (q -> e [i ].urb );
456
467
}
457
468
}
Original file line number Diff line number Diff line change @@ -117,9 +117,9 @@ void mt7601u_tx_status(struct mt7601u_dev *dev, struct sk_buff *skb)
117
117
info -> status .rates [0 ].idx = -1 ;
118
118
info -> flags |= IEEE80211_TX_STAT_ACK ;
119
119
120
- spin_lock (& dev -> mac_lock );
120
+ spin_lock_bh (& dev -> mac_lock );
121
121
ieee80211_tx_status (dev -> hw , skb );
122
- spin_unlock (& dev -> mac_lock );
122
+ spin_unlock_bh (& dev -> mac_lock );
123
123
}
124
124
125
125
static int mt7601u_skb_rooms (struct mt7601u_dev * dev , struct sk_buff * skb )
You can’t perform that action at this time.
0 commit comments