All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] include/log2.h: Fix rounddown_pow_of_two(1)
@ 2011-11-16 19:56 Andrei Warkentin
  2011-11-16 22:51 ` Rolf Eike Beer
  2011-11-17 23:05 ` Andrew Morton
  0 siblings, 2 replies; 12+ messages in thread
From: Andrei Warkentin @ 2011-11-16 19:56 UTC (permalink / raw)
  To: linux-kernel; +Cc: Andrei Warkentin, Rolf Eike Beer, opensuse-kernel

1 is a power of two, therefore rounddown_pow_of_two(1) should return 1. It does
in case the argument is a variable but in case it's a constant it behaves
wrong and returns 0. Probably nobody ever did it so this was never noticed,
however net/drivers/vmxnet3 with latest GCC does and breaks on unicpu systems.

This is similar to Rolf's patch to roundup_pow_of_two(1).

Cc: Rolf Eike Beer <eike-kernel@sf-tec.de>
Cc: opensuse-kernel@opensuse.org
Reviewed-by: Jesper Juhl <jj@chaosbits.net>
Signed-off-by: Andrei Warkentin <andreiw@vmware.com>
---
 include/linux/log2.h |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/include/linux/log2.h b/include/linux/log2.h
index 25b8086..ccda848 100644
--- a/include/linux/log2.h
+++ b/include/linux/log2.h
@@ -185,7 +185,7 @@ unsigned long __rounddown_pow_of_two(unsigned long n)
 #define rounddown_pow_of_two(n)			\
 (						\
 	__builtin_constant_p(n) ? (		\
-		(n == 1) ? 0 :			\
+		(n == 1) ? 1 :			\
 		(1UL << ilog2(n))) :		\
 	__rounddown_pow_of_two(n)		\
  )
-- 
1.7.4.1


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* Re: [PATCH] include/log2.h: Fix rounddown_pow_of_two(1)
  2011-11-16 19:56 [PATCH] include/log2.h: Fix rounddown_pow_of_two(1) Andrei Warkentin
@ 2011-11-16 22:51 ` Rolf Eike Beer
  2011-11-17 23:05 ` Andrew Morton
  1 sibling, 0 replies; 12+ messages in thread
From: Rolf Eike Beer @ 2011-11-16 22:51 UTC (permalink / raw)
  To: Andrei Warkentin; +Cc: linux-kernel, opensuse-kernel

[-- Attachment #1: Type: text/plain, Size: 416 bytes --]

Andrei Warkentin wrote:
> 1 is a power of two, therefore rounddown_pow_of_two(1) should return 1. It
> does in case the argument is a variable but in case it's a constant it
> behaves wrong and returns 0. Probably nobody ever did it so this was never
> noticed, however net/drivers/vmxnet3 with latest GCC does and breaks on
> unicpu systems.

Obviously correct.

Reviewed-by: Rolf Eike Beer <eike-kernel@sf-tec.de>

[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 198 bytes --]

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH] include/log2.h: Fix rounddown_pow_of_two(1)
  2011-11-16 19:56 [PATCH] include/log2.h: Fix rounddown_pow_of_two(1) Andrei Warkentin
  2011-11-16 22:51 ` Rolf Eike Beer
@ 2011-11-17 23:05 ` Andrew Morton
  2011-11-17 23:19   ` [opensuse-kernel] " Cristian Rodríguez
                     ` (4 more replies)
  1 sibling, 5 replies; 12+ messages in thread
From: Andrew Morton @ 2011-11-17 23:05 UTC (permalink / raw)
  To: Andrei Warkentin
  Cc: linux-kernel, Rolf Eike Beer, opensuse-kernel, Sergiu Iordache,
	Marco Stornelli, Eddie Wai, Jayamohan Kallickal,
	Guennadi Liakhovetski

On Wed, 16 Nov 2011 14:56:06 -0500
Andrei Warkentin <andreiw@vmware.com> wrote:

