Re: [KJ] [PATCH] is_power_of_2 in ia64mm

Richard Knutsson
2007-02-16T15:02:59Z

Vignesh Babu BM wrote:
> Replacing (n & (n-1)) in the context of power of 2 checks
> with is_power_of_2
>
>
> diff --git a/arch/ia64/mm/hugetlbpage.c b/arch/ia64/mm/hugetlbpage.c
> index 0c7e94e..0ccc70e 100644
> --- a/arch/ia64/mm/hugetlbpage.c
> +++ b/arch/ia64/mm/hugetlbpage.c
> @@ -16,6 +16,7 @@
> #include <linux/smp_lock.h>
> #include <linux/slab.h>
> #include <linux/sysctl.h>
> +#include <linux/log2.h>
> #include <asm/mman.h>
> #include <asm/pgalloc.h>
> #include <asm/tlb.h>
> @@ -175,7 +176,7 @@ static int __init hugetlb_setup_sz(char *str)
> tr_pages = 0x15557000UL;
>
> size = memparse(str, &str);
> - if (*str || (size & (size-1)) || !(tr_pages & size) ||
> + if (*str || !is_power_of_2(size) || !(tr_pages & size) ||
> size <= PAGE_SIZE ||
> size >= (1UL << PAGE_SHIFT << MAX_ORDER)) {
> printk(KERN_WARNING "Invalid huge page size specified\n");
>
>
As we talked about before; is this really correct? !is_power_of_2(0) ==
true while (0 & (0-1)) == 0.

Richard Knutsson