[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <6e0b9079-9efd-2884-26d1-3db2d622079d@arm.com>
Date: Wed, 27 Nov 2019 18:06:18 +0000
From: Robin Murphy <robin.murphy@....com>
To: Leon Romanovsky <leon@...nel.org>,
Nicolas Saenz Julienne <nsaenzjulienne@...e.de>
Cc: andrew.murray@....com, maz@...nel.org,
linux-kernel@...r.kernel.org,
Lorenzo Pieralisi <lorenzo.pieralisi@....com>,
Hanjun Guo <guohanjun@...wei.com>,
Sudeep Holla <sudeep.holla@....com>,
Tariq Toukan <tariqt@...lanox.com>,
Rob Herring <robh+dt@...nel.org>,
Frank Rowand <frowand.list@...il.com>,
Shawn Lin <shawn.lin@...k-chips.com>,
Heiko Stuebner <heiko@...ech.de>,
Christoph Hellwig <hch@....de>,
Marek Szyprowski <m.szyprowski@...sung.com>,
james.quinlan@...adcom.com, mbrugger@...e.com,
f.fainelli@...il.com, phil@...pberrypi.org, wahrenst@....net,
jeremy.linton@....com, linux-pci@...r.kernel.org,
linux-rpi-kernel@...ts.infradead.org,
"Rafael J. Wysocki" <rjw@...ysocki.net>,
Len Brown <lenb@...nel.org>,
"David S. Miller" <davem@...emloft.net>,
Bjorn Helgaas <bhelgaas@...gle.com>,
linux-acpi@...r.kernel.org, linux-arm-kernel@...ts.infradead.org,
netdev@...r.kernel.org, linux-rdma@...r.kernel.org,
devicetree@...r.kernel.org, linux-rockchip@...ts.infradead.org,
iommu@...ts.linux-foundation.org
Subject: Re: [PATCH v3 1/7] linux/log2.h: Add roundup/rounddown_pow_two64()
family of functions
On 26/11/2019 12:51 pm, Leon Romanovsky wrote:
> On Tue, Nov 26, 2019 at 10:19:39AM +0100, Nicolas Saenz Julienne wrote:
>> Some users need to make sure their rounding function accepts and returns
>> 64bit long variables regardless of the architecture. Sadly
>> roundup/rounddown_pow_two() takes and returns unsigned longs. Create a
>> new generic 64bit variant of the function and cleanup rougue custom
>> implementations.
>
> Is it possible to create general roundup/rounddown_pow_two() which will
> work correctly for any type of variables, instead of creating special
> variant for every type?
In fact, that is sort of the case already - roundup_pow_of_two() itself
wraps ilog2() such that the constant case *is* type-independent. And
since ilog2() handles non-constant values anyway, might it be reasonable
to just take the strongly-typed __roundup_pow_of_two() helper out of the
loop as below?
Robin
----->8-----
diff --git a/include/linux/log2.h b/include/linux/log2.h
index 83a4a3ca3e8a..e825f8a6e8b5 100644
--- a/include/linux/log2.h
+++ b/include/linux/log2.h
@@ -172,11 +172,8 @@ unsigned long __rounddown_pow_of_two(unsigned long n)
*/
#define roundup_pow_of_two(n) \
( \
- __builtin_constant_p(n) ? ( \
- (n == 1) ? 1 : \
- (1UL << (ilog2((n) - 1) + 1)) \
- ) : \
- __roundup_pow_of_two(n) \
+ (__builtin_constant_p(n) && (n == 1)) ? \
+ 1 : (1UL << (ilog2((n) - 1) + 1)) \
)
/**
Powered by blists - more mailing lists