cfg80211: combine duplicate wdev init code
There's a bit of duplicated code to initialize a wdev, pull it out into a separate function to call from both places. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
a5ae326418
commit
e4d4216e91
@ -1153,6 +1153,28 @@ void cfg80211_stop_iface(struct wiphy *wiphy, struct wireless_dev *wdev,
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL(cfg80211_stop_iface);
|
EXPORT_SYMBOL(cfg80211_stop_iface);
|
||||||
|
|
||||||
|
void cfg80211_init_wdev(struct cfg80211_registered_device *rdev,
|
||||||
|
struct wireless_dev *wdev)
|
||||||
|
{
|
||||||
|
mutex_init(&wdev->mtx);
|
||||||
|
INIT_LIST_HEAD(&wdev->event_list);
|
||||||
|
spin_lock_init(&wdev->event_lock);
|
||||||
|
INIT_LIST_HEAD(&wdev->mgmt_registrations);
|
||||||
|
spin_lock_init(&wdev->mgmt_registrations_lock);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We get here also when the interface changes network namespaces,
|
||||||
|
* as it's registered into the new one, but we don't want it to
|
||||||
|
* change ID in that case. Checking if the ID is already assigned
|
||||||
|
* works, because 0 isn't considered a valid ID and the memory is
|
||||||
|
* 0-initialized.
|
||||||
|
*/
|
||||||
|
if (!wdev->identifier)
|
||||||
|
wdev->identifier = ++rdev->wdev_id;
|
||||||
|
list_add_rcu(&wdev->list, &rdev->wiphy.wdev_list);
|
||||||
|
rdev->devlist_generation++;
|
||||||
|
}
|
||||||
|
|
||||||
static int cfg80211_netdev_notifier_call(struct notifier_block *nb,
|
static int cfg80211_netdev_notifier_call(struct notifier_block *nb,
|
||||||
unsigned long state, void *ptr)
|
unsigned long state, void *ptr)
|
||||||
{
|
{
|
||||||
@ -1178,23 +1200,7 @@ static int cfg80211_netdev_notifier_call(struct notifier_block *nb,
|
|||||||
* called within code protected by it when interfaces
|
* called within code protected by it when interfaces
|
||||||
* are added with nl80211.
|
* are added with nl80211.
|
||||||
*/
|
*/
|
||||||
mutex_init(&wdev->mtx);
|
cfg80211_init_wdev(rdev, wdev);
|
||||||
INIT_LIST_HEAD(&wdev->event_list);
|
|
||||||
spin_lock_init(&wdev->event_lock);
|
|
||||||
INIT_LIST_HEAD(&wdev->mgmt_registrations);
|
|
||||||
spin_lock_init(&wdev->mgmt_registrations_lock);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* We get here also when the interface changes network namespaces,
|
|
||||||
* as it's registered into the new one, but we don't want it to
|
|
||||||
* change ID in that case. Checking if the ID is already assigned
|
|
||||||
* works, because 0 isn't considered a valid ID and the memory is
|
|
||||||
* 0-initialized.
|
|
||||||
*/
|
|
||||||
if (!wdev->identifier)
|
|
||||||
wdev->identifier = ++rdev->wdev_id;
|
|
||||||
list_add_rcu(&wdev->list, &rdev->wiphy.wdev_list);
|
|
||||||
rdev->devlist_generation++;
|
|
||||||
/* can only change netns with wiphy */
|
/* can only change netns with wiphy */
|
||||||
dev->features |= NETIF_F_NETNS_LOCAL;
|
dev->features |= NETIF_F_NETNS_LOCAL;
|
||||||
|
|
||||||
|
@ -187,6 +187,9 @@ struct wiphy *wiphy_idx_to_wiphy(int wiphy_idx);
|
|||||||
int cfg80211_switch_netns(struct cfg80211_registered_device *rdev,
|
int cfg80211_switch_netns(struct cfg80211_registered_device *rdev,
|
||||||
struct net *net);
|
struct net *net);
|
||||||
|
|
||||||
|
void cfg80211_init_wdev(struct cfg80211_registered_device *rdev,
|
||||||
|
struct wireless_dev *wdev);
|
||||||
|
|
||||||
static inline void wdev_lock(struct wireless_dev *wdev)
|
static inline void wdev_lock(struct wireless_dev *wdev)
|
||||||
__acquires(wdev)
|
__acquires(wdev)
|
||||||
{
|
{
|
||||||
|
@ -3252,15 +3252,7 @@ static int nl80211_new_interface(struct sk_buff *skb, struct genl_info *info)
|
|||||||
* P2P Device and NAN do not have a netdev, so don't go
|
* P2P Device and NAN do not have a netdev, so don't go
|
||||||
* through the netdev notifier and must be added here
|
* through the netdev notifier and must be added here
|
||||||
*/
|
*/
|
||||||
mutex_init(&wdev->mtx);
|
cfg80211_init_wdev(rdev, wdev);
|
||||||
INIT_LIST_HEAD(&wdev->event_list);
|
|
||||||
spin_lock_init(&wdev->event_lock);
|
|
||||||
INIT_LIST_HEAD(&wdev->mgmt_registrations);
|
|
||||||
spin_lock_init(&wdev->mgmt_registrations_lock);
|
|
||||||
|
|
||||||
wdev->identifier = ++rdev->wdev_id;
|
|
||||||
list_add_rcu(&wdev->list, &rdev->wiphy.wdev_list);
|
|
||||||
rdev->devlist_generation++;
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
Loading…
Reference in New Issue
Block a user