> 1 is a power of two, therefore rounddown_pow_of_two(1) should return 1. It does
> in case the argument is a variable but in case it's a constant it behaves
> wrong and returns 0. Probably nobody ever did it so this was never noticed,
> however net/drivers/vmxnet3 with latest GCC does and breaks on unicpu systems.
> 
> This is similar to Rolf's patch to roundup_pow_of_two(1).
> 
> Cc: Rolf Eike Beer <eike-kernel@sf-tec.de>
> Cc: opensuse-kernel@opensuse.org
> Reviewed-by: Jesper Juhl <jj@chaosbits.net>
> Signed-off-by: Andrei Warkentin <andreiw@vmware.com>
> ---
>  include/linux/log2.h |    2 +-
>  1 files changed, 1 insertions(+), 1 deletions(-)
> 
> diff --git a/include/linux/log2.h b/include/linux/log2.h
> index 25b8086..ccda848 100644
> --- a/include/linux/log2.h
> +++ b/include/linux/log2.h
> @@ -185,7 +185,7 @@ unsigned long __rounddown_pow_of_two(unsigned long n)
>  #define rounddown_pow_of_two(n)			\
>  (						\
>  	__builtin_constant_p(n) ? (		\
> -		(n == 1) ? 0 :			\
> +		(n == 1) ? 1 :			\
>  		(1UL << ilog2(n))) :		\
>  	__rounddown_pow_of_two(n)		\
>   )

I assume that nobody has gone off and checked whether all current
callers will survive this change.  If they had, they'd have looked in
drivers/char/ramoops.c and seen:

	rounddown_pow_of_two(pdata->mem_size);
	rounddown_pow_of_two(pdata->record_size);

These operations are no-ops.  It should be

	pdata->mem_size = rounddown_pow_of_two(pdata->mem_size);
	pdata->record_size = rounddown_pow_of_two(pdata->record_size);

Marco or Sergio: please fix, test and send it over sometime?


drivers/scsi/bnx2i/bnx2i_hwi.c does

                if (!is_power_of_2(hba->max_sqes))
                        hba->max_sqes = rounddown_pow_of_two(hba->max_sqes);

                if (!is_power_of_2(hba->max_rqes))
                        hba->max_rqes = rounddown_pow_of_two(hba->max_rqes);


Both the "if" statements can and should be removed.  I would blame upon
inadequate documentation of rounddown_pow_of_two().


drivers/scsi/be2iscsi/be_main.c does

	if (curr_alloc_size - rounddown_pow_of_two(curr_alloc_size))
		curr_alloc_size = rounddown_pow_of_two(curr_alloc_size);

which is a strange way of doing

	if (!is_power_of_2(curr_alloc_size))
		curr_alloc_size = rounddown_pow_of_two(curr_alloc_size);

which is equivalent to doing

	curr_alloc_size = rounddown_pow_of_two(curr_alloc_size);

but there's an `else' clause to that `if' which I am presently finding
incomprehensible.


drivers/mmc/host/sh_mmcif.c unnecessarily uses __rounddown_pow_of_two()
then feeds the result into ilog2() in an apparent attempt to
reimplement fls().



That we have this many warts using these interfaces is an indication
that the interfaces aren't very good.  Poorly documented, at least.


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [opensuse-kernel] Re: [PATCH] include/log2.h: Fix rounddown_pow_of_two(1)
  2011-11-17 23:05 ` Andrew Morton
@ 2011-11-17 23:19   ` Cristian Rodríguez
  2011-11-17 23:32     ` Andrew Morton
  2011-11-18 18:46   ` Andrei Warkentin
                     ` (3 subsequent siblings)
  4 siblings, 1 reply; 12+ messages in thread
From: Cristian Rodríguez @ 2011-11-17 23:19 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Andrei Warkentin, linux-kernel, Rolf Eike Beer, opensuse-kernel,
	Sergiu Iordache, Marco Stornelli, Eddie Wai, Jayamohan Kallickal,
	Guennadi Liakhovetski

On 17/11/11 20:05, Andrew Morton wrote:

