@@ -1020,8 +1020,6 @@ void mt76u_stop_tx(struct mt76_dev *dev)
1020
1020
{
1021
1021
int ret ;
1022
1022
1023
- mt76_worker_disable (& dev -> tx_worker );
1024
-
1025
1023
ret = wait_event_timeout (dev -> tx_wait , !mt76_has_tx_pending (& dev -> phy ),
1026
1024
HZ / 5 );
1027
1025
if (!ret ) {
@@ -1040,6 +1038,8 @@ void mt76u_stop_tx(struct mt76_dev *dev)
1040
1038
usb_kill_urb (q -> entry [j ].urb );
1041
1039
}
1042
1040
1041
+ mt76_worker_disable (& dev -> tx_worker );
1042
+
1043
1043
/* On device removal we maight queue skb's, but mt76u_tx_kick()
1044
1044
* will fail to submit urb, cleanup those skb's manually.
1045
1045
*/
@@ -1048,18 +1048,19 @@ void mt76u_stop_tx(struct mt76_dev *dev)
1048
1048
if (!q )
1049
1049
continue ;
1050
1050
1051
- entry = q -> entry [q -> tail ];
1052
- q -> entry [q -> tail ].done = false;
1053
-
1054
- mt76_queue_tx_complete (dev , q , & entry );
1051
+ while (q -> queued > 0 ) {
1052
+ entry = q -> entry [q -> tail ];
1053
+ q -> entry [q -> tail ].done = false;
1054
+ mt76_queue_tx_complete (dev , q , & entry );
1055
+ }
1055
1056
}
1057
+
1058
+ mt76_worker_enable (& dev -> tx_worker );
1056
1059
}
1057
1060
1058
1061
cancel_work_sync (& dev -> usb .stat_work );
1059
1062
clear_bit (MT76_READING_STATS , & dev -> phy .state );
1060
1063
1061
- mt76_worker_enable (& dev -> tx_worker );
1062
-
1063
1064
mt76_tx_status_check (dev , NULL , true);
1064
1065
}
1065
1066
EXPORT_SYMBOL_GPL (mt76u_stop_tx );
0 commit comments