[PATCH 2/2] Declare debug_mask in debugfs
Eugene Krasnikov
k.eugene.e at gmail.com
Wed Jul 10 10:40:13 EDT 2013
i suggest to keep it so far because debug fs is not always mounted.
2013/7/10 YanBo <dreamfly281 at gmail.com>:
> On Tue, Jul 9, 2013 at 10:59 PM, Eugene Krasnikov <k.eugene.e at gmail.com> wrote:
>> Now debug_mask can be changed in runtime.
>>
>> Signed-off-by: Eugene Krasnikov <k.eugene.e at gmail.com>
>> ---
>> debug.c | 37 +++++++++++++++++++++++++++++++++++++
>> debug.h | 1 +
>> 2 files changed, 38 insertions(+)
>>
>> diff --git a/debug.c b/debug.c
>> index 4dcaa82..529dd54 100644
>> --- a/debug.c
>> +++ b/debug.c
>> @@ -123,6 +123,41 @@ static const struct file_operations fops_wcn36xx_dump = {
>> .write = write_file_dump,
>> };
>>
>> +static ssize_t read_file_debug_mask(struct file *file, char __user *user_buf,
>> + size_t count, loff_t *ppos)
>> +{
>> + char buf[32];
>> + unsigned int len;
>> + len = snprintf(buf, 32, "0x%08x\n", debug_mask);
>> + return simple_read_from_buffer(user_buf, count, ppos, buf, 2);
>> +}
>> +
>> +static ssize_t write_file_debug_mask(struct file *file,
>> + const char __user *user_buf,
>> + size_t count, loff_t *ppos)
>> +{
>> + unsigned long mask;
>> + char buf[32];
>> + ssize_t len;
>> +
>> + len = min(count, sizeof(buf) - 1);
>> + if (copy_from_user(buf, user_buf, len))
>> + return -EFAULT;
>> +
>> + buf[len] = '\0';
>> + if (kstrtoul(buf, 0, &mask))
>> + return -EINVAL;
>> +
>> + debug_mask = mask;
>> + return count;
>> +}
>> +
>> +static const struct file_operations fops_wcn36xx_debug_mask = {
>> + .open = wcn36xx_debugfs_open,
>> + .read = read_file_debug_mask,
>> + .write = write_file_debug_mask,
>> +};
>> +
>> #define ADD_FILE(name, mode, fop, priv_data) \
>> do { \
>> struct dentry *d; \
>> @@ -150,6 +185,8 @@ void wcn36xx_debugfs_init(struct wcn36xx *wcn)
>> ADD_FILE(bmps_switcher, S_IRUSR | S_IWUSR,
>> &fops_wcn36xx_bmps, wcn);
>> ADD_FILE(dump, S_IWUSR, &fops_wcn36xx_dump, wcn);
>> + ADD_FILE(debug_mask, S_IRUSR | S_IWUSR,
>> + &fops_wcn36xx_debug_mask, wcn);
>> }
>>
>> void wcn36xx_debugfs_exit(struct wcn36xx *wcn)
>> diff --git a/debug.h b/debug.h
>> index 5bafc7e..3a3cf5f 100644
>> --- a/debug.h
>> +++ b/debug.h
>> @@ -35,6 +35,7 @@ struct wcn36xx_dfs_entry {
>> struct dentry *rootdir;
>> struct wcn36xx_dfs_file file_bmps_switcher;
>> struct wcn36xx_dfs_file file_dump;
>> + struct wcn36xx_dfs_file file_debug_mask;
>> };
>>
>> void wcn36xx_debugfs_init(struct wcn36xx *wcn);
>> --
>> 1.7.11.3
>
> Very useful feature for debug.
> Just one topic, if we use debugfs dynamic control the debug log, do we
> still need the debug_mask as module parameter?
> if no, how about move the debug_mask from a global variable to a
> element of the wcn structure?
--
Best regards,
Eugene
More information about the wcn36xx
mailing list