Skip to content

Commit

Permalink
mac80211: move sdata debugfs dir to vif
Browse files Browse the repository at this point in the history
There is need create driver own per interface debugfs files. This is
currently done by drv_{add,remove}_interface_debugfs() callbacks. But it
is possible that after we remove interface from the driver (i.e.
on suspend) we call drv_remove_interface_debugfs() function. Fixing this
problem will require to add call drv_{add,remove}_interface_debugfs()
anytime we create and remove interface in mac80211. So it's better to
add debugfs dir dentry to vif structure to allow to create/remove
custom debugfs driver files on drv_{add,remove}_interface().

Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  • Loading branch information
Stanislaw Gruszka authored and Johannes Berg committed Mar 18, 2013
1 parent 488b366 commit ddbfe86
Show file tree
Hide file tree
Showing 5 changed files with 25 additions and 19 deletions.
7 changes: 7 additions & 0 deletions include/net/mac80211.h
Original file line number Diff line number Diff line change
Expand Up @@ -1067,6 +1067,9 @@ enum ieee80211_vif_flags {
* path needing to access it; even though the netdev carrier will always
* be off when it is %NULL there can still be races and packets could be
* processed after it switches back to %NULL.
* @debugfs_dir: debugfs dentry, can be used by drivers to create own per
* interface debug files. Note that it will be NULL for the virtual
* monitor interface (if that is requested.)
* @drv_priv: data area for driver use, will always be aligned to
* sizeof(void *).
*/
Expand All @@ -1083,6 +1086,10 @@ struct ieee80211_vif {

u32 driver_flags;

#ifdef CONFIG_MAC80211_DEBUGFS
struct dentry *debugfs_dir;
#endif

/* must be last */
u8 drv_priv[0] __aligned(sizeof(void *));
};
Expand Down
10 changes: 5 additions & 5 deletions net/mac80211/debugfs_key.c
Original file line number Diff line number Diff line change
Expand Up @@ -295,7 +295,7 @@ void ieee80211_debugfs_key_update_default(struct ieee80211_sub_if_data *sdata)
char buf[50];
struct ieee80211_key *key;

if (!sdata->debugfs.dir)
if (!sdata->vif.debugfs_dir)
return;

lockdep_assert_held(&sdata->local->key_mtx);
Expand All @@ -311,7 +311,7 @@ void ieee80211_debugfs_key_update_default(struct ieee80211_sub_if_data *sdata)
sprintf(buf, "../keys/%d", key->debugfs.cnt);
sdata->debugfs.default_unicast_key =
debugfs_create_symlink("default_unicast_key",
sdata->debugfs.dir, buf);
sdata->vif.debugfs_dir, buf);
}

if (sdata->debugfs.default_multicast_key) {
Expand All @@ -325,7 +325,7 @@ void ieee80211_debugfs_key_update_default(struct ieee80211_sub_if_data *sdata)
sprintf(buf, "../keys/%d", key->debugfs.cnt);
sdata->debugfs.default_multicast_key =
debugfs_create_symlink("default_multicast_key",
sdata->debugfs.dir, buf);
sdata->vif.debugfs_dir, buf);
}
}

Expand All @@ -334,7 +334,7 @@ void ieee80211_debugfs_key_add_mgmt_default(struct ieee80211_sub_if_data *sdata)
char buf[50];
struct ieee80211_key *key;

if (!sdata->debugfs.dir)
if (!sdata->vif.debugfs_dir)
return;

