[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <20111214131318.410a6a9d@s6510.linuxnetplumber.net>
Date: Wed, 14 Dec 2011 13:13:18 -0800
From: Stephen Hemminger <shemminger@...tta.com>
To: sandr8@...il.com
Cc: Dmitry Torokhov <dtor@...are.com>,
chetan loke <loke.chetan@...il.com>, pv-drivers@...are.com,
zbiggy@...pl, netdev <netdev@...r.kernel.org>
Subject: Re: [Pv-drivers] vmxnet3 driver broken since 3.0?
Lastest 3.2 has this fix which should eliminate the problem.
commit 13c07b0286d340275f2d97adf085cecda37ede37
Author: Linus Torvalds <torvalds@...ux-foundation.org>
Date: Mon Dec 12 22:06:55 2011 -0800
linux/log2.h: Fix rounddown_pow_of_two(1)
Exactly like roundup_pow_of_two(1), the rounddown version was buggy for
the case of a compile-time constant '1' argument. Probably because it
originated from the same code, sharing history with the roundup version
from before the bugfix (for that one, see commit 1a06a52ee1b0: "Fix
roundup_pow_of_two(1)").
However, unlike the roundup version, the fix for rounddown is to just
remove the broken special case entirely. It's simply not needed - the
generic code
1UL << ilog2(n)
does the right thing for the constant '1' argment too. The only reason
roundup needed that special case was because rounding up does so by
subtracting one from the argument (and then adding one to the result)
causing the obvious problems with "ilog2(0)".
But rounddown doesn't do any of that, since ilog2() naturally truncates
(ie "rounds down") to the right rounded down value. And without the
ilog2(0) case, there's no reason for the special case that had the wrong
value.
tl;dr: rounddown_pow_of_two(1) should be 1, not 0.
Acked-by: Dmitry Torokhov <dtor@...are.com>
Cc: stable@...nel.org
Signed-off-by: Linus Torvalds <torvalds@...ux-foundation.org>
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists