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)
241241 struct sk_buff * skb ;
242242 unsigned long flags ;
243243
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+ }
245256
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 );
248258 if (WARN_ONCE (q -> e [q -> start ].urb != urb , "TX urb mismatch" ))
249259 goto out ;
250260
251261 skb = q -> e [q -> start ].skb ;
262+ q -> e [q -> start ].skb = NULL ;
252263 trace_mt_tx_dma_done (dev , skb );
253264
254265 __skb_queue_tail (& dev -> tx_skb_done , skb );
@@ -448,10 +459,10 @@ static void mt7601u_free_tx_queue(struct mt7601u_tx_queue *q)
448459{
449460 int i ;
450461
451- WARN_ON (q -> used );
452-
453462 for (i = 0 ; i < q -> entries ; i ++ ) {
454463 usb_poison_urb (q -> e [i ].urb );
464+ if (q -> e [i ].skb )
465+ mt7601u_tx_status (q -> dev , q -> e [i ].skb );
455466 usb_free_urb (q -> e [i ].urb );
456467 }
457468}
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)
117117 info -> status .rates [0 ].idx = -1 ;
118118 info -> flags |= IEEE80211_TX_STAT_ACK ;
119119
120- spin_lock (& dev -> mac_lock );
120+ spin_lock_bh (& dev -> mac_lock );
121121 ieee80211_tx_status (dev -> hw , skb );
122- spin_unlock (& dev -> mac_lock );
122+ spin_unlock_bh (& dev -> mac_lock );
123123}
124124
125125static int mt7601u_skb_rooms (struct mt7601u_dev * dev , struct sk_buff * skb )
You can’t perform that action at this time.
0 commit comments