74 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| From: Stanislaw Gruszka <sgruszka@redhat.com>
 | |
| Date: Thu, 2 Feb 2017 10:57:40 +0100
 | |
| Subject: [PATCH] rt2x00: avoid introducing a USB dependency in the
 | |
|  rt2x00lib module
 | |
| 
 | |
| As reported by Felix:
 | |
| 
 | |
| Though protected by an ifdef, introducing an usb symbol dependency in
 | |
| the rt2x00lib module is a major inconvenience for distributions that
 | |
| package kernel modules split into individual packages.
 | |
| 
 | |
| Get rid of this unnecessary dependency by calling the usb related
 | |
| function from a more suitable place.
 | |
| 
 | |
| Cc: Vishal Thanki <vishalthanki@gmail.com>
 | |
| Reported-by: Felix Fietkau <nbd@nbd.name>
 | |
| Fixes: 8b4c0009313f ("rt2x00usb: Use usb anchor to manage URB")
 | |
| Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
 | |
| ---
 | |
| 
 | |
| --- a/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
 | |
| +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
 | |
| @@ -1436,21 +1436,6 @@ void rt2x00lib_remove_dev(struct rt2x00_
 | |
|  	cancel_work_sync(&rt2x00dev->intf_work);
 | |
|  	cancel_delayed_work_sync(&rt2x00dev->autowakeup_work);
 | |
|  	cancel_work_sync(&rt2x00dev->sleep_work);
 | |
| -#if IS_ENABLED(CPTCFG_RT2X00_LIB_USB)
 | |
| -	if (rt2x00_is_usb(rt2x00dev)) {
 | |
| -		usb_kill_anchored_urbs(rt2x00dev->anchor);
 | |
| -		hrtimer_cancel(&rt2x00dev->txstatus_timer);
 | |
| -		cancel_work_sync(&rt2x00dev->rxdone_work);
 | |
| -		cancel_work_sync(&rt2x00dev->txdone_work);
 | |
| -	}
 | |
| -#endif
 | |
| -	if (rt2x00dev->workqueue)
 | |
| -		destroy_workqueue(rt2x00dev->workqueue);
 | |
| -
 | |
| -	/*
 | |
| -	 * Free the tx status fifo.
 | |
| -	 */
 | |
| -	kfifo_free(&rt2x00dev->txstatus_fifo);
 | |
|  
 | |
|  	/*
 | |
|  	 * Kill the tx status tasklet.
 | |
| @@ -1466,6 +1451,14 @@ void rt2x00lib_remove_dev(struct rt2x00_
 | |
|  	 */
 | |
|  	rt2x00lib_uninitialize(rt2x00dev);
 | |
|  
 | |
| +	if (rt2x00dev->workqueue)
 | |
| +		destroy_workqueue(rt2x00dev->workqueue);
 | |
| +
 | |
| +	/*
 | |
| +	 * Free the tx status fifo.
 | |
| +	 */
 | |
| +	kfifo_free(&rt2x00dev->txstatus_fifo);
 | |
| +
 | |
|  	/*
 | |
|  	 * Free extra components
 | |
|  	 */
 | |
| --- a/drivers/net/wireless/ralink/rt2x00/rt2x00usb.c
 | |
| +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00usb.c
 | |
| @@ -744,6 +744,11 @@ void rt2x00usb_uninitialize(struct rt2x0
 | |
|  {
 | |
|  	struct data_queue *queue;
 | |
|  
 | |
| +	usb_kill_anchored_urbs(rt2x00dev->anchor);
 | |
| +	hrtimer_cancel(&rt2x00dev->txstatus_timer);
 | |
| +	cancel_work_sync(&rt2x00dev->rxdone_work);
 | |
| +	cancel_work_sync(&rt2x00dev->txdone_work);
 | |
| +
 | |
|  	queue_for_each(rt2x00dev, queue)
 | |
|  		rt2x00usb_free_entries(queue);
 | |
|  }
 | 
