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

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@changeid


Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent 8c917f16
Loading
Loading
Loading
Loading
+6 −3
Original line number Diff line number Diff line
@@ -1043,10 +1043,13 @@ void ieee80211_debugfs_recreate_netdev(struct ieee80211_sub_if_data *sdata,
{
	ieee80211_debugfs_remove_netdev(sdata);
	ieee80211_debugfs_add_netdev(sdata, mld_vif);

	if (sdata->flags & IEEE80211_SDATA_IN_DRIVER) {
		drv_vif_add_debugfs(sdata->local, sdata);
		if (!mld_vif)
			ieee80211_link_debugfs_drv_add(&sdata->deflink);
	}
}

void ieee80211_link_debugfs_add(struct ieee80211_link_data *link)
{
+7 −3
Original line number Diff line number Diff line
@@ -75,9 +75,9 @@ int drv_add_interface(struct ieee80211_local *local,
	if (ret)
		return ret;

	if (!(sdata->flags & IEEE80211_SDATA_IN_DRIVER)) {
		sdata->flags |= IEEE80211_SDATA_IN_DRIVER;

	if (!local->in_reconfig && !local->resuming) {
		drv_vif_add_debugfs(local, sdata);
		/* initially vif is not MLD */
		ieee80211_link_debugfs_drv_add(&sdata->deflink);
@@ -113,9 +113,13 @@ void drv_remove_interface(struct ieee80211_local *local,
	if (!check_sdata_in_driver(sdata))
		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);
	local->ops->remove_interface(&local->hw, &sdata->vif);
	sdata->flags &= ~IEEE80211_SDATA_IN_DRIVER;
	trace_drv_return_void(local);
}