aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobert P. J. Day <rpjday@mindspring.com>2007-01-30 06:06:00 -0500
committerPaul Mackerras <paulus@samba.org>2007-02-06 22:03:19 -0500
commit63c2f782e8f6aafbc11b14b2cb291b3dc9fc217d (patch)
treecbcd1f138a886529ec62a21c5dd4b2c87581058d
parent7df2457db83bc922fcc8b462526b77f1ffe8c84b (diff)
[POWERPC] Add "is_power_of_2" checking to log2.h.
Add the inline function "is_power_of_2()" to log2.h, where the value zero is *not* considered to be a power of two. Signed-off-by: Robert P. J. Day <rpjday@mindspring.com> Acked-by: Kumar Gala <galak@kernel.crashing.org> Signed-off-by: Paul Mackerras <paulus@samba.org>
-rw-r--r--arch/powerpc/mm/pgtable_32.c5
-rw-r--r--arch/ppc/mm/pgtable.c5
-rw-r--r--arch/ppc/syslib/ppc85xx_rio.c2
-rw-r--r--drivers/net/gianfar_ethtool.c2
-rw-r--r--include/linux/log2.h11
5 files changed, 13 insertions, 12 deletions
diff --git a/arch/powerpc/mm/pgtable_32.c b/arch/powerpc/mm/pgtable_32.c
index 1891dbeeb8e9..bd02272bcb0f 100644
--- a/arch/powerpc/mm/pgtable_32.c
+++ b/arch/powerpc/mm/pgtable_32.c
@@ -294,11 +294,8 @@ void __init mapin_ram(void)
294 } 294 }
295} 295}
296 296
297/* is x a power of 2? */
298#define is_power_of_2(x) ((x) != 0 && (((x) & ((x) - 1)) == 0))
299
300/* is x a power of 4? */ 297/* is x a power of 4? */
301#define is_power_of_4(x) ((x) != 0 && (((x) & (x-1)) == 0) && (ffs(x) & 1)) 298#define is_power_of_4(x) is_power_of_2(x) && (ffs(x) & 1))
302 299
303/* 300/*
304 * Set up a mapping for a block of I/O. 301 * Set up a mapping for a block of I/O.
diff --git a/arch/ppc/mm/pgtable.c b/arch/ppc/mm/pgtable.c
index 354a9408f024..82b06a1ef95d 100644
--- a/arch/ppc/mm/pgtable.c
+++ b/arch/ppc/mm/pgtable.c
@@ -313,11 +313,8 @@ void __init mapin_ram(void)
313 } 313 }
314} 314}
315 315
316/* is x a power of 2? */
317#define is_power_of_2(x) ((x) != 0 && (((x) & ((x) - 1)) == 0))
318
319/* is x a power of 4? */ 316/* is x a power of 4? */
320#define is_power_of_4(x) ((x) != 0 && (((x) & (x-1)) == 0) && (ffs(x) & 1)) 317#define is_power_of_4(x) is_power_of_2(x) && (ffs(x) & 1))
321 318
322/* 319/*
323 * Set up a mapping for a block of I/O. 320 * Set up a mapping for a block of I/O.
diff --git a/arch/ppc/syslib/ppc85xx_rio.c b/arch/ppc/syslib/ppc85xx_rio.c
index 05b0e9415085..2b097800cdd9 100644
--- a/arch/ppc/syslib/ppc85xx_rio.c
+++ b/arch/ppc/syslib/ppc85xx_rio.c
@@ -59,8 +59,6 @@
59#define DBELL_TID(x) (*(u8 *)(x + DOORBELL_TID_OFFSET)) 59#define DBELL_TID(x) (*(u8 *)(x + DOORBELL_TID_OFFSET))
60#define DBELL_INF(x) (*(u16 *)(x + DOORBELL_INFO_OFFSET)) 60#define DBELL_INF(x) (*(u16 *)(x + DOORBELL_INFO_OFFSET))
61 61
62#define is_power_of_2(x) (((x) & ((x) - 1)) == 0)
63
64struct rio_atmu_regs { 62struct rio_atmu_regs {
65 u32 rowtar; 63 u32 rowtar;
66 u32 pad1; 64 u32 pad1;
diff --git a/drivers/net/gianfar_ethtool.c b/drivers/net/gianfar_ethtool.c
index 6d71bea5e900..0d6943d67096 100644
--- a/drivers/net/gianfar_ethtool.c
+++ b/drivers/net/gianfar_ethtool.c
@@ -42,8 +42,6 @@
42 42
43#include "gianfar.h" 43#include "gianfar.h"
44 44
45#define is_power_of_2(x) ((x) != 0 && (((x) & ((x) - 1)) == 0))
46
47extern void gfar_start(struct net_device *dev); 45extern void gfar_start(struct net_device *dev);
48extern int gfar_clean_rx_ring(struct net_device *dev, int rx_work_limit); 46extern int gfar_clean_rx_ring(struct net_device *dev, int rx_work_limit);
49 47
diff --git a/include/linux/log2.h b/include/linux/log2.h
index d02e1a547a7e..99922bedfcc9 100644
--- a/include/linux/log2.h
+++ b/include/linux/log2.h
@@ -44,6 +44,17 @@ int __ilog2_u64(u64 n)
44#endif 44#endif
45 45
46/* 46/*
47 * Determine whether some value is a power of two, where zero is
48 * *not* considered a power of two.
49 */
50
51static inline __attribute__((const))
52bool is_power_of_2(unsigned long n)
53{
54 return (n != 0 && ((n & (n - 1)) == 0));
55}
56
57/*
47 * round up to nearest power of two 58 * round up to nearest power of two
48 */ 59 */
49static inline __attribute__((const)) 60static inline __attribute__((const))