lkml.org 
[lkml]   [2011]   [Nov]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH] include/log2.h: Fix rounddown_pow_of_two(1)
    Date
    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


    \
     
     \ /
      Last update: 2011-11-16 20:59    [W:2.253 / U:0.096 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site