@@ -805,9 +805,10 @@ int mt76u_resume_rx(struct mt76_dev *dev)
805805}
806806EXPORT_SYMBOL_GPL (mt76u_resume_rx );
807807
808- static void mt76u_tx_worker (struct mt76_worker * w )
808+ static void mt76u_status_worker (struct mt76_worker * w )
809809{
810- struct mt76_dev * dev = container_of (w , struct mt76_dev , tx_worker );
810+ struct mt76_usb * usb = container_of (w , struct mt76_usb , status_worker );
811+ struct mt76_dev * dev = container_of (usb , struct mt76_dev , usb );
811812 struct mt76_queue_entry entry ;
812813 struct mt76_queue * q ;
813814 bool wake ;
@@ -833,7 +834,7 @@ static void mt76u_tx_worker(struct mt76_worker *w)
833834 if (!q -> queued )
834835 wake_up (& dev -> tx_wait );
835836
836- mt76_txq_schedule (& dev -> phy , i );
837+ mt76_worker_schedule (& dev -> tx_worker );
837838
838839 if (dev -> drv -> tx_status_data &&
839840 !test_and_set_bit (MT76_READING_STATS , & dev -> phy .state ))
@@ -877,7 +878,7 @@ static void mt76u_complete_tx(struct urb *urb)
877878 dev_err (dev -> dev , "tx urb failed: %d\n" , urb -> status );
878879 e -> done = true;
879880
880- mt76_worker_schedule (& dev -> tx_worker );
881+ mt76_worker_schedule (& dev -> usb . status_worker );
881882}
882883
883884static int
@@ -1016,6 +1017,8 @@ static void mt76u_free_tx(struct mt76_dev *dev)
10161017{
10171018 int i ;
10181019
1020+ mt76_worker_teardown (& dev -> usb .status_worker );
1021+
10191022 for (i = 0 ; i < IEEE80211_NUM_ACS ; i ++ ) {
10201023 struct mt76_queue * q ;
10211024 int j ;
@@ -1036,6 +1039,7 @@ void mt76u_stop_tx(struct mt76_dev *dev)
10361039 int ret ;
10371040
10381041 mt76_worker_disable (& dev -> tx_worker );
1042+ mt76_worker_disable (& dev -> usb .status_worker );
10391043
10401044 ret = wait_event_timeout (dev -> tx_wait , !mt76_has_tx_pending (& dev -> phy ),
10411045 HZ / 5 );
@@ -1074,6 +1078,7 @@ void mt76u_stop_tx(struct mt76_dev *dev)
10741078 clear_bit (MT76_READING_STATS , & dev -> phy .state );
10751079
10761080 mt76_worker_enable (& dev -> tx_worker );
1081+ mt76_worker_enable (& dev -> usb .status_worker );
10771082
10781083 mt76_tx_status_check (dev , NULL , true);
10791084}
@@ -1124,7 +1129,6 @@ int mt76u_init(struct mt76_dev *dev,
11241129 mt76u_ops .rmw = ext ? mt76u_rmw_ext : mt76u_rmw ;
11251130 mt76u_ops .write_copy = ext ? mt76u_copy_ext : mt76u_copy ;
11261131
1127- dev -> tx_worker .fn = mt76u_tx_worker ;
11281132 INIT_WORK (& usb -> stat_work , mt76u_tx_status_data );
11291133
11301134 usb -> data_len = usb_maxpacket (udev , usb_sndctrlpipe (udev , 0 ), 1 );
@@ -1152,7 +1156,13 @@ int mt76u_init(struct mt76_dev *dev,
11521156 if (err )
11531157 return err ;
11541158
1159+ err = mt76_worker_setup (dev -> hw , & usb -> status_worker ,
1160+ mt76u_status_worker , "usb-status" );
1161+ if (err )
1162+ return err ;
1163+
11551164 sched_set_fifo_low (usb -> rx_worker .task );
1165+ sched_set_fifo_low (usb -> status_worker .task );
11561166
11571167 return 0 ;
11581168}
0 commit comments