Re: [PATCH] moduleparam: Resolve missing-field-initializer warning

2014-09-04 Thread Rusty Russell
"Rustad, Mark D"  writes:
> On Aug 31, 2014, at 5:52 PM, Rusty Russell  wrote:
>
>> Jeff Kirsher  writes:
>>> From: Mark Rustad 
>>> 
>>> Resolve a missing-field-initializer warning, that is produced
>>> by every reference to module_param_call, by using designated
>>> initialization for the first field. That is enough to silence
>>> the complaint.
>>> 
>>> Signed-off-by: Mark Rustad 
>>> Signed-off-by: Jeff Kirsher 
>>> ---
>>> include/linux/moduleparam.h | 2 +-
>>> 1 file changed, 1 insertion(+), 1 deletion(-)
>> 
>> Strange, I haven't seen this warning.  Compiler version?  And it's good
>> to quote the error message, so people can google it.
>
> The message is only seen when doing a W=2 build. I happened to be using gcc 
> 4.8.3, but I think most versions would produce the warning when it is 
> enabled. It can either be silenced by using even a single designated 
> initializer as I did here, or providing values for all of the fields. Because 
> of the number of references to the macro, this change silences many warnings 
> in W=2 builds.
>
> One instance of the full warning message looks like this:
>
> /home/share/git/nn-mdr/include/linux/moduleparam.h:198:16: warning: missing 
> initializer for field ‘free’ of ‘struct kernel_param_ops’ 
> [-Wmissing-field-initializers]
>   static struct kernel_param_ops __param_ops_##name =  \
> ^
> /home/share/git/nn-mdr/fs/fuse/inode.c:35:1: note: in expansion of macro 
> ‘module_param_call’
>  module_param_call(max_user_bgreq, set_global_limit, param_get_uint,
>  ^
> /home/share/git/nn-mdr/include/linux/moduleparam.h:56:9: note: ‘free’ 
> declared here
>   void (*free)(void *arg);

OK, I pasted this into your commit message, and applied it.  See below.

Thanks!
Rusty.

From: Mark Rustad 
Subject: moduleparam: Resolve missing-field-initializer warning

Resolve a missing-field-initializer warning, that is produced
by every reference to module_param_call, by using designated
initialization for the first field. That is enough to silence
the complaint.

The message is only seen when doing a W=2 build. I happened to be using gcc
4.8.3, but I think most versions would produce the warning when it is
enabled. It can either be silenced by using even a single designated
initializer as I did here, or providing values for all of the fields. Because
of the number of references to the macro, this change silences many warnings
in W=2 builds.

One instance of the full warning message looks like this:

/home/share/git/nn-mdr/include/linux/moduleparam.h:198:16: warning: missing
initializer for field ‘free’ of ‘struct kernel_param_ops’
[-Wmissing-field-initializers]
  static struct kernel_param_ops __param_ops_##name =  \
  ^
/home/share/git/nn-mdr/fs/fuse/inode.c:35:1: note: in expansion of macro
‘module_param_call’
 module_param_call(max_user_bgreq, set_global_limit, param_get_uint,
 ^
/home/share/git/nn-mdr/include/linux/moduleparam.h:56:9: note: ‘free’
declared here
  void (*free)(void *arg);

Signed-off-by: Mark Rustad 
Signed-off-by: Jeff Kirsher 
Signed-off-by: Rusty Russell 
---
 include/linux/moduleparam.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/include/linux/moduleparam.h b/include/linux/moduleparam.h
index 593501996574..b43f4752304e 100644
--- a/include/linux/moduleparam.h
+++ b/include/linux/moduleparam.h
@@ -224,7 +224,7 @@ struct kparam_array
 /* Obsolete - use module_param_cb() */
 #define module_param_call(name, set, get, arg, perm)   \
static struct kernel_param_ops __param_ops_##name = \
-   { 0, (void *)set, (void *)get };\
+   { .flags = 0, (void *)set, (void *)get };   \
__module_param_call(MODULE_PARAM_PREFIX,\
name, &__param_ops_##name, arg, \
(perm) + sizeof(__check_old_set_param(set))*0, -1, 
0)
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH] moduleparam: Resolve missing-field-initializer warning

2014-09-02 Thread Rustad, Mark D
On Aug 31, 2014, at 5:52 PM, Rusty Russell  wrote:

> Jeff Kirsher  writes:
>> From: Mark Rustad 
>> 
>> Resolve a missing-field-initializer warning, that is produced
>> by every reference to module_param_call, by using designated
>> initialization for the first field. That is enough to silence
>> the complaint.
>> 
>> Signed-off-by: Mark Rustad 
>> Signed-off-by: Jeff Kirsher 
>> ---
>> include/linux/moduleparam.h | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
> 
> Strange, I haven't seen this warning.  Compiler version?  And it's good
> to quote the error message, so people can google it.

The message is only seen when doing a W=2 build. I happened to be using gcc 
4.8.3, but I think most versions would produce the warning when it is enabled. 
It can either be silenced by using even a single designated initializer as I 
did here, or providing values for all of the fields. Because of the number of 
references to the macro, this change silences many warnings in W=2 builds.

One instance of the full warning message looks like this:

/home/share/git/nn-mdr/include/linux/moduleparam.h:198:16: warning: missing 
initializer for field ‘free’ of ‘struct kernel_param_ops’ 
[-Wmissing-field-initializers]
  static struct kernel_param_ops __param_ops_##name =  \
^
/home/share/git/nn-mdr/fs/fuse/inode.c:35:1: note: in expansion of macro 
‘module_param_call’
 module_param_call(max_user_bgreq, set_global_limit, param_get_uint,
 ^
/home/share/git/nn-mdr/include/linux/moduleparam.h:56:9: note: ‘free’ declared 
here
  void (*free)(void *arg);


> Cheers,
> Rusty.
> 
>> diff --git a/include/linux/moduleparam.h b/include/linux/moduleparam.h
>> index 494f99e..d99a9e9 100644
>> --- a/include/linux/moduleparam.h
>> +++ b/include/linux/moduleparam.h
>> @@ -196,7 +196,7 @@ struct kparam_array
>> /* Obsolete - use module_param_cb() */
>> #define module_param_call(name, set, get, arg, perm) \
>>  static struct kernel_param_ops __param_ops_##name = \
>> -{ 0, (void *)set, (void *)get };\
>> +{ .flags = 0, (void *)set, (void *)get };   \

This could also be resolved by adding a ", NULL" to the initializer above 
instead of the designated initializer. The designated initializer means that if 
additional "optional" fields were to be added in the future, this would not 
have to be touched to avoid generating the warning. However you prefer it. If 
instead you would prefer to designate all fields, the formal parameter names 
would have to change, since get and set would get substituted for the field 
designators .get and .set.

>>  __module_param_call(MODULE_PARAM_PREFIX,\
>>  name, &__param_ops_##name, arg, \
>>  (perm) + sizeof(__check_old_set_param(set))*0, -1)
>> -- 
>> 1.9.3

-- 
Mark Rustad, Networking Division, Intel Corporation



signature.asc
Description: Message signed with OpenPGP using GPGMail


Re: [PATCH] moduleparam: Resolve missing-field-initializer warning

2014-08-31 Thread Rusty Russell
Jeff Kirsher  writes:
> From: Mark Rustad 
>
> Resolve a missing-field-initializer warning, that is produced
> by every reference to module_param_call, by using designated
> initialization for the first field. That is enough to silence
> the complaint.
>
> Signed-off-by: Mark Rustad 
> Signed-off-by: Jeff Kirsher 
> ---
>  include/linux/moduleparam.h | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)

Strange, I haven't seen this warning.  Compiler version?  And it's good
to quote the error message, so people can google it.

Cheers,
Rusty.

> diff --git a/include/linux/moduleparam.h b/include/linux/moduleparam.h
> index 494f99e..d99a9e9 100644
> --- a/include/linux/moduleparam.h
> +++ b/include/linux/moduleparam.h
> @@ -196,7 +196,7 @@ struct kparam_array
>  /* Obsolete - use module_param_cb() */
>  #define module_param_call(name, set, get, arg, perm) \
>   static struct kernel_param_ops __param_ops_##name = \
> - { 0, (void *)set, (void *)get };\
> + { .flags = 0, (void *)set, (void *)get };   \
>   __module_param_call(MODULE_PARAM_PREFIX,\
>   name, &__param_ops_##name, arg, \
>   (perm) + sizeof(__check_old_set_param(set))*0, -1)
> -- 
> 1.9.3
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH] moduleparam: Resolve missing-field-initializer warning

2014-08-29 Thread Jeff Kirsher
From: Mark Rustad 

Resolve a missing-field-initializer warning, that is produced
by every reference to module_param_call, by using designated
initialization for the first field. That is enough to silence
the complaint.

Signed-off-by: Mark Rustad 
Signed-off-by: Jeff Kirsher 
---
 include/linux/moduleparam.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/include/linux/moduleparam.h b/include/linux/moduleparam.h
index 494f99e..d99a9e9 100644
--- a/include/linux/moduleparam.h
+++ b/include/linux/moduleparam.h
@@ -196,7 +196,7 @@ struct kparam_array
 /* Obsolete - use module_param_cb() */
 #define module_param_call(name, set, get, arg, perm)   \
static struct kernel_param_ops __param_ops_##name = \
-   { 0, (void *)set, (void *)get };\
+   { .flags = 0, (void *)set, (void *)get };   \
__module_param_call(MODULE_PARAM_PREFIX,\
name, &__param_ops_##name, arg, \
(perm) + sizeof(__check_old_set_param(set))*0, -1)
-- 
1.9.3

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/