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

Commit e4afb603 authored by Johannes Berg's avatar Johannes Berg
Browse files

mac80211_hwsim: refactor radio cleanup



Refactor the radio cleanup into a new function to later
allow deleting a single radio from the list.

Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent f39c2bfa
Loading
Loading
Loading
Loading
+18 −14
Original line number Diff line number Diff line
@@ -1623,25 +1623,29 @@ static const struct ieee80211_ops mac80211_hwsim_ops = {

static struct ieee80211_ops mac80211_hwsim_mchan_ops;

static void mac80211_hwsim_free(void)
static void mac80211_hwsim_destroy_radio(struct mac80211_hwsim_data *data)
{
	struct list_head tmplist, *i, *tmp;
	struct mac80211_hwsim_data *data, *tmpdata;

	INIT_LIST_HEAD(&tmplist);

	spin_lock_bh(&hwsim_radio_lock);
	list_for_each_safe(i, tmp, &hwsim_radios)
		list_move(i, &tmplist);
	spin_unlock_bh(&hwsim_radio_lock);

	list_for_each_entry_safe(data, tmpdata, &tmplist, list) {
	debugfs_remove_recursive(data->debugfs);
	ieee80211_unregister_hw(data->hw);
	device_release_driver(data->dev);
	device_unregister(data->dev);
	ieee80211_free_hw(data->hw);
}

static void mac80211_hwsim_free(void)
{
	struct mac80211_hwsim_data *data;

	spin_lock_bh(&hwsim_radio_lock);
	while ((data = list_first_entry_or_null(&hwsim_radios,
						struct mac80211_hwsim_data,
						list))) {
		list_del(&data->list);
		spin_unlock_bh(&hwsim_radio_lock);
		mac80211_hwsim_destroy_radio(data);
		spin_lock_bh(&hwsim_radio_lock);
	}
	spin_unlock_bh(&hwsim_radio_lock);
	class_destroy(hwsim_class);
}