2004-10-20 02:46:51

by Chris Wedgwood

[permalink] [raw]
Subject: [PATCH] Avoid a build warning on 32-bit platforms

Avoid a build warning on 32-bit platforms.

Signed-off-by: [email protected]



Is this too ugly for words? :)


diff -Nru a/drivers/char/random.c b/drivers/char/random.c
--- a/drivers/char/random.c 2004-10-19 17:48:36 -07:00
+++ b/drivers/char/random.c 2004-10-19 17:48:36 -07:00
@@ -818,11 +818,12 @@
* jiffies.
*/
time = get_cycles();
- if (time != 0) {
- if (sizeof(time) > 4)
- num ^= (u32)(time >> 32);
- } else {
+ if (!time)
time = jiffies;
+ else {
+#if (BITS_PER_LONG > 32)
+ num ^= (u32)(time >> 32);
+#endif /* (BITS_PER_LONG > 32) */
}

/*


2004-10-20 10:06:55

by Mikael Pettersson

[permalink] [raw]
Subject: Re: [PATCH] Avoid a build warning on 32-bit platforms

On Tue, 19 Oct 2004 19:37:16 -0700, [email protected] (Chris Wedgwood) wrote:
>@@ -818,11 +818,12 @@
> * jiffies.
> */
> time = get_cycles();
>- if (time != 0) {
>- if (sizeof(time) > 4)
>- num ^= (u32)(time >> 32);
>- } else {
>+ if (!time)
> time = jiffies;
>+ else {
>+#if (BITS_PER_LONG > 32)
>+ num ^= (u32)(time >> 32);
>+#endif /* (BITS_PER_LONG > 32) */

There's a coding idiom for doing this: just break up
the ">> 32" in two steps, like: ((time >> 31) >> 1).
Definitely preferable over #ifdef:s.

/Mikael

2004-10-20 10:30:46

by Chris Wedgwood

[permalink] [raw]
Subject: [PATCH (updated)] Avoid annoying build warning on 32-bit platforms

On Wed, Oct 20, 2004 at 11:56:45AM +0200, Mikael Pettersson wrote:

> There's a coding idiom for doing this: just break up
> the ">> 32" in two steps, like: ((time >> 31) >> 1).

i assumed gcc would complain there too but it doesn't and it does
optimize this away (i checked)

> Definitely preferable over #ifdef:s.

indeed



Avoid annoying gcc warning on 32-bit platforms.

Signed-off-by: [email protected]

===== drivers/char/random.c 1.57 vs edited =====
--- 1.57/drivers/char/random.c 2004-10-05 14:21:53 -07:00
+++ edited/drivers/char/random.c 2004-10-20 03:19:17 -07:00
@@ -818,12 +818,10 @@ static void add_timer_randomness(struct
* jiffies.
*/
time = get_cycles();
- if (time != 0) {
- if (sizeof(time) > 4)
- num ^= (u32)(time >> 32);
- } else {
+ if (time)
+ num ^= (u32)((time >> 32) >> 1);
+ else
time = jiffies;
- }

/*
* Calculate number of bits of randomness we probably added.

2004-10-20 10:53:25

by Jakub Jelinek

[permalink] [raw]
Subject: Re: [PATCH (updated)] Avoid annoying build warning on 32-bit platforms

On Wed, Oct 20, 2004 at 03:23:43AM -0700, Chris Wedgwood wrote:
> Avoid annoying gcc warning on 32-bit platforms.
>
> Signed-off-by: [email protected]
>
> ===== drivers/char/random.c 1.57 vs edited =====
> --- 1.57/drivers/char/random.c 2004-10-05 14:21:53 -07:00
> +++ edited/drivers/char/random.c 2004-10-20 03:19:17 -07:00
> @@ -818,12 +818,10 @@ static void add_timer_randomness(struct
> * jiffies.
> */
> time = get_cycles();
> - if (time != 0) {
> - if (sizeof(time) > 4)
> - num ^= (u32)(time >> 32);
> - } else {
> + if (time)
> + num ^= (u32)((time >> 32) >> 1);
^^
32 + 1 != 32.

> + else
> time = jiffies;
> - }

Jakub

2004-10-20 11:41:40

by Martin Zwickel

[permalink] [raw]
Subject: Re: [PATCH (updated)] Avoid annoying build warning on 32-bit platforms

On Wed, 20 Oct 2004 03:23:43 -0700
Chris Wedgwood <[email protected]> bubbled:

> On Wed, Oct 20, 2004 at 11:56:45AM +0200, Mikael Pettersson wrote:
>
> > There's a coding idiom for doing this: just break up
> > the ">> 32" in two steps, like: ((time >> 31) >> 1).
>
> i assumed gcc would complain there too but it doesn't and it does
> optimize this away (i checked)
>
> > Definitely preferable over #ifdef:s.
>
> indeed
>
>
>
> Avoid annoying gcc warning on 32-bit platforms.
>
> Signed-off-by: [email protected]
>
> ===== drivers/char/random.c 1.57 vs edited =====
> --- 1.57/drivers/char/random.c 2004-10-05 14:21:53 -07:00
> +++ edited/drivers/char/random.c 2004-10-20 03:19:17 -07:00
> @@ -818,12 +818,10 @@ static void add_timer_randomness(struct
> * jiffies.
> */
> time = get_cycles();
> - if (time != 0) {
> - if (sizeof(time) > 4)
> - num ^= (u32)(time >> 32);
> - } else {
> + if (time)
> + num ^= (u32)((time >> 32) >> 1);
^^ errr ... should be 31 ?!?!
> + else
> time = jiffies;
> - }
>
> /*
> * Calculate number of bits of randomness we probably added.
> -
> To unsubscribe from this list: send the line "unsubscribe
> linux-kernel" in the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/


--
MyExcuse:
We've run out of licenses

Martin Zwickel <[email protected]>
Research & Development

TechnoTrend AG <http://www.technotrend.de>


Attachments:
(No filename) (1.50 kB)
(No filename) (189.00 B)
Download all attachments

2004-10-20 19:25:22

by Chris Wedgwood

[permalink] [raw]
Subject: Re: [PATCH (updated)] Avoid annoying build warning on 32-bit platforms

On Wed, Oct 20, 2004 at 12:53:53PM +0200, Martin Zwickel wrote:

> > + if (time)
> > + num ^= (u32)((time >> 32) >> 1);
> ^^ errr ... should be 31 ?!?!

yeah, i'm retarded, sorry about that :)