Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757870AbbLCPac (ORCPT ); Thu, 3 Dec 2015 10:30:32 -0500 Received: from aserp1040.oracle.com ([141.146.126.69]:30884 "EHLO aserp1040.oracle.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752264AbbLCPab (ORCPT ); Thu, 3 Dec 2015 10:30:31 -0500 From: Sasha Levin To: torvalds@linux-foundation.org Cc: linux-kernel@vger.kernel.org, Sasha Levin Subject: [PATCH] linux/log2.h: Fix roundup_pow_of_two(0) Date: Thu, 3 Dec 2015 10:30:16 -0500 Message-Id: <1449156616-11474-1-git-send-email-sasha.levin@oracle.com> X-Mailer: git-send-email 2.5.0 X-Source-IP: userv0021.oracle.com [156.151.31.71] Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 980 Lines: 33 Passing 0 to roundup_pow_of_two would lead to wrapping around and trying to find the last set bit on (unsigned long)(-1), which is obviously wrong. Instead, deal with this case by rounding it up to the closest power of two (2 ** 0). Signed-off-by: Sasha Levin --- include/linux/log2.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/include/linux/log2.h b/include/linux/log2.h index fd7ff3d..b6bdf0c 100644 --- a/include/linux/log2.h +++ b/include/linux/log2.h @@ -60,6 +60,9 @@ bool is_power_of_2(unsigned long n) static inline __attribute__((const)) unsigned long __roundup_pow_of_two(unsigned long n) { + if (n == 0) + return 1UL << 0; + return 1UL << fls_long(n - 1); } -- 1.7.10.4 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/