[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