> I assume that nobody has gone off and checked whether all current
> callers will survive this change.  If they had, they'd have looked in
> drivers/char/ramoops.c and seen:
> 
> 	rounddown_pow_of_two(pdata->mem_size);
> 	rounddown_pow_of_two(pdata->record_size);
> 
> These operations are no-ops.  It should be
> 
> 	pdata->mem_size = rounddown_pow_of_two(pdata->mem_size);
> 	pdata->record_size = rounddown_pow_of_two(pdata->record_size);
> 
> That we have this many warts using these interfaces is an indication
> that the interfaces aren't very good.  Poorly documented, at least.
> 

making that macro an inline function and annotating with
__attribute__((warn_unused_result)) looks like a good start for me.


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [opensuse-kernel] Re: [PATCH] include/log2.h: Fix rounddown_pow_of_two(1)
  2011-11-17 23:19   ` [opensuse-kernel] " Cristian Rodríguez
@ 2011-11-17 23:32     ` Andrew Morton
  0 siblings, 0 replies; 12+ messages in thread
From: Andrew Morton @ 2011-11-17 23:32 UTC (permalink / raw)
  To: Cristian Rodríguez
  Cc: Andrei Warkentin, linux-kernel, Rolf Eike Beer, opensuse-kernel,
	Sergiu Iordache, Marco Stornelli, Eddie Wai, Jayamohan Kallickal,
	Guennadi Liakhovetski

On Thu, 17 Nov 2011 20:19:06 -0300
Cristian Rodr__guez <crrodriguez@opensuse.org> wrote:

> On 17/11/11 20:05, Andrew Morton wrote:
> 
> > I assume that nobody has gone off and checked whether all current
> > callers will survive this change.  If they had, they'd have looked in
> > drivers/char/ramoops.c and seen:
> > 
> > 	rounddown_pow_of_two(pdata->mem_size);
> > 	rounddown_pow_of_two(pdata->record_size);
> > 
> > These operations are no-ops.  It should be
> > 
> > 	pdata->mem_size = rounddown_pow_of_two(pdata->mem_size);
> > 	pdata->record_size = rounddown_pow_of_two(pdata->record_size);
> > 
> > That we have this many warts using these interfaces is an indication
> > that the interfaces aren't very good.  Poorly documented, at least.
> > 
> 
> making that macro an inline function and annotating with
> __attribute__((warn_unused_result)) looks like a good start for me.

The problem is:

 * - this can be used to initialise global variables from constant data

I'm surprised that this is true.  Is gcc smart enough to actually do
this?

<tests it>

--- a/fs/open.c~a
+++ a/fs/open.c
@@ -31,6 +31,10 @@
 #include <linux/ima.h>
 #include <linux/dnotify.h>
 
+#include <linux/log2.h>
+
+int blap = rounddown_pow_of_two(42);
+
 #include "internal.h"
 
 int do_truncate(struct dentry *dentry, loff_t length, unsigned int time_attrs,
_

ooh, it worked.

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH] include/log2.h: Fix rounddown_pow_of_two(1)
  2011-11-17 23:05 ` Andrew Morton
  2011-11-17 23:19   ` [opensuse-kernel] " Cristian Rodríguez
