2017-01-01 01:07:15

by Larry Finger

[permalink] [raw]
Subject: [PATCH 0/3] rtlwifi: Rework debug system

This set of patches modifies the debug system by replacing some
complicated macros with the equivalent operations in C. Then, the
COMP_XX component debugging is converted into a debug mask. Finally,
code is added to permit setting the debug mask from sysfs.

Signed-off-by: Larry Finger <[email protected]>
Cc: Ping-Ke Shih <[email protected]>


Larry Finger (3):
rtlwifi: Redo debugging macros RTPRINT and RT_PRINT_DATA
rtlwifi: Convert COMP_XX entries into a proper debugging mask
rtlwifi: Enable debug mask to be set from sysfs

drivers/net/wireless/realtek/rtlwifi/base.c | 43 ++++++++++++++---
drivers/net/wireless/realtek/rtlwifi/debug.c | 55 +++++++++++++++-------
drivers/net/wireless/realtek/rtlwifi/debug.h | 31 +++++-------
.../net/wireless/realtek/rtlwifi/rtl8188ee/sw.c | 5 ++
.../net/wireless/realtek/rtlwifi/rtl8192ce/sw.c | 5 ++
.../net/wireless/realtek/rtlwifi/rtl8192cu/sw.c | 5 ++
.../net/wireless/realtek/rtlwifi/rtl8192de/sw.c | 5 ++
.../net/wireless/realtek/rtlwifi/rtl8192ee/sw.c | 5 ++
.../net/wireless/realtek/rtlwifi/rtl8192se/sw.c | 5 ++
.../net/wireless/realtek/rtlwifi/rtl8723ae/sw.c | 5 ++
.../net/wireless/realtek/rtlwifi/rtl8723be/sw.c | 5 ++
.../net/wireless/realtek/rtlwifi/rtl8821ae/sw.c | 5 ++
drivers/net/wireless/realtek/rtlwifi/wifi.h | 4 +-
13 files changed, 135 insertions(+), 43 deletions(-)

--
2.10.2


2017-01-01 01:07:16

by Larry Finger

[permalink] [raw]
Subject: [PATCH 1/3] rtlwifi: Redo debugging macros RTPRINT and RT_PRINT_DATA

These two debugging formss implement debugging using rather complicated
macro constructions. These are replaced with compiled code that is easier
to understand.

Signed-off-by: Larry Finger <[email protected]>
Cc: Ping-Ke Shih <[email protected]>
---
drivers/net/wireless/realtek/rtlwifi/debug.c | 42 ++++++++++++++++++++++++----
drivers/net/wireless/realtek/rtlwifi/debug.h | 33 ++++++++++------------
2 files changed, 51 insertions(+), 24 deletions(-)

diff --git a/drivers/net/wireless/realtek/rtlwifi/debug.c b/drivers/net/wireless/realtek/rtlwifi/debug.c
index 33905bb..cd2efac 100644
--- a/drivers/net/wireless/realtek/rtlwifi/debug.c
+++ b/drivers/net/wireless/realtek/rtlwifi/debug.c
@@ -51,7 +51,7 @@ EXPORT_SYMBOL_GPL(rtl_dbgp_flag_init);