key = key_mtx_dereference(sdata->local,
Expand All @@ -343,7 +343,7 @@ void ieee80211_debugfs_key_add_mgmt_default(struct ieee80211_sub_if_data *sdata)
sprintf(buf, "../keys/%d", key->debugfs.cnt);
sdata->debugfs.default_mgmt_key =
debugfs_create_symlink("default_mgmt_key",
sdata->debugfs.dir, buf);
sdata->vif.debugfs_dir, buf);
} else
ieee80211_debugfs_key_remove_mgmt_default(sdata);
}
Expand Down
22 changes: 11 additions & 11 deletions net/mac80211/debugfs_netdev.c
Original file line number Diff line number Diff line change
Expand Up @@ -521,7 +521,7 @@ IEEE80211_IF_FILE(dot11MeshAwakeWindowDuration,
#endif

#define DEBUGFS_ADD_MODE(name, mode) \
debugfs_create_file(#name, mode, sdata->debugfs.dir, \
debugfs_create_file(#name, mode, sdata->vif.debugfs_dir, \
sdata, &name##_ops);

#define DEBUGFS_ADD(name) DEBUGFS_ADD_MODE(name, 0400)
Expand Down Expand Up @@ -577,7 +577,7 @@ static void add_mesh_files(struct ieee80211_sub_if_data *sdata)
static void add_mesh_stats(struct ieee80211_sub_if_data *sdata)
{
struct dentry *dir = debugfs_create_dir("mesh_stats",
sdata->debugfs.dir);
sdata->vif.debugfs_dir);
#define MESHSTATS_ADD(name)\
debugfs_create_file(#name, 0400, dir, sdata, &name##_ops);

Expand All @@ -594,7 +594,7 @@ static void add_mesh_stats(struct ieee80211_sub_if_data *sdata)
static void add_mesh_config(struct ieee80211_sub_if_data *sdata)
{
struct dentry *dir = debugfs_create_dir("mesh_config",
sdata->debugfs.dir);
sdata->vif.debugfs_dir);

#define MESHPARAMS_ADD(name) \
debugfs_create_file(#name, 0600, dir, sdata, &name##_ops);
Expand Down Expand Up @@ -631,7 +631,7 @@ static void add_mesh_config(struct ieee80211_sub_if_data *sdata)

static void add_files(struct ieee80211_sub_if_data *sdata)
{
if (!sdata->debugfs.dir)
if (!sdata->vif.debugfs_dir)
return;

DEBUGFS_ADD(flags);
Expand Down Expand Up @@ -673,29 +673,29 @@ void ieee80211_debugfs_add_netdev(struct ieee80211_sub_if_data *sdata)
char buf[10+IFNAMSIZ];

sprintf(buf, "netdev:%s", sdata->name);
sdata->debugfs.dir = debugfs_create_dir(buf,
sdata->vif.debugfs_dir = debugfs_create_dir(buf,
sdata->local->hw.wiphy->debugfsdir);
if (sdata->debugfs.dir)
if (sdata->vif.debugfs_dir)
sdata->debugfs.subdir_stations = debugfs_create_dir("stations",
sdata->debugfs.dir);
sdata->vif.debugfs_dir);
add_files(sdata);
}

void ieee80211_debugfs_remove_netdev(struct ieee80211_sub_if_data *sdata)
{
if (!sdata->debugfs.dir)
if (!sdata->vif.debugfs_dir)
return;

debugfs_remove_recursive(sdata->debugfs.dir);
sdata->debugfs.dir = NULL;
debugfs_remove_recursive(sdata->vif.debugfs_dir);
sdata->vif.debugfs_dir = NULL;
}

void ieee80211_debugfs_rename_netdev(struct ieee80211_sub_if_data *sdata)
{
struct dentry *dir;
char buf[10 + IFNAMSIZ];

dir = sdata->debugfs.dir;
dir = sdata->vif.debugfs_dir;

if (!dir)
return;
Expand Down
4 changes: 2 additions & 2 deletions net/mac80211/driver-ops.h
Original file line number Diff line number Diff line change
Expand Up @@ -560,7 +560,7 @@ void drv_add_interface_debugfs(struct ieee80211_local *local,
return;

local->ops->add_interface_debugfs(&local->hw, &sdata->vif,
sdata->debugfs.dir);
sdata->vif.debugfs_dir);
}

static inline
Expand All @@ -575,7 +575,7 @@ void drv_remove_interface_debugfs(struct ieee80211_local *local,
return;

local->ops->remove_interface_debugfs(&local->hw, &sdata->vif,
sdata->debugfs.dir);
sdata->vif.debugfs_dir);
}
#else
static inline
Expand Down
1 change: 0 additions & 1 deletion net/mac80211/ieee80211_i.h
Original file line number Diff line number Diff line change
Expand Up @@ -758,7 +758,6 @@ struct ieee80211_sub_if_data {

#ifdef CONFIG_MAC80211_DEBUGFS
struct {
struct dentry *dir;
struct dentry *subdir_stations;
struct dentry *default_unicast_key;
struct dentry *default_multicast_key;
Expand Down

0 comments on commit ddbfe86

Please sign in to comment.