@ 2011-11-18 18:46   ` Andrei Warkentin
  2011-11-19  9:26   ` Marco Stornelli
                     ` (2 subsequent siblings)
  4 siblings, 0 replies; 12+ messages in thread
From: Andrei Warkentin @ 2011-11-18 18:46 UTC (permalink / raw)
  To: Andrew Morton
  Cc: linux-kernel, Rolf Eike Beer, opensuse-kernel, Sergiu Iordache,
	Marco Stornelli, Eddie Wai, Jayamohan Kallickal,
	Guennadi Liakhovetski, Andrei Warkentin

Hi,

----- Original Message -----
> From: "Andrew Morton" <akpm@linux-foundation.org>
> To: "Andrei Warkentin" <andreiw@vmware.com>
> Cc: linux-kernel@vger.kernel.org, "Rolf Eike Beer" <eike-kernel@sf-tec.de>, opensuse-kernel@opensuse.org, "Sergiu
> Iordache" <sergiu@chromium.org>, "Marco Stornelli" <marco.stornelli@gmail.com>, "Eddie Wai"
> <eddie.wai@broadcom.com>, "Jayamohan Kallickal" <jayamohan.kallickal@emulex.com>, "Guennadi Liakhovetski"
> <g.liakhovetski@gmx.de>
> Sent: Thursday, November 17, 2011 6:05:49 PM
> Subject: Re: [PATCH] include/log2.h: Fix rounddown_pow_of_two(1)
> 
> 
> I assume that nobody has gone off and checked whether all current
> callers will survive this change.  If they had, they'd have looked in
> drivers/char/ramoops.c and seen:
> 
> 	rounddown_pow_of_two(pdata->mem_size);
> 	rounddown_pow_of_two(pdata->record_size);
> 
> These operations are no-ops.  It should be
> 
> 	pdata->mem_size = rounddown_pow_of_two(pdata->mem_size);
> 	pdata->record_size = rounddown_pow_of_two(pdata->record_size);
> 
> Marco or Sergio: please fix, test and send it over sometime?

I did quickly look through for code that expected rounddown_pow_of_two(1) to give 0,
but I didn't apparently look close enough for other issues.

A

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH] include/log2.h: Fix rounddown_pow_of_two(1)
  2011-11-17 23:05 ` Andrew Morton
  2011-11-17 23:19   ` [opensuse-kernel] " Cristian Rodríguez
  2011-11-18 18:46   ` Andrei Warkentin
@ 2011-11-19  9:26   ` Marco Stornelli
  2011-11-22 23:34   ` Guennadi Liakhovetski
  2011-11-23 14:52     ` Guennadi Liakhovetski
  4 siblings, 0 replies; 12+ messages in thread
From: Marco Stornelli @ 2011-11-19  9:26 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Andrei Warkentin, linux-kernel, Rolf Eike Beer, opensuse-kernel,
	Sergiu Iordache, Eddie Wai, Jayamohan Kallickal,
	Guennadi Liakhovetski

Il 18/11/2011 00:05, Andrew Morton ha scritto:
> On Wed, 16 Nov 2011 14:56:06 -0500
> Andrei Warkentin<andreiw@vmware.com>  wrote:
>
>> 1 is a power of two, therefore rounddown_pow_of_two(1) should return 1. It does
>> in case the argument is a variable but in case it's a constant it behaves
>> wrong and returns 0. Probably nobody ever did it so this was never noticed,
>> however net/drivers/vmxnet3 with latest GCC does and breaks on unicpu systems.
>>
>> This is similar to Rolf's patch to roundup_pow_of_two(1).
>>
>> Cc: Rolf Eike Beer<eike-kernel@sf-tec.de>
>> Cc: opensuse-kernel@opensuse.org
>> Reviewed-by: Jesper Juhl<jj@chaosbits.net>
>> Signed-off-by: Andrei Warkentin<andreiw@vmware.com>
>> ---
>>   include/linux/log2.h |    2 +-
>>   1 files changed, 1 insertions(+), 1 deletions(-)
>>
>> diff --git a/include/linux/log2.h b/include/linux/log2.h
>> index 25b8086..ccda848 100644
>> --- a/include/linux/log2.h
>> +++ b/include/linux/log2.h
>> @@ -185,7 +185,7 @@ unsigned long __rounddown_pow_of_two(unsigned long n)
>>   #define rounddown_pow_of_two(n)			\
>>   (						\
>>   	__builtin_constant_p(n) ? (		\
>> -		(n == 1) ? 0 :			\
>> +		(n == 1) ? 1 :			\
>>   		(1UL<<  ilog2(n))) :		\
>>   	__rounddown_pow_of_two(n)		\
>>    )
>
> I assume that nobody has gone off and checked whether all current
> callers will survive this change.  If they had, they'd have looked in
> drivers/char/ramoops.c and seen:
>
> 	rounddown_pow_of_two(pdata->mem_size);
> 	rounddown_pow_of_two(pdata->record_size);
>
> These operations are no-ops.  It should be
>
> 	pdata->mem_size = rounddown_pow_of_two(pdata->mem_size);
> 	pdata->record_size = rounddown_pow_of_two(pdata->record_size);
>
> Marco or Sergio: please fix, test and send it over sometime?

Ok, I'll look at it.

Marco

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH] include/log2.h: Fix rounddown_pow_of_two(1)
  2011-11-17 23:05 ` Andrew Morton
                     ` (2 preceding siblings ...)
  2011-11-19  9:26   ` Marco Stornelli