#ifdef CONFIG_RTLWIFI_DEBUG
void _rtl_dbg_trace(struct rtl_priv *rtlpriv, int comp, int level,
- const char *modname, const char *fmt, ...)
+ const char *fmt, ...)
{
if (unlikely((comp & rtlpriv->dbg.global_debugcomponents) &&
(level <= rtlpriv->dbg.global_debuglevel))) {
@@ -63,13 +63,45 @@ void _rtl_dbg_trace(struct rtl_priv *rtlpriv, int comp, int level,
vaf.fmt = fmt;
vaf.va = &args;

- printk(KERN_DEBUG "%s:%ps:<%lx-%x> %pV",
- modname, __builtin_return_address(0),
- in_interrupt(), in_atomic(),
- &vaf);
+ pr_debug(":<%lx> %pV", in_interrupt(), &vaf);

va_end(args);
}
}
EXPORT_SYMBOL_GPL(_rtl_dbg_trace);
+
+void _rtl_dbg_print(struct rtl_priv *rtlpriv, u64 comp, int level,
+ const char *fmt, ...)
+{
+ if (unlikely((comp & rtlpriv->dbg.global_debugcomponents) &&
+ (level <= rtlpriv->dbg.global_debuglevel))) {
+ struct va_format vaf;
+ va_list args;
+
+ va_start(args, fmt);
+
+ vaf.fmt = fmt;
+ vaf.va = &args;
+
+ pr_debug("%pV", &vaf);
+
+ va_end(args);
+ }
+}
+EXPORT_SYMBOL_GPL(_rtl_dbg_print);
+
+void _rtl_dbg_print_data(struct rtl_priv *rtlpriv, u64 comp, int level,
+ const char *titlestring,
+ const void *hexdata, int hexdatalen)
+{
+ if (unlikely(((comp) & rtlpriv->dbg.global_debugcomponents) &&
+ ((level) <= rtlpriv->dbg.global_debuglevel))) {
+ pr_debug("In process \"%s\" (pid %i): %s\n",
+ current->comm, current->pid, titlestring);
+ print_hex_dump_bytes("", DUMP_PREFIX_NONE,
+ hexdata, hexdatalen);
+ }
+}
+EXPORT_SYMBOL_GPL(_rtl_dbg_print_data);
+
#endif
diff --git a/drivers/net/wireless/realtek/rtlwifi/debug.h b/drivers/net/wireless/realtek/rtlwifi/debug.h
index a6cc3ca..90c670b 100644
--- a/drivers/net/wireless/realtek/rtlwifi/debug.h
+++ b/drivers/net/wireless/realtek/rtlwifi/debug.h
@@ -168,34 +168,29 @@ enum dbgp_flag_e {

struct rtl_priv;

-__printf(5, 6)
+__printf(4, 5)
void _rtl_dbg_trace(struct rtl_priv *rtlpriv, int comp, int level,
- const char *modname, const char *fmt, ...);
+ const char *fmt, ...);
+
+__printf(4, 5)
+void _rtl_dbg_print(struct rtl_priv *rtlpriv, u64 comp, int level,
+ const char *fmt, ...);
+
+void _rtl_dbg_print_data(struct rtl_priv *rtlpriv, u64 comp, int level,
+ const char *titlestring,
+ const void *hexdata, int hexdatalen);

#define RT_TRACE(rtlpriv, comp, level, fmt, ...) \
_rtl_dbg_trace(rtlpriv, comp, level, \
- KBUILD_MODNAME, fmt, ##__VA_ARGS__)
+ fmt, ##__VA_ARGS__)

#define RTPRINT(rtlpriv, dbgtype, dbgflag, fmt, ...) \
-do { \
- if (unlikely(rtlpriv->dbg.dbgp_type[dbgtype] & dbgflag)) { \
- printk(KERN_DEBUG KBUILD_MODNAME ": " fmt, \
- ##__VA_ARGS__); \
- } \
-} while (0)
+ _rtl_dbg_print(rtlpriv, dbgtype, dbgflag, fmt, ##__VA_ARGS__)

#define RT_PRINT_DATA(rtlpriv, _comp, _level, _titlestring, _hexdata, \
_hexdatalen) \
-do { \
- if (unlikely(((_comp) & rtlpriv->dbg.global_debugcomponents) && \
- (_level <= rtlpriv->dbg.global_debuglevel))) { \
- printk(KERN_DEBUG "%s: In process \"%s\" (pid %i): %s\n", \
- KBUILD_MODNAME, current->comm, current->pid, \
- _titlestring); \
- print_hex_dump_bytes("", DUMP_PREFIX_NONE, \
- _hexdata, _hexdatalen); \
- } \
-} while (0)
+ _rtl_dbg_print_data(rtlpriv, _comp, _level, \
+ _titlestring, _hexdata, _hexdatalen)

#else

--
2.10.2

2017-01-18 16:38:09

by Larry Finger

[permalink] [raw]
Subject: Re: [3/3] rtlwifi: Enable debug mask to be set from sysfs

On 01/18/2017 08:49 AM, Kalle Valo wrote:
> Larry Finger <[email protected]> wrote:
>> The previous commit changes the debug system to use a mask to select
>> which components are to be debugged. Now, we add the necessary code
>> to change the mask from sysfs.
>>
>> Signed-off-by: Larry Finger <[email protected]>
>> Cc: Ping-Ke Shih <[email protected]>
>
> There's already a generic sysfs interface to change module parameters in
> /sys/module/<driver>/parameters, drivers should not have a private interface for
> that.

Kalle,

I was not aware of that part of sysfs. I will respin the patch as well as remove
the old code that set the debug level.

Thanks,

Larry

2017-01-19 09:07:13

by Kalle Valo

[permalink] [raw]
Subject: Re: [3/3] rtlwifi: Enable debug mask to be set from sysfs

Larry Finger <[email protected]> writes:

> On 01/18/2017 08:49 AM, Kalle Valo wrote:
>> Larry Finger <[email protected]> wrote:
>>> The previous commit changes the debug system to use a mask to select
>>> which components are to be debugged. Now, we add the necessary code
>>> to change the mask from sysfs.
>>>
>>> Signed-off-by: Larry Finger <[email protected]>
>>> Cc: Ping-Ke Shih <[email protected]>
>>
>> There's already a generic sysfs interface to change module parameters in
>> /sys/module/<driver>/parameters, drivers should not have a private interface for
>> that.
>
> Kalle,
>
> I was not aware of that part of sysfs. I will respin the patch as well
> as remove the old code that set the debug level.

Good, thanks. I dropped the whole series now and assume that you will
send v2.

--
Kalle Valo

2017-01-01 01:07:17

by Larry Finger

[permalink] [raw]
Subject: [PATCH 2/3] rtlwifi: Convert COMP_XX entries into a proper debugging mask

The debugging macros contain a parameter COMP_XX that could be used as a
mask; however, the code turns all these various bits on at the same time.
This change implements them as a proper mask, and adds module parameters
to set the mask at load time.

Signed-off-by: Larry Finger <[email protected]>
Cc: Ping-Ke Shih <[email protected]>
---
drivers/net/wireless/realtek/rtlwifi/debug.c | 17 +++--------------
drivers/net/wireless/realtek/rtlwifi/rtl8188ee/sw.c | 5 +++++
drivers/net/wireless/realtek/rtlwifi/rtl8192ce/sw.c | 5 +++++
drivers/net/wireless/realtek/rtlwifi/rtl8192cu/sw.c | 5 +++++
drivers/net/wireless/realtek/rtlwifi/rtl8192de/sw.c | 5 +++++
drivers/net/wireless/realtek/rtlwifi/rtl8192ee/sw.c | 5 +++++
drivers/net/wireless/realtek/rtlwifi/rtl8192se/sw.c | 5 +++++
drivers/net/wireless/realtek/rtlwifi/rtl8723ae/sw.c | 5 +++++
drivers/net/wireless/realtek/rtlwifi/rtl8723be/sw.c | 5 +++++
drivers/net/wireless/realtek/rtlwifi/rtl8821ae/sw.c | 5 +++++
drivers/net/wireless/realtek/rtlwifi/wifi.h | 4 +++-
11 files changed, 51 insertions(+), 15 deletions(-)

diff --git a/drivers/net/wireless/realtek/rtlwifi/debug.c b/drivers/net/wireless/realtek/rtlwifi/debug.c
index cd2efac..23a54be 100644
--- a/drivers/net/wireless/realtek/rtlwifi/debug.c
+++ b/drivers/net/wireless/realtek/rtlwifi/debug.c
@@ -31,17 +31,6 @@ void rtl_dbgp_flag_init(struct ieee80211_hw *hw)
struct rtl_priv *rtlpriv = rtl_priv(hw);
u8 i;

- rtlpriv->dbg.global_debugcomponents =
- COMP_ERR | COMP_FW | COMP_INIT | COMP_RECV | COMP_SEND |
- COMP_MLME | COMP_SCAN | COMP_INTR | COMP_LED | COMP_SEC |
- COMP_BEACON | COMP_RATE | COMP_RXDESC | COMP_DIG | COMP_TXAGC |
- COMP_POWER | COMP_POWER_TRACKING | COMP_BB_POWERSAVING | COMP_SWAS |
- COMP_RF | COMP_TURBO | COMP_RATR | COMP_CMD |
- COMP_EFUSE | COMP_QOS | COMP_MAC80211 | COMP_REGD | COMP_CHAN |
- COMP_EASY_CONCURRENT | COMP_EFUSE | COMP_QOS | COMP_MAC80211 |
- COMP_REGD | COMP_CHAN | COMP_BT_COEXIST;
-
-
for (i = 0; i < DBGP_TYPE_MAX; i++)
rtlpriv->dbg.dbgp_type[i] = 0;

@@ -53,7 +42,7 @@ EXPORT_SYMBOL_GPL(rtl_dbgp_flag_init);
void _rtl_dbg_trace(struct rtl_priv *rtlpriv, int comp, int level,
const char *fmt, ...)
{
- if (unlikely((comp & rtlpriv->dbg.global_debugcomponents) &&
+ if (unlikely((comp & rtlpriv->dbg.global_debug_mask) &&
(level <= rtlpriv->dbg.global_debuglevel))) {
struct va_format vaf;
va_list args;
@@ -73,7 +62,7 @@ EXPORT_SYMBOL_GPL(_rtl_dbg_trace);
void _rtl_dbg_print(struct rtl_priv *rtlpriv, u64 comp, int level,
const char *fmt, ...)
{
- if (unlikely((comp & rtlpriv->dbg.global_debugcomponents) &&
+ if (unlikely((comp & rtlpriv->dbg.global_debug_mask) &&
(level <= rtlpriv->dbg.global_debuglevel))) {
struct va_format vaf;
va_list args;
@@ -94,7 +83,7 @@ void _rtl_dbg_print_data(struct rtl_priv *rtlpriv, u64 comp, int level,
const char *titlestring,
const void *hexdata, int hexdatalen)
{
- if (unlikely(((comp) & rtlpriv->dbg.global_debugcomponents) &&
+ if (unlikely(((comp) & rtlpriv->dbg.global_debug_mask) &&
((level) <= rtlpriv->dbg.global_debuglevel))) {
pr_debug("In process \"%s\" (pid %i): %s\n",
current->comm, current->pid, titlestring);
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/sw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/sw.c
index 1bf2993..75d8f75 100644
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/sw.c
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/sw.c
@@ -133,6 +133,8 @@ int rtl88e_init_sw_vars(struct ieee80211_hw *hw)

/* for debug level */
rtlpriv->dbg.global_debuglevel = rtlpriv->cfg->mod_params->debug;
+ /* for debug mask */
+ rtlpriv->dbg.global_debug_mask = rtlpriv->cfg->mod_params->debug_mask;
/* for LPS & IPS */
rtlpriv->psc.inactiveps = rtlpriv->cfg->mod_params->inactiveps;
rtlpriv->psc.swctrl_lps = rtlpriv->cfg->mod_params->swctrl_lps;
@@ -277,6 +279,7 @@ static struct rtl_mod_params rtl88ee_mod_params = {
.fwctrl_lps = false,
.msi_support = true,
.debug = 0,
+ .debug_mask = 0,
};

static const struct rtl_hal_cfg rtl88ee_hal_cfg = {
@@ -393,6 +396,7 @@ MODULE_FIRMWARE("rtlwifi/rtl8188efw.bin");

module_param_named(swenc, rtl88ee_mod_params.sw_crypto, bool, 0444);
module_param_named(debug, rtl88ee_mod_params.debug, int, 0444);
+module_param_named(debug_mask, rtl88ee_mod_params.debug_mask, ullong, 0444);
module_param_named(ips, rtl88ee_mod_params.inactiveps, bool, 0444);
module_param_named(swlps, rtl88ee_mod_params.swctrl_lps, bool, 0444);
module_param_named(fwlps, rtl88ee_mod_params.fwctrl_lps, bool, 0444);
@@ -405,6 +409,7 @@ MODULE_PARM_DESC(swlps, "Set to 1 to use SW control power save (default 0)\n");
MODULE_PARM_DESC(fwlps, "Set to 1 to use FW control power save (default 1)\n");
MODULE_PARM_DESC(msi, "Set to 1 to use MSI interrupts mode (default 1)\n");
MODULE_PARM_DESC(debug, "Set debug level (0-5) (default 0)");
+MODULE_PARM_DESC(debug_mask, "Set debug mask (default 0)");
MODULE_PARM_DESC(disable_watchdog, "Set to 1 to disable the watchdog (default 0)\n");

static SIMPLE_DEV_PM_OPS(rtlwifi_pm_ops, rtl_pci_suspend, rtl_pci_resume);
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/sw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/sw.c
index 1fd8818..93ef2a5 100644
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/sw.c
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/sw.c
@@ -132,6 +132,8 @@ int rtl92c_init_sw_vars(struct ieee80211_hw *hw)

/* for debug level */
rtlpriv->dbg.global_debuglevel = rtlpriv->cfg->mod_params->debug;
+ /* for debug mask */
+ rtlpriv->dbg.global_debug_mask = rtlpriv->cfg->mod_params->debug_mask;
/* for LPS & IPS */
rtlpriv->psc.inactiveps = rtlpriv->cfg->mod_params->inactiveps;
rtlpriv->psc.swctrl_lps = rtlpriv->cfg->mod_params->swctrl_lps;
@@ -248,6 +250,7 @@ static struct rtl_mod_params rtl92ce_mod_params = {
.swctrl_lps = false,
.fwctrl_lps = true,
.debug = 0,
+ .debug_mask = 0,
};

static const struct rtl_hal_cfg rtl92ce_hal_cfg = {
@@ -365,6 +368,7 @@ MODULE_FIRMWARE("rtlwifi/rtl8192cfwU_B.bin");

module_param_named(swenc, rtl92ce_mod_params.sw_crypto, bool, 0444);
module_param_named(debug, rtl92ce_mod_params.debug, int, 0444);
+module_param_named(debug_mask, rtl92ce_mod_params.debug_mask, ullong, 0444);
module_param_named(ips, rtl92ce_mod_params.inactiveps, bool, 0444);
module_param_named(swlps, rtl92ce_mod_params.swctrl_lps, bool, 0444);
module_param_named(fwlps, rtl92ce_mod_params.fwctrl_lps, bool, 0444);
@@ -373,6 +377,7 @@ MODULE_PARM_DESC(ips, "Set to 0 to not use link power save (default 1)\n");
MODULE_PARM_DESC(swlps, "Set to 1 to use SW control power save (default 0)\n");
MODULE_PARM_DESC(fwlps, "Set to 1 to use FW control power save (default 1)\n");
MODULE_PARM_DESC(debug, "Set debug level (0-5) (default 0)");
+MODULE_PARM_DESC(debug_mask, "Set debug mask (default 0)");

static SIMPLE_DEV_PM_OPS(rtlwifi_pm_ops, rtl_pci_suspend, rtl_pci_resume);

diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/sw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/sw.c
index 935e830..bca46ed 100644
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/sw.c
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/sw.c
@@ -62,6 +62,8 @@ static int rtl92cu_init_sw_vars(struct ieee80211_hw *hw)
rtlpriv->dm.disable_framebursting = false;
rtlpriv->dm.thermalvalue = 0;
rtlpriv->dbg.global_debuglevel = rtlpriv->cfg->mod_params->debug;
+ /* for debug mask */
+ rtlpriv->dbg.global_debug_mask = rtlpriv->cfg->mod_params->debug_mask;
rtlpriv->cfg->mod_params->sw_crypto =
rtlpriv->cfg->mod_params->sw_crypto;

@@ -158,12 +160,15 @@ static struct rtl_hal_ops rtl8192cu_hal_ops = {
static struct rtl_mod_params rtl92cu_mod_params = {
.sw_crypto = 0,
.debug = 0,
+ .debug_mask = 0,
};

module_param_named(swenc, rtl92cu_mod_params.sw_crypto, bool, 0444);
module_param_named(debug, rtl92cu_mod_params.debug, int, 0444);
+module_param_named(debug_mask, rtl92cu_mod_params.debug_mask, ullong, 0444);
MODULE_PARM_DESC(swenc, "Set to 1 for software crypto (default 0)\n");
MODULE_PARM_DESC(debug, "Set debug level (0-5) (default 0)");
+MODULE_PARM_DESC(debug_mask, "Set debug mask (default 0)");

static struct rtl_hal_usbint_cfg rtl92cu_interface_cfg = {
/* rx */
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192de/sw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192de/sw.c
index 680217f..e214761 100644
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192de/sw.c
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192de/sw.c
@@ -142,6 +142,8 @@ static int rtl92d_init_sw_vars(struct ieee80211_hw *hw)

/* for debug level */
rtlpriv->dbg.global_debuglevel = rtlpriv->cfg->mod_params->debug;
+ /* for debug mask */
+ rtlpriv->dbg.global_debug_mask = rtlpriv->cfg->mod_params->debug_mask;
/* for LPS & IPS */
rtlpriv->psc.inactiveps = rtlpriv->cfg->mod_params->inactiveps;
rtlpriv->psc.swctrl_lps = rtlpriv->cfg->mod_params->swctrl_lps;
@@ -255,6 +257,7 @@ static struct rtl_mod_params rtl92de_mod_params = {
.swctrl_lps = true,
.fwctrl_lps = false,
.debug = 0,
+ .debug_mask = 0,
};

static const struct rtl_hal_cfg rtl92de_hal_cfg = {
@@ -368,11 +371,13 @@ module_param_named(debug, rtl92de_mod_params.debug, int, 0444);
module_param_named(ips, rtl92de_mod_params.inactiveps, bool, 0444);
module_param_named(swlps, rtl92de_mod_params.swctrl_lps, bool, 0444);
module_param_named(fwlps, rtl92de_mod_params.fwctrl_lps, bool, 0444);
+module_param_named(debug_mask, rtl92de_mod_params.debug_mask, ullong, 0444);
MODULE_PARM_DESC(swenc, "Set to 1 for software crypto (default 0)\n");
MODULE_PARM_DESC(ips, "Set to 0 to not use link power save (default 1)\n");
MODULE_PARM_DESC(swlps, "Set to 1 to use SW control power save (default 1)\n");
MODULE_PARM_DESC(fwlps, "Set to 1 to use FW control power save (default 0)\n");
MODULE_PARM_DESC(debug, "Set debug level (0-5) (default 0)");
+MODULE_PARM_DESC(debug_mask, "Set debug mask (default 0)");

static SIMPLE_DEV_PM_OPS(rtlwifi_pm_ops, rtl_pci_suspend, rtl_pci_resume);

diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192ee/sw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192ee/sw.c
index 17e675d..91387ed 100644
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192ee/sw.c
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192ee/sw.c
@@ -135,6 +135,8 @@ int rtl92ee_init_sw_vars(struct ieee80211_hw *hw)

/* for debug level */
rtlpriv->dbg.global_debuglevel = rtlpriv->cfg->mod_params->debug;
+ /* for debug mask */
+ rtlpriv->dbg.global_debug_mask = rtlpriv->cfg->mod_params->debug_mask;
/* for LPS & IPS */
rtlpriv->psc.inactiveps = rtlpriv->cfg->mod_params->inactiveps;
rtlpriv->psc.swctrl_lps = rtlpriv->cfg->mod_params->swctrl_lps;
@@ -259,6 +261,7 @@ static struct rtl_mod_params rtl92ee_mod_params = {
.fwctrl_lps = true,
.msi_support = true,
.debug = 0,
+ .debug_mask = 0,
};

static const struct rtl_hal_cfg rtl92ee_hal_cfg = {
@@ -369,6 +372,7 @@ MODULE_FIRMWARE("rtlwifi/rtl8192eefw.bin");

module_param_named(swenc, rtl92ee_mod_params.sw_crypto, bool, 0444);
module_param_named(debug, rtl92ee_mod_params.debug, int, 0444);
+module_param_named(debug_mask, rtl92ee_mod_params.debug_mask, ullong, 0444);
module_param_named(ips, rtl92ee_mod_params.inactiveps, bool, 0444);
module_param_named(swlps, rtl92ee_mod_params.swctrl_lps, bool, 0444);
module_param_named(fwlps, rtl92ee_mod_params.fwctrl_lps, bool, 0444);
@@ -381,6 +385,7 @@ MODULE_PARM_DESC(swlps, "Set to 1 to use SW control power save (default 0)\n");
MODULE_PARM_DESC(fwlps, "Set to 1 to use FW control power save (default 1)\n");
MODULE_PARM_DESC(msi, "Set to 1 to use MSI interrupts mode (default 1)\n");
MODULE_PARM_DESC(debug, "Set debug level (0-5) (default 0)");
+MODULE_PARM_DESC(debug_mask, "Set debug mask (default 0)");
MODULE_PARM_DESC(disable_watchdog, "Set to 1 to disable the watchdog (default 0)\n");

static SIMPLE_DEV_PM_OPS(rtlwifi_pm_ops, rtl_pci_suspend, rtl_pci_resume);
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192se/sw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192se/sw.c
index a19d1ec..a6db38e 100644
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192se/sw.c
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192se/sw.c
@@ -180,6 +180,8 @@ static int rtl92s_init_sw_vars(struct ieee80211_hw *hw)

/* for debug level */
rtlpriv->dbg.global_debuglevel = rtlpriv->cfg->mod_params->debug;
+ /* for debug mask */
+ rtlpriv->dbg.global_debug_mask = rtlpriv->cfg->mod_params->debug_mask;
/* for LPS & IPS */
rtlpriv->psc.inactiveps = rtlpriv->cfg->mod_params->inactiveps;
rtlpriv->psc.swctrl_lps = rtlpriv->cfg->mod_params->swctrl_lps;
@@ -298,6 +300,7 @@ static struct rtl_mod_params rtl92se_mod_params = {
.swctrl_lps = true,
.fwctrl_lps = false,
.debug = 0,
+ .debug_mask = 0,
};

/* Because memory R/W bursting will cause system hang/crash
@@ -417,6 +420,7 @@ MODULE_FIRMWARE("rtlwifi/rtl8192sefw.bin");

module_param_named(swenc, rtl92se_mod_params.sw_crypto, bool, 0444);
module_param_named(debug, rtl92se_mod_params.debug, int, 0444);
+module_param_named(debug_mask, rtl92se_mod_params.debug_mask, ullong, 0444);
module_param_named(ips, rtl92se_mod_params.inactiveps, bool, 0444);
module_param_named(swlps, rtl92se_mod_params.swctrl_lps, bool, 0444);
module_param_named(fwlps, rtl92se_mod_params.fwctrl_lps, bool, 0444);
@@ -425,6 +429,7 @@ MODULE_PARM_DESC(ips, "Set to 0 to not use link power save (default 1)\n");
MODULE_PARM_DESC(swlps, "Set to 1 to use SW control power save (default 1)\n");
MODULE_PARM_DESC(fwlps, "Set to 1 to use FW control power save (default 0)\n");
MODULE_PARM_DESC(debug, "Set debug level (0-5) (default 0)");
+MODULE_PARM_DESC(debug_mask, "Set debug mask (default 0)");

static SIMPLE_DEV_PM_OPS(rtlwifi_pm_ops, rtl_pci_suspend, rtl_pci_resume);

diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/sw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/sw.c
index 833ef8a..e42c5b1 100644
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/sw.c
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/sw.c
@@ -147,6 +147,8 @@ int rtl8723e_init_sw_vars(struct ieee80211_hw *hw)

/* for debug level */
rtlpriv->dbg.global_debuglevel = rtlpriv->cfg->mod_params->debug;
+ /* for debug mask */
+ rtlpriv->dbg.global_debug_mask = rtlpriv->cfg->mod_params->debug_mask;
/* for LPS & IPS */
rtlpriv->psc.inactiveps = rtlpriv->cfg->mod_params->inactiveps;
rtlpriv->psc.swctrl_lps = rtlpriv->cfg->mod_params->swctrl_lps;
@@ -269,6 +271,7 @@ static struct rtl_mod_params rtl8723e_mod_params = {
.swctrl_lps = false,
.fwctrl_lps = true,
.debug = 0,
+ .debug_mask = 0,
.msi_support = false,
.disable_watchdog = false,
};
@@ -383,6 +386,7 @@ MODULE_FIRMWARE("rtlwifi/rtl8723efw.bin");

module_param_named(swenc, rtl8723e_mod_params.sw_crypto, bool, 0444);
module_param_named(debug, rtl8723e_mod_params.debug, int, 0444);
+module_param_named(debug_mask, rtl8723e_mod_params.debug_mask, ullong, 0444);
module_param_named(ips, rtl8723e_mod_params.inactiveps, bool, 0444);
module_param_named(swlps, rtl8723e_mod_params.swctrl_lps, bool, 0444);
module_param_named(fwlps, rtl8723e_mod_params.fwctrl_lps, bool, 0444);
@@ -395,6 +399,7 @@ MODULE_PARM_DESC(swlps, "Set to 1 to use SW control power save (default 0)\n");
MODULE_PARM_DESC(fwlps, "Set to 1 to use FW control power save (default 1)\n");
MODULE_PARM_DESC(msi, "Set to 1 to use MSI interrupts mode (default 0)\n");
MODULE_PARM_DESC(debug, "Set debug level (0-5) (default 0)");
+MODULE_PARM_DESC(debug_mask, "Set debug mask (default 0)");
MODULE_PARM_DESC(disable_watchdog, "Set to 1 to disable the watchdog (default 0)\n");

static SIMPLE_DEV_PM_OPS(rtlwifi_pm_ops, rtl_pci_suspend, rtl_pci_resume);
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8723be/sw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8723be/sw.c
index f8322fc..c02300d 100644
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8723be/sw.c
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8723be/sw.c
@@ -146,6 +146,8 @@ int rtl8723be_init_sw_vars(struct ieee80211_hw *hw)

/* for debug level */
rtlpriv->dbg.global_debuglevel = rtlpriv->cfg->mod_params->debug;
+ /* for debug mask */
+ rtlpriv->dbg.global_debug_mask = rtlpriv->cfg->mod_params->debug_mask;
/* for LPS & IPS */
rtlpriv->psc.inactiveps = rtlpriv->cfg->mod_params->inactiveps;
rtlpriv->psc.swctrl_lps = rtlpriv->cfg->mod_params->swctrl_lps;
@@ -272,6 +274,7 @@ static struct rtl_mod_params rtl8723be_mod_params = {
.msi_support = false,
.disable_watchdog = false,
.debug = 0,
+ .debug_mask = 0,
.ant_sel = 0,
};

@@ -387,6 +390,7 @@ MODULE_FIRMWARE("rtlwifi/rtl8723befw.bin");

module_param_named(swenc, rtl8723be_mod_params.sw_crypto, bool, 0444);
module_param_named(debug, rtl8723be_mod_params.debug, int, 0444);
+module_param_named(debug_mask, rtl8723be_mod_params.debug_mask, ullong, 0444);
module_param_named(ips, rtl8723be_mod_params.inactiveps, bool, 0444);
module_param_named(swlps, rtl8723be_mod_params.swctrl_lps, bool, 0444);
module_param_named(fwlps, rtl8723be_mod_params.fwctrl_lps, bool, 0444);
@@ -400,6 +404,7 @@ MODULE_PARM_DESC(swlps, "Set to 1 to use SW control power save (default 0)\n");
MODULE_PARM_DESC(fwlps, "Set to 1 to use FW control power save (default 1)\n");
MODULE_PARM_DESC(msi, "Set to 1 to use MSI interrupts mode (default 0)\n");
MODULE_PARM_DESC(debug, "Set debug level (0-5) (default 0)");
+MODULE_PARM_DESC(debug_mask, "Set debug mask (default 0)");
MODULE_PARM_DESC(disable_watchdog,
"Set to 1 to disable the watchdog (default 0)\n");
MODULE_PARM_DESC(ant_sel, "Set to 1 or 2 to force antenna number (default 0)\n");
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/sw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/sw.c
index 6ecaf94..28d778e 100644
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/sw.c
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/sw.c
@@ -162,6 +162,8 @@ int rtl8821ae_init_sw_vars(struct ieee80211_hw *hw)

/* for debug level */
rtlpriv->dbg.global_debuglevel = rtlpriv->cfg->mod_params->debug;
+ /* for debug mask */
+ rtlpriv->dbg.global_debug_mask = rtlpriv->cfg->mod_params->debug_mask;
/* for LPS & IPS */
rtlpriv->psc.inactiveps = rtlpriv->cfg->mod_params->inactiveps;
rtlpriv->psc.swctrl_lps = rtlpriv->cfg->mod_params->swctrl_lps;
@@ -310,6 +312,7 @@ static struct rtl_mod_params rtl8821ae_mod_params = {
.msi_support = true,
.int_clear = true,
.debug = 0,
+ .debug_mask = 0,
.disable_watchdog = 0,
};

@@ -431,6 +434,7 @@ MODULE_FIRMWARE("rtlwifi/rtl8821aefw.bin");

module_param_named(swenc, rtl8821ae_mod_params.sw_crypto, bool, 0444);
module_param_named(debug, rtl8821ae_mod_params.debug, int, 0444);
+module_param_named(debug_mask, rtl8821ae_mod_params.debug_mask, ullong, 0444);
module_param_named(ips, rtl8821ae_mod_params.inactiveps, bool, 0444);
module_param_named(swlps, rtl8821ae_mod_params.swctrl_lps, bool, 0444);
module_param_named(fwlps, rtl8821ae_mod_params.fwctrl_lps, bool, 0444);
@@ -444,6 +448,7 @@ MODULE_PARM_DESC(swlps, "Set to 1 to use SW control power save (default 0)\n");
MODULE_PARM_DESC(fwlps, "Set to 1 to use FW control power save (default 1)\n");
MODULE_PARM_DESC(msi, "Set to 1 to use MSI interrupts mode (default 1)\n");
MODULE_PARM_DESC(debug, "Set debug level (0-5) (default 0)");
+MODULE_PARM_DESC(debug_mask, "Set debug mask (default 0)");
MODULE_PARM_DESC(disable_watchdog, "Set to 1 to disable the watchdog (default 0)\n");
MODULE_PARM_DESC(int_clear, "Set to 0 to disable interrupt clear before set (default 1)\n");

diff --git a/drivers/net/wireless/realtek/rtlwifi/wifi.h b/drivers/net/wireless/realtek/rtlwifi/wifi.h
index dafe486..419d512 100644
--- a/drivers/net/wireless/realtek/rtlwifi/wifi.h
+++ b/drivers/net/wireless/realtek/rtlwifi/wifi.h
@@ -2221,6 +2221,8 @@ struct rtl_intf_ops {
};

struct rtl_mod_params {
+ /* default: 0,0 */
+ u64 debug_mask;
/* default: 0 = using hardware encryption */
bool sw_crypto;

@@ -2348,7 +2350,7 @@ struct rtl_works {
struct rtl_debug {
u32 dbgp_type[DBGP_TYPE_MAX];
int global_debuglevel;
- u64 global_debugcomponents;
+ u64 global_debug_mask;

/* add for proc debug */
struct proc_dir_entry *proc_dir;
--
2.10.2

2017-01-01 01:07:17

by Larry Finger

[permalink] [raw]
Subject: [PATCH 3/3] rtlwifi: Enable debug mask to be set from sysfs

The previous commit changes the debug system to use a mask to select
which components are to be debugged. Now, we add the necessary code
to change the mask from sysfs.

Signed-off-by: Larry Finger <[email protected]>
Cc: Ping-Ke Shih <[email protected]>
---
drivers/net/wireless/realtek/rtlwifi/base.c | 43 +++++++++++++++++++++++-----
drivers/net/wireless/realtek/rtlwifi/debug.c | 6 ++--
drivers/net/wireless/realtek/rtlwifi/debug.h | 6 ++--
3 files changed, 42 insertions(+), 13 deletions(-)

diff --git a/drivers/net/wireless/realtek/rtlwifi/base.c b/drivers/net/wireless/realtek/rtlwifi/base.c
index fa27d29..c275166 100644
--- a/drivers/net/wireless/realtek/rtlwifi/base.c
+++ b/drivers/net/wireless/realtek/rtlwifi/base.c
@@ -2107,12 +2107,40 @@ static ssize_t rtl_store_debug_level(struct device *d,

ret = kstrtoul(buf, 0, &val);
if (ret) {
- RT_TRACE(rtlpriv, COMP_ERR, DBG_DMESG,
- "%s is not in hex or decimal form.\n", buf);
+ pr_err("%s is not in hex or decimal form.\n", buf);
} else {
rtlpriv->dbg.global_debuglevel = val;
- RT_TRACE(rtlpriv, COMP_ERR, DBG_DMESG,
- "debuglevel:%x\n",
+ pr_debug("debuglevel:%x\n",
+ rtlpriv->dbg.global_debuglevel);
+ }
+
+ return strnlen(buf, count);
+}
+
+static ssize_t rtl_show_debug_mask(struct device *d,
+ struct device_attribute *attr, char *buf)
+{
+ struct ieee80211_hw *hw = dev_get_drvdata(d);
+ struct rtl_priv *rtlpriv = rtl_priv(hw);
+
+ return sprintf(buf, "0x%x\n",rtlpriv->dbg.global_debuglevel);
+}
+
+static ssize_t rtl_store_debug_mask(struct device *d,
+ struct device_attribute *attr,
+ const char *buf, size_t count)
+{
+ struct ieee80211_hw *hw = dev_get_drvdata(d);
+ struct rtl_priv *rtlpriv = rtl_priv(hw);
+ u64 val;
+ int ret;
+
+ ret = kstrtou64(buf, 0, &val);
+ if (ret) {
+ pr_err("%s is not in hex or decimal form.\n", buf);
+ } else {
+ rtlpriv->dbg.global_debuglevel = val;
+ pr_debug("debuglevel:%x\n",
rtlpriv->dbg.global_debuglevel);
}

@@ -2121,16 +2149,17 @@ static ssize_t rtl_store_debug_level(struct device *d,

static DEVICE_ATTR(debug_level, S_IWUSR | S_IRUGO,
rtl_show_debug_level, rtl_store_debug_level);
+static DEVICE_ATTR(debug_mask, S_IWUSR | S_IRUGO,
+ rtl_show_debug_mask, rtl_store_debug_mask);

static struct attribute *rtl_sysfs_entries[] = {
-
&dev_attr_debug_level.attr,
-
+ &dev_attr_debug_mask.attr,
NULL
};

/*
- * "name" is folder name witch will be
+ * "name" is folder name which will be
* put in device directory like :
* sys/devices/pci0000:00/0000:00:1c.4/
* 0000:06:00.0/rtl_sysfs
diff --git a/drivers/net/wireless/realtek/rtlwifi/debug.c b/drivers/net/wireless/realtek/rtlwifi/debug.c
index 23a54be..55c91ee 100644
--- a/drivers/net/wireless/realtek/rtlwifi/debug.c
+++ b/drivers/net/wireless/realtek/rtlwifi/debug.c
@@ -40,7 +40,7 @@ EXPORT_SYMBOL_GPL(rtl_dbgp_flag_init);

#ifdef CONFIG_RTLWIFI_DEBUG
void _rtl_dbg_trace(struct rtl_priv *rtlpriv, int comp, int level,
- const char *fmt, ...)
+ const char *func, const char *fmt, ...)
{
if (unlikely((comp & rtlpriv->dbg.global_debug_mask) &&
(level <= rtlpriv->dbg.global_debuglevel))) {
@@ -52,7 +52,7 @@ void _rtl_dbg_trace(struct rtl_priv *rtlpriv, int comp, int level,
vaf.fmt = fmt;
vaf.va = &args;

- pr_debug(":<%lx> %pV", in_interrupt(), &vaf);
+ pr_debug("%s %pV", func, &vaf);

va_end(args);
}
@@ -85,7 +85,7 @@ void _rtl_dbg_print_data(struct rtl_priv *rtlpriv, u64 comp, int level,
{
if (unlikely(((comp) & rtlpriv->dbg.global_debug_mask) &&
((level) <= rtlpriv->dbg.global_debuglevel))) {
- pr_debug("In process \"%s\" (pid %i): %s\n",
+ pr_info("In process \"%s\" (pid %i): %s\n",
current->comm, current->pid, titlestring);
print_hex_dump_bytes("", DUMP_PREFIX_NONE,
hexdata, hexdatalen);
diff --git a/drivers/net/wireless/realtek/rtlwifi/debug.h b/drivers/net/wireless/realtek/rtlwifi/debug.h
index 90c670b..dc0b9c3 100644
--- a/drivers/net/wireless/realtek/rtlwifi/debug.h
+++ b/drivers/net/wireless/realtek/rtlwifi/debug.h
@@ -168,9 +168,9 @@ enum dbgp_flag_e {

struct rtl_priv;

-__printf(4, 5)
+__printf(5, 6)
void _rtl_dbg_trace(struct rtl_priv *rtlpriv, int comp, int level,
- const char *fmt, ...);
+ const char *func, const char *fmt, ...);

__printf(4, 5)
void _rtl_dbg_print(struct rtl_priv *rtlpriv, u64 comp, int level,
@@ -182,7 +182,7 @@ void _rtl_dbg_print_data(struct rtl_priv *rtlpriv, u64 comp, int level,

#define RT_TRACE(rtlpriv, comp, level, fmt, ...) \
_rtl_dbg_trace(rtlpriv, comp, level, \
- fmt, ##__VA_ARGS__)
+ __func__, fmt, ##__VA_ARGS__)

#define RTPRINT(rtlpriv, dbgtype, dbgflag, fmt, ...) \
_rtl_dbg_print(rtlpriv, dbgtype, dbgflag, fmt, ##__VA_ARGS__)
--
2.10.2

2017-01-18 14:49:37

by Kalle Valo

[permalink] [raw]
Subject: Re: [3/3] rtlwifi: Enable debug mask to be set from sysfs

Larry Finger <[email protected]> wrote:
> The previous commit changes the debug system to use a mask to select
> which components are to be debugged. Now, we add the necessary code
> to change the mask from sysfs.
>
> Signed-off-by: Larry Finger <[email protected]>
> Cc: Ping-Ke Shih <[email protected]>

There's already a generic sysfs interface to change module parameters in
/sys/module/<driver>/parameters, drivers should not have a private interface for
that.

--
https://patchwork.kernel.org/patch/9492849/

Documentation about submitting wireless patches and checking status
from patchwork:

https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches