summaryrefslogtreecommitdiffstats
path: root/package/mac80211/patches/404-ath9k-create-a-common-debugfs_root-for-all-device-i.patch
diff options
context:
space:
mode:
Diffstat (limited to 'package/mac80211/patches/404-ath9k-create-a-common-debugfs_root-for-all-device-i.patch')
-rw-r--r--package/mac80211/patches/404-ath9k-create-a-common-debugfs_root-for-all-device-i.patch141
1 files changed, 141 insertions, 0 deletions
diff --git a/package/mac80211/patches/404-ath9k-create-a-common-debugfs_root-for-all-device-i.patch b/package/mac80211/patches/404-ath9k-create-a-common-debugfs_root-for-all-device-i.patch
new file mode 100644
index 000000000..bace6b599
--- /dev/null
+++ b/package/mac80211/patches/404-ath9k-create-a-common-debugfs_root-for-all-device-i.patch
@@ -0,0 +1,141 @@
+From 8f94fb99b3f88aeff95743633afcc88147b7a475 Mon Sep 17 00:00:00 2001
+From: Gabor Juhos <juhosg@openwrt.org>
+Date: Thu, 5 Mar 2009 15:07:10 +0100
+Subject: [PATCH] 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: Gabor Juhos <juhosg@openwrt.org>
+Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
+---
+ drivers/net/wireless/ath9k/debug.c | 24 ++++++++++++++++++------
+ drivers/net/wireless/ath9k/debug.h | 12 +++++++++++-
+ drivers/net/wireless/ath9k/main.c | 13 ++++++++++++-
+ 3 files changed, 41 insertions(+), 8 deletions(-)
+
+--- a/drivers/net/wireless/ath9k/debug.c
++++ b/drivers/net/wireless/ath9k/debug.c
+@@ -19,6 +19,8 @@
+ static unsigned int ath9k_debug = DBG_DEFAULT;
+ 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, ...)
+ {
+ if (!sc)
+@@ -491,12 +493,8 @@ int ath9k_init_debug(struct ath_softc *s
+ {
+ 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_root);
++ ath9k_debugfs_root);
+ if (!sc->debug.debugfs_phy)
+ goto err;
+
+@@ -538,5 +536,19 @@ void ath9k_exit_debug(struct ath_softc *
+ debugfs_remove(sc->debug.debugfs_interrupt);
+ debugfs_remove(sc->debug.debugfs_dma);
+ 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;
+ }
+--- a/drivers/net/wireless/ath9k/debug.h
++++ b/drivers/net/wireless/ath9k/debug.h
+@@ -102,7 +102,6 @@ struct ath_stats {
+
+ struct ath9k_debug {
+ int debug_mask;
+- struct dentry *debugfs_root;
+ struct dentry *debugfs_phy;
+ struct dentry *debugfs_dma;
+ struct dentry *debugfs_interrupt;
+@@ -114,6 +113,8 @@ struct ath9k_debug {
+ void DPRINTF(struct ath_softc *sc, int dbg_mask, const char *fmt, ...);
+ int ath9k_init_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_rc(struct ath_softc *sc, struct sk_buff *skb);
+ void ath_debug_stat_retries(struct ath_softc *sc, int rix,
+@@ -135,6 +136,15 @@ static inline void ath9k_exit_debug(stru
+ {
+ }
+
++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,
+ enum ath9k_int status)
+ {
+--- a/drivers/net/wireless/ath9k/main.c
++++ b/drivers/net/wireless/ath9k/main.c
+@@ -2864,12 +2864,20 @@ static int __init ath9k_init(void)
+ 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();
+ if (error < 0) {
+ printk(KERN_ERR
+ "ath9k: No PCI devices found, driver not installed.\n");
+ error = -ENODEV;
+- goto err_rate_unregister;
++ goto err_remove_root;
+ }
+
+ error = ath_ahb_init();
+@@ -2883,6 +2891,8 @@ static int __init ath9k_init(void)
+ err_pci_exit:
+ ath_pci_exit();
+
++ err_remove_root:
++ ath9k_debug_remove_root();
+ err_rate_unregister:
+ ath_rate_control_unregister();
+ err_out:
+@@ -2894,6 +2904,7 @@ static void __exit ath9k_exit(void)
+ {
+ ath_ahb_exit();
+ ath_pci_exit();
++ ath9k_debug_remove_root();
+ ath_rate_control_unregister();
+ printk(KERN_INFO "%s: Driver unloaded\n", dev_info);
+ }