@ 2011-11-22 23:34   ` Guennadi Liakhovetski
  2011-11-23 14:52     ` Guennadi Liakhovetski
  4 siblings, 0 replies; 12+ messages in thread
From: Guennadi Liakhovetski @ 2011-11-22 23:34 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Andrei Warkentin, linux-kernel, Rolf Eike Beer, opensuse-kernel,
	Sergiu Iordache, Marco Stornelli, Eddie Wai, Jayamohan Kallickal

On Thu, 17 Nov 2011, Andrew Morton wrote:

[snip]

> drivers/mmc/host/sh_mmcif.c unnecessarily uses __rounddown_pow_of_two()
> then feeds the result into ilog2() in an apparent attempt to
> reimplement fls().

Yeah, I was wondering too, but wasn't sufficiently motivated to patch 
it;-) I'll test this "obvious" patch tomorrow and submit then:

diff --git a/drivers/mmc/host/sh_mmcif.c b/drivers/mmc/host/sh_mmcif.c
index c021482..824fee5 100644
--- a/drivers/mmc/host/sh_mmcif.c
+++ b/drivers/mmc/host/sh_mmcif.c
@@ -16,6 +16,7 @@
  *
  */
 
+#include <linux/bitops.h>
 #include <linux/clk.h>
 #include <linux/completion.h>
 #include <linux/delay.h>
@@ -386,7 +387,7 @@ static void sh_mmcif_clock_control(struct sh_mmcif_host *host, unsigned int clk)
 		sh_mmcif_bitset(host, MMCIF_CE_CLK_CTRL, CLK_SUP_PCLK);
 	else
 		sh_mmcif_bitset(host, MMCIF_CE_CLK_CTRL, CLK_CLEAR &
-			(ilog2(__rounddown_pow_of_two(host->clk / clk)) << 16));
+				((fls(host->clk / clk) - 1) << 16));
 
 	sh_mmcif_bitset(host, MMCIF_CE_CLK_CTRL, CLK_ENABLE);
 }

Thanks
Guennadi
---
Guennadi Liakhovetski, Ph.D.
Freelance Open-Source Software Developer
http://www.open-technology.de/

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH] mmc: sh_mmcif: simplify clock divisor calculation
  2011-11-17 23:05 ` Andrew Morton
@ 2011-11-23 14:52     ` Guennadi Liakhovetski
  2011-11-18 18:46   ` Andrei Warkentin
                       ` (3 subsequent siblings)
  4 siblings, 0 replies; 12+ messages in thread
From: Guennadi Liakhovetski @ 2011-11-23 14:52 UTC (permalink / raw)
  To: Andrew Morton; +Cc: Andrei Warkentin, linux-mmc, linux-sh, Chris Ball

Replace ilog2(__rounddown_pow_of_two(x)) with the equivalent but much
simpler fls(x) - 1.

Reported-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
---
 drivers/mmc/host/sh_mmcif.c |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/drivers/mmc/host/sh_mmcif.c b/drivers/mmc/host/sh_mmcif.c
index c021482..824fee5 100644
--- a/drivers/mmc/host/sh_mmcif.c
+++ b/drivers/mmc/host/sh_mmcif.c
@@ -16,6 +16,7 @@
  *
  */
 
