|
@@ -2884,6 +2884,10 @@ static int mac80211_hwsim_new_radio(struct genl_info *info,
|
|
|
|
|
|
wiphy_ext_feature_set(hw->wiphy, NL80211_EXT_FEATURE_CQM_RSSI_LIST);
|
|
|
|
|
|
+ tasklet_hrtimer_init(&data->beacon_timer,
|
|
|
+ mac80211_hwsim_beacon,
|
|
|
+ CLOCK_MONOTONIC, HRTIMER_MODE_ABS);
|
|
|
+
|
|
|
err = ieee80211_register_hw(hw);
|
|
|
if (err < 0) {
|
|
|
pr_debug("mac80211_hwsim: ieee80211_register_hw failed (%d)\n",
|
|
@@ -2908,10 +2912,6 @@ static int mac80211_hwsim_new_radio(struct genl_info *info,
|
|
|
data->debugfs,
|
|
|
data, &hwsim_simulate_radar);
|
|
|
|
|
|
- tasklet_hrtimer_init(&data->beacon_timer,
|
|
|
- mac80211_hwsim_beacon,
|
|
|
- CLOCK_MONOTONIC, HRTIMER_MODE_ABS);
|
|
|
-
|
|
|
spin_lock_bh(&hwsim_radio_lock);
|
|
|
err = rhashtable_insert_fast(&hwsim_radios_rht, &data->rht,
|
|
|
hwsim_rht_params);
|
|
@@ -3703,16 +3703,16 @@ static int __init init_mac80211_hwsim(void)
|
|
|
if (err)
|
|
|
goto out_unregister_pernet;
|
|
|
|
|
|
+ err = hwsim_init_netlink();
|
|
|
+ if (err)
|
|
|
+ goto out_unregister_driver;
|
|
|
+
|
|
|
hwsim_class = class_create(THIS_MODULE, "mac80211_hwsim");
|
|
|
if (IS_ERR(hwsim_class)) {
|
|
|
err = PTR_ERR(hwsim_class);
|
|
|
- goto out_unregister_driver;
|
|
|
+ goto out_exit_netlink;
|
|
|
}
|
|
|
|
|
|
- err = hwsim_init_netlink();
|
|
|
- if (err < 0)
|
|
|
- goto out_unregister_driver;
|
|
|
-
|
|
|
for (i = 0; i < radios; i++) {
|
|
|
struct hwsim_new_radio_params param = { 0 };
|
|
|
|
|
@@ -3818,6 +3818,8 @@ out_free_mon:
|
|
|
free_netdev(hwsim_mon);
|
|
|
out_free_radios:
|
|
|
mac80211_hwsim_free();
|
|
|
+out_exit_netlink:
|
|
|
+ hwsim_exit_netlink();
|
|
|
out_unregister_driver:
|
|
|
platform_driver_unregister(&mac80211_hwsim_driver);
|
|
|
out_unregister_pernet:
|