Commit 19d8bc22 authored by Gabor Juhos's avatar Gabor Juhos Committed by John W. Linville

ath9k: create a common debugfs_root for all device instances

The driver are trying to create an 'ath9k' directory in debugfs for each
device currently. If there are more than one device in the system, the
second try will always fail.

Changes-licensed-under: ISC
Signed-off-by: default avatarGabor Juhos <juhosg@openwrt.org>
Signed-off-by: default avatarImre Kaloz <kaloz@openwrt.org>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 0eeb59fe
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
static unsigned int ath9k_debug = DBG_DEFAULT; static unsigned int ath9k_debug = DBG_DEFAULT;
module_param_named(debug, ath9k_debug, uint, 0); module_param_named(debug, ath9k_debug, uint, 0);
static struct dentry *ath9k_debugfs_root;
void DPRINTF(struct ath_softc *sc, int dbg_mask, const char *fmt, ...) void DPRINTF(struct ath_softc *sc, int dbg_mask, const char *fmt, ...)
{ {
if (!sc) if (!sc)
...@@ -491,12 +493,8 @@ int ath9k_init_debug(struct ath_softc *sc) ...@@ -491,12 +493,8 @@ int ath9k_init_debug(struct ath_softc *sc)
{ {
sc->debug.debug_mask = ath9k_debug; sc->debug.debug_mask = ath9k_debug;
sc->debug.debugfs_root = debugfs_create_dir(KBUILD_MODNAME, NULL);
if (!sc->debug.debugfs_root)
goto err;
sc->debug.debugfs_phy = debugfs_create_dir(wiphy_name(sc->hw->wiphy), sc->debug.debugfs_phy = debugfs_create_dir(wiphy_name(sc->hw->wiphy),
sc->debug.debugfs_root); ath9k_debugfs_root);
if (!sc->debug.debugfs_phy) if (!sc->debug.debugfs_phy)
goto err; goto err;
...@@ -538,5 +536,19 @@ void ath9k_exit_debug(struct ath_softc *sc) ...@@ -538,5 +536,19 @@ void ath9k_exit_debug(struct ath_softc *sc)
debugfs_remove(sc->debug.debugfs_interrupt); debugfs_remove(sc->debug.debugfs_interrupt);
debugfs_remove(sc->debug.debugfs_dma); debugfs_remove(sc->debug.debugfs_dma);
debugfs_remove(sc->debug.debugfs_phy); debugfs_remove(sc->debug.debugfs_phy);
debugfs_remove(sc->debug.debugfs_root); }
int ath9k_debug_create_root(void)
{
ath9k_debugfs_root = debugfs_create_dir(KBUILD_MODNAME, NULL);
if (!ath9k_debugfs_root)
return -ENOENT;
return 0;
}
void ath9k_debug_remove_root(void)
{
debugfs_remove(ath9k_debugfs_root);
ath9k_debugfs_root = NULL;
} }
...@@ -102,7 +102,6 @@ struct ath_stats { ...@@ -102,7 +102,6 @@ struct ath_stats {
struct ath9k_debug { struct ath9k_debug {
int debug_mask; int debug_mask;
struct dentry *debugfs_root;
struct dentry *debugfs_phy; struct dentry *debugfs_phy;
struct dentry *debugfs_dma; struct dentry *debugfs_dma;
struct dentry *debugfs_interrupt; struct dentry *debugfs_interrupt;
...@@ -114,6 +113,8 @@ struct ath9k_debug { ...@@ -114,6 +113,8 @@ struct ath9k_debug {
void DPRINTF(struct ath_softc *sc, int dbg_mask, const char *fmt, ...); void DPRINTF(struct ath_softc *sc, int dbg_mask, const char *fmt, ...);
int ath9k_init_debug(struct ath_softc *sc); int ath9k_init_debug(struct ath_softc *sc);
void ath9k_exit_debug(struct ath_softc *sc); void ath9k_exit_debug(struct ath_softc *sc);
int ath9k_debug_create_root(void);
void ath9k_debug_remove_root(void);
void ath_debug_stat_interrupt(struct ath_softc *sc, enum ath9k_int status); void ath_debug_stat_interrupt(struct ath_softc *sc, enum ath9k_int status);
void ath_debug_stat_rc(struct ath_softc *sc, struct sk_buff *skb); void ath_debug_stat_rc(struct ath_softc *sc, struct sk_buff *skb);
void ath_debug_stat_retries(struct ath_softc *sc, int rix, void ath_debug_stat_retries(struct ath_softc *sc, int rix,
...@@ -135,6 +136,15 @@ static inline void ath9k_exit_debug(struct ath_softc *sc) ...@@ -135,6 +136,15 @@ static inline void ath9k_exit_debug(struct ath_softc *sc)
{ {
} }
static inline int ath9k_debug_create_root(void)
{
return 0;
}
static inline void ath9k_debug_remove_root(void)
{
}
static inline void ath_debug_stat_interrupt(struct ath_softc *sc, static inline void ath_debug_stat_interrupt(struct ath_softc *sc,
enum ath9k_int status) enum ath9k_int status)
{ {
......
...@@ -2858,12 +2858,20 @@ static int __init ath9k_init(void) ...@@ -2858,12 +2858,20 @@ static int __init ath9k_init(void)
goto err_out; goto err_out;
} }
error = ath9k_debug_create_root();
if (error) {
printk(KERN_ERR
"ath9k: Unable to create debugfs root: %d\n",
error);
goto err_rate_unregister;
}
error = ath_pci_init(); error = ath_pci_init();
if (error < 0) { if (error < 0) {
printk(KERN_ERR printk(KERN_ERR
"ath9k: No PCI devices found, driver not installed.\n"); "ath9k: No PCI devices found, driver not installed.\n");
error = -ENODEV; error = -ENODEV;
goto err_rate_unregister; goto err_remove_root;
} }
error = ath_ahb_init(); error = ath_ahb_init();
...@@ -2877,6 +2885,8 @@ static int __init ath9k_init(void) ...@@ -2877,6 +2885,8 @@ static int __init ath9k_init(void)
err_pci_exit: err_pci_exit:
ath_pci_exit(); ath_pci_exit();
err_remove_root:
ath9k_debug_remove_root();
err_rate_unregister: err_rate_unregister:
ath_rate_control_unregister(); ath_rate_control_unregister();
err_out: err_out:
...@@ -2888,6 +2898,7 @@ static void __exit ath9k_exit(void) ...@@ -2888,6 +2898,7 @@ static void __exit ath9k_exit(void)
{ {
ath_ahb_exit(); ath_ahb_exit();
ath_pci_exit(); ath_pci_exit();
ath9k_debug_remove_root();
ath_rate_control_unregister(); ath_rate_control_unregister();
printk(KERN_INFO "%s: Driver unloaded\n", dev_info); printk(KERN_INFO "%s: Driver unloaded\n", dev_info);
} }
......
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