Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6232c174 authored by Stanislaw Gruszka's avatar Stanislaw Gruszka Committed by Kalle Valo
Browse files

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: default avatarFelix Fietkau <nbd@nbd.name>
Fixes: 8b4c0009 ("rt2x00usb: Use usb anchor to manage URB")
Signed-off-by: default avatarStanislaw Gruszka <sgruszka@redhat.com>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
parent 0f83ff69
Loading
Loading
Loading
Loading
+8 −15
Original line number Diff line number Diff line
@@ -1436,21 +1436,6 @@ void rt2x00lib_remove_dev(struct rt2x00_dev *rt2x00dev)
	cancel_work_sync(&rt2x00dev->intf_work);
	cancel_delayed_work_sync(&rt2x00dev->autowakeup_work);
	cancel_work_sync(&rt2x00dev->sleep_work);
#if IS_ENABLED(CONFIG_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_dev *rt2x00dev)
	 */
	rt2x00lib_uninitialize(rt2x00dev);

	if (rt2x00dev->workqueue)
		destroy_workqueue(rt2x00dev->workqueue);

	/*
	 * Free the tx status fifo.
	 */
	kfifo_free(&rt2x00dev->txstatus_fifo);

	/*
	 * Free extra components
	 */
+5 −0
Original line number Diff line number Diff line
@@ -744,6 +744,11 @@ void rt2x00usb_uninitialize(struct rt2x00_dev *rt2x00dev)
{
	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);
}