Skip to content

Commit

Permalink
mac80211_hwsim: refactor radio cleanup
Browse files Browse the repository at this point in the history
Refactor the radio cleanup into a new function to later
allow deleting a single radio from the list.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  • Loading branch information
Johannes Berg committed Jan 10, 2014
1 parent f39c2bf commit e4afb60
Showing 1 changed file with 18 additions and 14 deletions.
32 changes: 18 additions & 14 deletions drivers/net/wireless/mac80211_hwsim.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
debugfs_remove_recursive(data->debugfs);
ieee80211_unregister_hw(data->hw);
device_release_driver(data->dev);
device_unregister(data->dev);
ieee80211_free_hw(data->hw);
}

INIT_LIST_HEAD(&tmplist);
static void mac80211_hwsim_free(void)
{
struct mac80211_hwsim_data *data;

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);
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);
}

Expand Down

0 comments on commit e4afb60

Please sign in to comment.