Commit 0a3d898e authored by Benjamin Berg's avatar Benjamin Berg Committed by Johannes Berg

wifi: mac80211: add/remove driver debugfs entries as appropriate

When an interface is removed, we should also be deleting the driver
debugfs entries (as it might still exist in DOWN state in mac80211). At
the same time, when adding an interface, we can check the
IEEE80211_SDATA_IN_DRIVER flag to know whether the interface was
previously known to the driver and is simply being reconfigured.

Fixes: a1f5dcb1 ("wifi: mac80211: add a driver callback to add vif debugfs")
Signed-off-by: default avatarBenjamin Berg <benjamin.berg@intel.com>
Reviewed-by: default avatarGregory Greenman <gregory.greenman@intel.com>
Signed-off-by: default avatarMiri Korenblit <miriam.rachel.korenblit@intel.com>
Link: https://msgid.link/20231220043149.a9f64c359424.I7076526b5297ae8f832228079c999f7b8e147a4c@changeidSigned-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent 8c917f16
...@@ -1043,9 +1043,12 @@ void ieee80211_debugfs_recreate_netdev(struct ieee80211_sub_if_data *sdata, ...@@ -1043,9 +1043,12 @@ void ieee80211_debugfs_recreate_netdev(struct ieee80211_sub_if_data *sdata,
{ {
ieee80211_debugfs_remove_netdev(sdata); ieee80211_debugfs_remove_netdev(sdata);
ieee80211_debugfs_add_netdev(sdata, mld_vif); ieee80211_debugfs_add_netdev(sdata, mld_vif);
if (sdata->flags & IEEE80211_SDATA_IN_DRIVER) {
drv_vif_add_debugfs(sdata->local, sdata); drv_vif_add_debugfs(sdata->local, sdata);
if (!mld_vif) if (!mld_vif)
ieee80211_link_debugfs_drv_add(&sdata->deflink); ieee80211_link_debugfs_drv_add(&sdata->deflink);
}
} }
void ieee80211_link_debugfs_add(struct ieee80211_link_data *link) void ieee80211_link_debugfs_add(struct ieee80211_link_data *link)
......
...@@ -75,9 +75,9 @@ int drv_add_interface(struct ieee80211_local *local, ...@@ -75,9 +75,9 @@ int drv_add_interface(struct ieee80211_local *local,
if (ret) if (ret)
return ret; return ret;
if (!(sdata->flags & IEEE80211_SDATA_IN_DRIVER)) {
sdata->flags |= IEEE80211_SDATA_IN_DRIVER; sdata->flags |= IEEE80211_SDATA_IN_DRIVER;
if (!local->in_reconfig && !local->resuming) {
drv_vif_add_debugfs(local, sdata); drv_vif_add_debugfs(local, sdata);
/* initially vif is not MLD */ /* initially vif is not MLD */
ieee80211_link_debugfs_drv_add(&sdata->deflink); ieee80211_link_debugfs_drv_add(&sdata->deflink);
...@@ -113,9 +113,13 @@ void drv_remove_interface(struct ieee80211_local *local, ...@@ -113,9 +113,13 @@ void drv_remove_interface(struct ieee80211_local *local,
if (!check_sdata_in_driver(sdata)) if (!check_sdata_in_driver(sdata))
return; return;
sdata->flags &= ~IEEE80211_SDATA_IN_DRIVER;
/* Remove driver debugfs entries */
ieee80211_debugfs_recreate_netdev(sdata, sdata->vif.valid_links);
trace_drv_remove_interface(local, sdata); trace_drv_remove_interface(local, sdata);
local->ops->remove_interface(&local->hw, &sdata->vif); local->ops->remove_interface(&local->hw, &sdata->vif);
sdata->flags &= ~IEEE80211_SDATA_IN_DRIVER;
trace_drv_return_void(local); trace_drv_return_void(local);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment