Patchwork watchdog: sunxi: Fix compilation with C=2

login
register
mail settings
Submitter Emilio López
Date April 4, 2014, 5:24 p.m.
Message ID <1396632265-16124-1-git-send-email-emilio@elopez.com.ar>
Download mbox | patch
Permalink /patch/337072/
State New
Headers show

Comments

Emilio López - April 4, 2014, 5:24 p.m.
When compiling sunxi_defconfig while using C=2, the following error
causes the compilation to fail:

    drivers/watchdog/sunxi_wdt.c:60:15: error: constant 0b0001 is not a valid number

Fix it by using hex notation instead of the non-standard binary one

Signed-off-by: Emilio López <emilio@elopez.com.ar>
---
 drivers/watchdog/sunxi_wdt.c | 22 +++++++++++-----------
 1 file changed, 11 insertions(+), 11 deletions(-)
Guenter Roeck - April 4, 2014, 5:35 p.m.
On 04/04/2014 10:24 AM, Emilio López wrote:
> When compiling sunxi_defconfig while using C=2, the following error
> causes the compilation to fail:
>
>      drivers/watchdog/sunxi_wdt.c:60:15: error: constant 0b0001 is not a valid number
>
> Fix it by using hex notation instead of the non-standard binary one
>

What defines "non-standard" here ? Isn't this a sparse problem that should possibly
be fixed in sparse instead ?

[ I don't mind changing it as the 0bXXXX notation doesn't seem to be used much
   in the kernel, but we should not claim something to be non-standard if it is
   just not widely used. As normal compilation doesn't seem to have a problem,
   we should be sure that it is non-standard if we claim it to be non-standard. ]

Thanks,
Guenter

