mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-06 10:57:46 +00:00
b43: Dynamically control log verbosity
Dynamically control the log verbosity with a module parameter. This enables us to dynamically enable debugging messages (or disable info, warn, error messages) via module parameter or /sys/module/b43/parameters/verbose. This increases the module size by about 3k. But in practice it reduces the module size for the user, because some distributions ship the b43 module with CONFIG_B43_DEBUG set, which increases the module by about 15k. So with this patch applied, distributions should really _disable_ CONFIG_B43_DEBUG. There is no reason to keep it in a production-release kernel. So we have a net reduction in size by about 12k. This patch also adds a printk of the wireless core revision, so people don't have to enable SSB debugging to get the wireless core revision. Signed-off-by: Michael Buesch <mb@bu3sch.de> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
08e87a833f
commit
060210f938
6 changed files with 60 additions and 19 deletions
|
@ -110,10 +110,18 @@ config B43_DEBUG
|
||||||
bool "Broadcom 43xx debugging"
|
bool "Broadcom 43xx debugging"
|
||||||
depends on B43
|
depends on B43
|
||||||
---help---
|
---help---
|
||||||
Broadcom 43xx debugging messages.
|
Broadcom 43xx debugging.
|
||||||
|
|
||||||
Say Y, if you want to find out why the driver does not
|
This adds additional runtime sanity checks and statistics to the driver.
|
||||||
work for you.
|
These checks and statistics might me expensive and hurt runtime performance
|
||||||
|
of your system.
|
||||||
|
This also adds the b43 debugfs interface.
|
||||||
|
|
||||||
|
Do not enable this, unless you are debugging the driver.
|
||||||
|
|
||||||
|
Say N, if you are a distributor or user building a release kernel
|
||||||
|
for production use.
|
||||||
|
Only say Y, if you are debugging a problem in the b43 driver sourcecode.
|
||||||
|
|
||||||
config B43_FORCE_PIO
|
config B43_FORCE_PIO
|
||||||
bool "Force usage of PIO instead of DMA"
|
bool "Force usage of PIO instead of DMA"
|
||||||
|
|
|
@ -878,12 +878,9 @@ void b43err(struct b43_wl *wl, const char *fmt, ...)
|
||||||
__attribute__ ((format(printf, 2, 3)));
|
__attribute__ ((format(printf, 2, 3)));
|
||||||
void b43warn(struct b43_wl *wl, const char *fmt, ...)
|
void b43warn(struct b43_wl *wl, const char *fmt, ...)
|
||||||
__attribute__ ((format(printf, 2, 3)));
|
__attribute__ ((format(printf, 2, 3)));
|
||||||
#if B43_DEBUG
|
|
||||||
void b43dbg(struct b43_wl *wl, const char *fmt, ...)
|
void b43dbg(struct b43_wl *wl, const char *fmt, ...)
|
||||||
__attribute__ ((format(printf, 2, 3)));
|
__attribute__ ((format(printf, 2, 3)));
|
||||||
#else /* DEBUG */
|
|
||||||
# define b43dbg(wl, fmt...) do { /* nothing */ } while (0)
|
|
||||||
#endif /* DEBUG */
|
|
||||||
|
|
||||||
/* A WARN_ON variant that vanishes when b43 debugging is disabled.
|
/* A WARN_ON variant that vanishes when b43 debugging is disabled.
|
||||||
* This _also_ evaluates the arg with debugging disabled. */
|
* This _also_ evaluates the arg with debugging disabled. */
|
||||||
|
|
|
@ -668,9 +668,18 @@ B43_DEBUGFS_FOPS(restart, NULL, restart_write_file, 1);
|
||||||
B43_DEBUGFS_FOPS(loctls, loctls_read_file, NULL, 0);
|
B43_DEBUGFS_FOPS(loctls, loctls_read_file, NULL, 0);
|
||||||
|
|
||||||
|
|
||||||
int b43_debug(struct b43_wldev *dev, enum b43_dyndbg feature)
|
bool b43_debug(struct b43_wldev *dev, enum b43_dyndbg feature)
|
||||||
{
|
{
|
||||||
return !!(dev->dfsentry && dev->dfsentry->dyn_debug[feature]);
|
bool enabled;
|
||||||
|
|
||||||
|
enabled = (dev->dfsentry && dev->dfsentry->dyn_debug[feature]);
|
||||||
|
if (unlikely(enabled)) {
|
||||||
|
/* Force full debugging messages, if the user enabled
|
||||||
|
* some dynamic debugging feature. */
|
||||||
|
b43_modparam_verbose = B43_VERBOSITY_MAX;
|
||||||
|
}
|
||||||
|
|
||||||
|
return enabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void b43_remove_dynamic_debug(struct b43_wldev *dev)
|
static void b43_remove_dynamic_debug(struct b43_wldev *dev)
|
||||||
|
|
|
@ -71,7 +71,7 @@ struct b43_dfsentry {
|
||||||
struct dentry *dyn_debug_dentries[__B43_NR_DYNDBG];
|
struct dentry *dyn_debug_dentries[__B43_NR_DYNDBG];
|
||||||
};
|
};
|
||||||
|
|
||||||
int b43_debug(struct b43_wldev *dev, enum b43_dyndbg feature);
|
bool b43_debug(struct b43_wldev *dev, enum b43_dyndbg feature);
|
||||||
|
|
||||||
void b43_debugfs_init(void);
|
void b43_debugfs_init(void);
|
||||||
void b43_debugfs_exit(void);
|
void b43_debugfs_exit(void);
|
||||||
|
@ -82,7 +82,7 @@ void b43_debugfs_log_txstat(struct b43_wldev *dev,
|
||||||
|
|
||||||
#else /* CONFIG_B43_DEBUG */
|
#else /* CONFIG_B43_DEBUG */
|
||||||
|
|
||||||
static inline int b43_debug(struct b43_wldev *dev, enum b43_dyndbg feature)
|
static inline bool b43_debug(struct b43_wldev *dev, enum b43_dyndbg feature)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
Copyright (c) 2005 Martin Langer <martin-langer@gmx.de>
|
Copyright (c) 2005 Martin Langer <martin-langer@gmx.de>
|
||||||
Copyright (c) 2005 Stefano Brivio <stefano.brivio@polimi.it>
|
Copyright (c) 2005 Stefano Brivio <stefano.brivio@polimi.it>
|
||||||
Copyright (c) 2005, 2006 Michael Buesch <mb@bu3sch.de>
|
Copyright (c) 2005-2009 Michael Buesch <mb@bu3sch.de>
|
||||||
Copyright (c) 2005 Danny van Dyk <kugelfang@gentoo.org>
|
Copyright (c) 2005 Danny van Dyk <kugelfang@gentoo.org>
|
||||||
Copyright (c) 2005 Andreas Jaggi <andreas.jaggi@waterwave.ch>
|
Copyright (c) 2005 Andreas Jaggi <andreas.jaggi@waterwave.ch>
|
||||||
|
|
||||||
|
@ -88,6 +88,10 @@ static int modparam_btcoex = 1;
|
||||||
module_param_named(btcoex, modparam_btcoex, int, 0444);
|
module_param_named(btcoex, modparam_btcoex, int, 0444);
|
||||||
MODULE_PARM_DESC(btcoex, "Enable Bluetooth coexistance (default on)");
|
MODULE_PARM_DESC(btcoex, "Enable Bluetooth coexistance (default on)");
|
||||||
|
|
||||||
|
int b43_modparam_verbose = B43_VERBOSITY_DEFAULT;
|
||||||
|
module_param_named(verbose, b43_modparam_verbose, int, 0644);
|
||||||
|
MODULE_PARM_DESC(verbose, "Log message verbosity: 0=error, 1=warn, 2=info(default), 3=debug");
|
||||||
|
|
||||||
|
|
||||||
static const struct ssb_device_id b43_ssb_tbl[] = {
|
static const struct ssb_device_id b43_ssb_tbl[] = {
|
||||||
SSB_DEVICE(SSB_VENDOR_BROADCOM, SSB_DEV_80211, 5),
|
SSB_DEVICE(SSB_VENDOR_BROADCOM, SSB_DEV_80211, 5),
|
||||||
|
@ -300,6 +304,8 @@ void b43info(struct b43_wl *wl, const char *fmt, ...)
|
||||||
{
|
{
|
||||||
va_list args;
|
va_list args;
|
||||||
|
|
||||||
|
if (b43_modparam_verbose < B43_VERBOSITY_INFO)
|
||||||
|
return;
|
||||||
if (!b43_ratelimit(wl))
|
if (!b43_ratelimit(wl))
|
||||||
return;
|
return;
|
||||||
va_start(args, fmt);
|
va_start(args, fmt);
|
||||||
|
@ -313,6 +319,8 @@ void b43err(struct b43_wl *wl, const char *fmt, ...)
|
||||||
{
|
{
|
||||||
va_list args;
|
va_list args;
|
||||||
|
|
||||||
|
if (b43_modparam_verbose < B43_VERBOSITY_ERROR)
|
||||||
|
return;
|
||||||
if (!b43_ratelimit(wl))
|
if (!b43_ratelimit(wl))
|
||||||
return;
|
return;
|
||||||
va_start(args, fmt);
|
va_start(args, fmt);
|
||||||
|
@ -326,6 +334,8 @@ void b43warn(struct b43_wl *wl, const char *fmt, ...)
|
||||||
{
|
{
|
||||||
va_list args;
|
va_list args;
|
||||||
|
|
||||||
|
if (b43_modparam_verbose < B43_VERBOSITY_WARN)
|
||||||
|
return;
|
||||||
if (!b43_ratelimit(wl))
|
if (!b43_ratelimit(wl))
|
||||||
return;
|
return;
|
||||||
va_start(args, fmt);
|
va_start(args, fmt);
|
||||||
|
@ -335,18 +345,18 @@ void b43warn(struct b43_wl *wl, const char *fmt, ...)
|
||||||
va_end(args);
|
va_end(args);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if B43_DEBUG
|
|
||||||
void b43dbg(struct b43_wl *wl, const char *fmt, ...)
|
void b43dbg(struct b43_wl *wl, const char *fmt, ...)
|
||||||
{
|
{
|
||||||
va_list args;
|
va_list args;
|
||||||
|
|
||||||
|
if (b43_modparam_verbose < B43_VERBOSITY_DEBUG)
|
||||||
|
return;
|
||||||
va_start(args, fmt);
|
va_start(args, fmt);
|
||||||
printk(KERN_DEBUG "b43-%s debug: ",
|
printk(KERN_DEBUG "b43-%s debug: ",
|
||||||
(wl && wl->hw) ? wiphy_name(wl->hw->wiphy) : "wlan");
|
(wl && wl->hw) ? wiphy_name(wl->hw->wiphy) : "wlan");
|
||||||
vprintk(fmt, args);
|
vprintk(fmt, args);
|
||||||
va_end(args);
|
va_end(args);
|
||||||
}
|
}
|
||||||
#endif /* DEBUG */
|
|
||||||
|
|
||||||
static void b43_ram_write(struct b43_wldev *dev, u16 offset, u32 val)
|
static void b43_ram_write(struct b43_wldev *dev, u16 offset, u32 val)
|
||||||
{
|
{
|
||||||
|
@ -3589,9 +3599,7 @@ static int b43_op_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
|
||||||
u8 algorithm;
|
u8 algorithm;
|
||||||
u8 index;
|
u8 index;
|
||||||
int err;
|
int err;
|
||||||
#if B43_DEBUG
|
static const u8 bcast_addr[ETH_ALEN] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
|
||||||
static const u8 bcast_addr[ETH_ALEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (modparam_nohwcrypt)
|
if (modparam_nohwcrypt)
|
||||||
return -ENOSPC; /* User disabled HW-crypto */
|
return -ENOSPC; /* User disabled HW-crypto */
|
||||||
|
@ -4744,9 +4752,10 @@ static int b43_wireless_init(struct ssb_device *dev)
|
||||||
INIT_WORK(&wl->txpower_adjust_work, b43_phy_txpower_adjust_work);
|
INIT_WORK(&wl->txpower_adjust_work, b43_phy_txpower_adjust_work);
|
||||||
|
|
||||||
ssb_set_devtypedata(dev, wl);
|
ssb_set_devtypedata(dev, wl);
|
||||||
b43info(wl, "Broadcom %04X WLAN found\n", dev->bus->chip_id);
|
b43info(wl, "Broadcom %04X WLAN found (core revision %u)\n",
|
||||||
|
dev->bus->chip_id, dev->id.revision);
|
||||||
err = 0;
|
err = 0;
|
||||||
out:
|
out:
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -40,6 +40,24 @@
|
||||||
|
|
||||||
|
|
||||||
extern int b43_modparam_qos;
|
extern int b43_modparam_qos;
|
||||||
|
extern int b43_modparam_verbose;
|
||||||
|
|
||||||
|
/* Logmessage verbosity levels. Update the b43_modparam_verbose helptext, if
|
||||||
|
* you add or remove levels. */
|
||||||
|
enum b43_verbosity {
|
||||||
|
B43_VERBOSITY_ERROR,
|
||||||
|
B43_VERBOSITY_WARN,
|
||||||
|
B43_VERBOSITY_INFO,
|
||||||
|
B43_VERBOSITY_DEBUG,
|
||||||
|
__B43_VERBOSITY_AFTERLAST, /* keep last */
|
||||||
|
|
||||||
|
B43_VERBOSITY_MAX = __B43_VERBOSITY_AFTERLAST - 1,
|
||||||
|
#if B43_DEBUG
|
||||||
|
B43_VERBOSITY_DEFAULT = B43_VERBOSITY_DEBUG,
|
||||||
|
#else
|
||||||
|
B43_VERBOSITY_DEFAULT = B43_VERBOSITY_INFO,
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/* Lightweight function to convert a frequency (in Mhz) to a channel number. */
|
/* Lightweight function to convert a frequency (in Mhz) to a channel number. */
|
||||||
|
|
Loading…
Reference in a new issue