+#include <linux/bitops.h>
 #include <linux/clk.h>
 #include <linux/completion.h>
 #include <linux/delay.h>
@@ -386,7 +387,7 @@ static void sh_mmcif_clock_control(struct sh_mmcif_host *host, unsigned int clk)
 		sh_mmcif_bitset(host, MMCIF_CE_CLK_CTRL, CLK_SUP_PCLK);
 	else
 		sh_mmcif_bitset(host, MMCIF_CE_CLK_CTRL, CLK_CLEAR &
-			(ilog2(__rounddown_pow_of_two(host->clk / clk)) << 16));
+				((fls(host->clk / clk) - 1) << 16));
 
 	sh_mmcif_bitset(host, MMCIF_CE_CLK_CTRL, CLK_ENABLE);
 }
-- 
1.7.2.5


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH] mmc: sh_mmcif: simplify clock divisor calculation
@ 2011-11-23 14:52     ` Guennadi Liakhovetski
  0 siblings, 0 replies; 12+ messages in thread
From: Guennadi Liakhovetski @ 2011-11-23 14:52 UTC (permalink / raw)
  To: Andrew Morton; +Cc: Andrei Warkentin, linux-mmc, linux-sh, Chris Ball

Replace ilog2(__rounddown_pow_of_two(x)) with the equivalent but much
simpler fls(x) - 1.

Reported-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
---
 drivers/mmc/host/sh_mmcif.c |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/drivers/mmc/host/sh_mmcif.c b/drivers/mmc/host/sh_mmcif.c
index c021482..824fee5 100644
--- a/drivers/mmc/host/sh_mmcif.c
+++ b/drivers/mmc/host/sh_mmcif.c
@@ -16,6 +16,7 @@
  *
  */
 
+#include <linux/bitops.h>
 #include <linux/clk.h>
 #include <linux/completion.h>
 #include <linux/delay.h>
@@ -386,7 +387,7 @@ static void sh_mmcif_clock_control(struct sh_mmcif_host *host, unsigned int clk)
 		sh_mmcif_bitset(host, MMCIF_CE_CLK_CTRL, CLK_SUP_PCLK);
 	else
 		sh_mmcif_bitset(host, MMCIF_CE_CLK_CTRL, CLK_CLEAR &
-			(ilog2(__rounddown_pow_of_two(host->clk / clk)) << 16));
+				((fls(host->clk / clk) - 1) << 16));
 
 	sh_mmcif_bitset(host, MMCIF_CE_CLK_CTRL, CLK_ENABLE);
 }
-- 
1.7.2.5


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* Re: [PATCH] mmc: sh_mmcif: simplify clock divisor calculation
  2011-11-23 14:52     ` Guennadi Liakhovetski
@ 2011-12-01 18:24       ` Chris Ball
  -1 siblings, 0 replies; 12+ messages in thread
From: Chris Ball @ 2011-12-01 18:24 UTC (permalink / raw)
  To: Guennadi Liakhovetski
  Cc: Andrew Morton, Andrei Warkentin, linux-mmc, linux-sh

Hi,

On Wed, Nov 23 2011, Guennadi Liakhovetski wrote:
> Replace ilog2(__rounddown_pow_of_two(x)) with the equivalent but much
> simpler fls(x) - 1.
>
> Reported-by: Andrew Morton <akpm@linux-foundation.org>
> Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
> ---
>  drivers/mmc/host/sh_mmcif.c |    3 ++-
>  1 files changed, 2 insertions(+), 1 deletions(-)
>
> diff --git a/drivers/mmc/host/sh_mmcif.c b/drivers/mmc/host/sh_mmcif.c
> index c021482..824fee5 100644
> --- a/drivers/mmc/host/sh_mmcif.c
> +++ b/drivers/mmc/host/sh_mmcif.c
> @@ -16,6 +16,7 @@
>   *
>   */
>  
> +#include <linux/bitops.h>
>  #include <linux/clk.h>
>  #include <linux/completion.h>
>  #include <linux/delay.h>
> @@ -386,7 +387,7 @@ static void sh_mmcif_clock_control(struct sh_mmcif_host *host, unsigned int clk)
>  		sh_mmcif_bitset(host, MMCIF_CE_CLK_CTRL, CLK_SUP_PCLK);
>  	else
>  		sh_mmcif_bitset(host, MMCIF_CE_CLK_CTRL, CLK_CLEAR &
> -			(ilog2(__rounddown_pow_of_two(host->clk / clk)) << 16));
> +				((fls(host->clk / clk) - 1) << 16));
>  
>  	sh_mmcif_bitset(host, MMCIF_CE_CLK_CTRL, CLK_ENABLE);
>  }

Thanks, pushed to mmc-next for 3.3.

- Chris.
-- 
Chris Ball   <cjb@laptop.org>   <http://printf.net/>
One Laptop Per Child

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH] mmc: sh_mmcif: simplify clock divisor calculation
@ 2011-12-01 18:24       ` Chris Ball
  0 siblings, 0 replies; 12+ messages in thread