> Signed-off-by: Emilio López <emilio@elopez.com.ar>
> ---
>   drivers/watchdog/sunxi_wdt.c | 22 +++++++++++-----------
>   1 file changed, 11 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/watchdog/sunxi_wdt.c b/drivers/watchdog/sunxi_wdt.c
> index cd00a78..693b9d2 100644
> --- a/drivers/watchdog/sunxi_wdt.c
> +++ b/drivers/watchdog/sunxi_wdt.c
> @@ -57,17 +57,17 @@ struct sunxi_wdt_dev {
>    */
>
>   static const int wdt_timeout_map[] = {
> -	[1] = 0b0001,  /* 1s  */
> -	[2] = 0b0010,  /* 2s  */
> -	[3] = 0b0011,  /* 3s  */
> -	[4] = 0b0100,  /* 4s  */
> -	[5] = 0b0101,  /* 5s  */
> -	[6] = 0b0110,  /* 6s  */
> -	[8] = 0b0111,  /* 8s  */
> -	[10] = 0b1000, /* 10s */
> -	[12] = 0b1001, /* 12s */
> -	[14] = 0b1010, /* 14s */
> -	[16] = 0b1011, /* 16s */
> +	[1] = 0x1,  /* 1s  */
> +	[2] = 0x2,  /* 2s  */
> +	[3] = 0x3,  /* 3s  */
> +	[4] = 0x4,  /* 4s  */
> +	[5] = 0x5,  /* 5s  */
> +	[6] = 0x6,  /* 6s  */
> +	[8] = 0x7,  /* 8s  */
> +	[10] = 0x8, /* 10s */
> +	[12] = 0x9, /* 12s */
> +	[14] = 0xA, /* 14s */
> +	[16] = 0xB, /* 16s */
>   };
>
>   static int sunxi_wdt_ping(struct watchdog_device *wdt_dev)
>
Emilio López - April 4, 2014, 5:57 p.m.
Hi,

El 04/04/14 14:35, Guenter Roeck escribió:
> On 04/04/2014 10:24 AM, Emilio López wrote:
>> When compiling sunxi_defconfig while using C=2, the following error
>> causes the compilation to fail:
>>
>>      drivers/watchdog/sunxi_wdt.c:60:15: error: constant 0b0001 is not
>> a valid number
>>
>> Fix it by using hex notation instead of the non-standard binary one
>>
>
> What defines "non-standard" here ?

non-standard as not part of the C standard. Binary constant notation is 
a GCC extension as far as I'm aware:

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23479
http://gcc.gnu.org/onlinedocs/gcc/Binary-constants.html (Note the "C 
Extensions" section)

> Isn't this a sparse problem that
> should possibly
> be fixed in sparse instead ?

It could be fixed in sparse as well, I don't really mind either way. The 
binary notation doesn't seem to be used much, if at all, on the kernel 
though; most of the matches I saw when quickly grepping were comments.

Cheers,

Emilio
Guenter Roeck - April 4, 2014, 6:01 p.m.
On 04/04/2014 10:57 AM, Emilio López wrote:
> Hi,
>
> El 04/04/14 14:35, Guenter Roeck escribió:
>> On 04/04/2014 10:24 AM, Emilio López wrote:
>>> When compiling sunxi_defconfig while using C=2, the following error
>>> causes the compilation to fail:
>>>
>>>      drivers/watchdog/sunxi_wdt.c:60:15: error: constant 0b0001 is not
>>> a valid number
>>>
>>> Fix it by using hex notation instead of the non-standard binary one
>>>
>>
>> What defines "non-standard" here ?
>
> non-standard as not part of the C standard. Binary constant notation is a GCC extension as far as I'm aware:
>
> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23479
> http://gcc.gnu.org/onlinedocs/gcc/Binary-constants.html (Note the "C Extensions" section)
>
Ok.

>> Isn't this a sparse problem that
>> should possibly
>> be fixed in sparse instead ?
>
> It could be fixed in sparse as well, I don't really mind either way. The binary notation doesn't seem to be used much, if at all, on the kernel though; most of the matches I saw when quickly grepping were comments.
>
Nah, if it is non-standard I don't think that would be a good idea.

Guenter
Guenter Roeck - April 4, 2014, 6:02 p.m.
On 04/04/2014 10:24 AM, Emilio López wrote:
> When compiling sunxi_defconfig while using C=2, the following error
> causes the compilation to fail:
>
>      drivers/watchdog/sunxi_wdt.c:60:15: error: constant 0b0001 is not a valid number
>
> Fix it by using hex notation instead of the non-standard binary one
>
> Signed-off-by: Emilio López <emilio@elopez.com.ar>

Reviewed-by: Guenter Roeck <linux@roeck-us.net>
Emilio López - May 11, 2014, 7:46 p.m.
El 04/04/14 15:02, Guenter Roeck escribió:
> On 04/04/2014 10:24 AM, Emilio López wrote:
>> When compiling sunxi_defconfig while using C=2, the following error
>> causes the compilation to fail:
>>
>>      drivers/watchdog/sunxi_wdt.c:60:15: error: constant 0b0001 is not
>> a valid number
>>
>> Fix it by using hex notation instead of the non-standard binary one
>>
>> Signed-off-by: Emilio López <emilio@elopez.com.ar>
>
> Reviewed-by: Guenter Roeck <linux@roeck-us.net>
>

Wim, Maxime, any comments on this?

Cheers,

Emilio
Maxime Ripard - May 15, 2014, 8:52 a.m.
On Sun, May 11, 2014 at 04:46:59PM -0300, Emilio López wrote:
> El 04/04/14 15:02, Guenter Roeck escribió:
> >On 04/04/2014 10:24 AM, Emilio López wrote:
> >>When compiling sunxi_defconfig while using C=2, the following error
> >>causes the compilation to fail:
> >>
> >>     drivers/watchdog/sunxi_wdt.c:60:15: error: constant 0b0001 is not
> >>a valid number
> >>
> >>Fix it by using hex notation instead of the non-standard binary one
> >>
> >>Signed-off-by: Emilio López <emilio@elopez.com.ar>
> >
> >Reviewed-by: Guenter Roeck <linux@roeck-us.net>
> >
> 
> Wim, Maxime, any comments on this?

I'm fine with this. Wim? Do you want to take this patch, or can we
have an Acked-by?

Thanks,
Maxime

Patch

diff --git a/drivers/watchdog/sunxi_wdt.c b/drivers/watchdog/sunxi_wdt.c
index cd00a78..693b9d2 100644
--- a/drivers/watchdog/sunxi_wdt.c
+++ b/drivers/watchdog/sunxi_wdt.c
@@ -57,17 +57,17 @@  struct sunxi_wdt_dev {
  */
 
 static const int wdt_timeout_map[] = {
-	[1] = 0b0001,  /* 1s  */
-	[2] = 0b0010,  /* 2s  */
-	[3] = 0b0011,  /* 3s  */
-	[4] = 0b0100,  /* 4s  */
-	[5] = 0b0101,  /* 5s  */
-	[6] = 0b0110,  /* 6s  */
-	[8] = 0b0111,  /* 8s  */
-	[10] = 0b1000, /* 10s */
-	[12] = 0b1001, /* 12s */
-	[14] = 0b1010, /* 14s */
-	[16] = 0b1011, /* 16s */
+	[1] = 0x1,  /* 1s  */
+	[2] = 0x2,  /* 2s  */
+	[3] = 0x3,  /* 3s  */
+	[4] = 0x4,  /* 4s  */
+	[5] = 0x5,  /* 5s  */
+	[6] = 0x6,  /* 6s  */
+	[8] = 0x7,  /* 8s  */
+	[10] = 0x8, /* 10s */
+	[12] = 0x9, /* 12s */
+	[14] = 0xA, /* 14s */
+	[16] = 0xB, /* 16s */
 };
 
 static int sunxi_wdt_ping(struct watchdog_device *wdt_dev)