From: Chris Ball @ 2011-12-01 18:24 UTC (permalink / raw)
  To: Guennadi Liakhovetski
  Cc: Andrew Morton, Andrei Warkentin, linux-mmc, linux-sh

Hi,

On Wed, Nov 23 2011, Guennadi Liakhovetski wrote:
> Replace ilog2(__rounddown_pow_of_two(x)) with the equivalent but much
> simpler fls(x) - 1.
>
> Reported-by: Andrew Morton <akpm@linux-foundation.org>
> Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
> ---
>  drivers/mmc/host/sh_mmcif.c |    3 ++-
>  1 files changed, 2 insertions(+), 1 deletions(-)
>
> diff --git a/drivers/mmc/host/sh_mmcif.c b/drivers/mmc/host/sh_mmcif.c
> index c021482..824fee5 100644
> --- a/drivers/mmc/host/sh_mmcif.c
> +++ b/drivers/mmc/host/sh_mmcif.c
> @@ -16,6 +16,7 @@
>   *
>   */
>  
> +#include <linux/bitops.h>
>  #include <linux/clk.h>
>  #include <linux/completion.h>
>  #include <linux/delay.h>
> @@ -386,7 +387,7 @@ static void sh_mmcif_clock_control(struct sh_mmcif_host *host, unsigned int clk)
>  		sh_mmcif_bitset(host, MMCIF_CE_CLK_CTRL, CLK_SUP_PCLK);
>  	else
>  		sh_mmcif_bitset(host, MMCIF_CE_CLK_CTRL, CLK_CLEAR &
> -			(ilog2(__rounddown_pow_of_two(host->clk / clk)) << 16));
> +				((fls(host->clk / clk) - 1) << 16));
>  
>  	sh_mmcif_bitset(host, MMCIF_CE_CLK_CTRL, CLK_ENABLE);
>  }

Thanks, pushed to mmc-next for 3.3.

- Chris.
-- 
Chris Ball   <cjb@laptop.org>   <http://printf.net/>
One Laptop Per Child

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2011-12-01 18:24 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-11-16 19:56 [PATCH] include/log2.h: Fix rounddown_pow_of_two(1) Andrei Warkentin
2011-11-16 22:51 ` Rolf Eike Beer
2011-11-17 23:05 ` Andrew Morton
2011-11-17 23:19   ` [opensuse-kernel] " Cristian Rodríguez
2011-11-17 23:32     ` Andrew Morton
2011-11-18 18:46   ` Andrei Warkentin
2011-11-19  9:26   ` Marco Stornelli
2011-11-22 23:34   ` Guennadi Liakhovetski
2011-11-23 14:52   ` [PATCH] mmc: sh_mmcif: simplify clock divisor calculation Guennadi Liakhovetski
2011-11-23 14:52     ` Guennadi Liakhovetski
2011-12-01 18:24     ` Chris Ball
2011-12-01 18:24       ` Chris Ball

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.