Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 11 Feb 2025 11:30:38 +0800
From:      Zhenlei Huang <zlei@FreeBSD.org>
To:        Doug Moore <dougm@FreeBSD.org>
Cc:        "src-committers@freebsd.org" <src-committers@FreeBSD.org>, "dev-commits-src-all@freebsd.org" <dev-commits-src-all@FreeBSD.org>, "dev-commits-src-branches@freebsd.org" <dev-commits-src-branches@FreeBSD.org>
Subject:   Re: git: 7bcc7a0b88cc - stable/14 - libkern: avoid local var in order_base_2()
Message-ID:  <858BD10B-A2C9-4D3A-9FF5-C5573597DF8B@FreeBSD.org>
In-Reply-To: <202502101115.51ABFISj016298@gitrepo.freebsd.org>
References:  <202502101115.51ABFISj016298@gitrepo.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help


> On Feb 10, 2025, at 7:15 PM, Doug Moore <dougm@FreeBSD.org> wrote:
>=20
> The branch stable/14 has been updated by dougm:
>=20
> URL: =
https://cgit.FreeBSD.org/src/commit/?id=3D7bcc7a0b88ccb5e1fe31de88ab9a17e4=
6859318b
>=20
> commit 7bcc7a0b88ccb5e1fe31de88ab9a17e46859318b
> Author:     Doug Moore <dougm@FreeBSD.org>
> AuthorDate: 2024-09-27 23:43:07 +0000
> Commit:     Doug Moore <dougm@FreeBSD.org>
> CommitDate: 2025-02-10 10:30:05 +0000
>=20
>    libkern: avoid local var in order_base_2()
>=20
>    order_base_2(n) is implemented with a variable, which keeps it from
>    being used at file scope. Implement it instead as ilog2(2*n-1), =
which
>    produces a different result when 2*n overflows, which appears =
unlikely
>    in practice.
>=20
>    Reviewed by:    bz
>    Differential Revision:  https://reviews.freebsd.org/D46826
>=20
>    (cherry picked from commit =
b7cbf741d55468ba34305a14ac3acc1c286af034)
> ---
> sys/sys/libkern.h | 5 +----
> 1 file changed, 1 insertion(+), 4 deletions(-)
>=20
> diff --git a/sys/sys/libkern.h b/sys/sys/libkern.h
> index a10289d72dc7..835e5ffaf0b7 100644
> --- a/sys/sys/libkern.h
> +++ b/sys/sys/libkern.h
> @@ -229,10 +229,7 @@ ilog2_long_long(long long n)
>=20
> #define	ilog2(n) (__builtin_constant_p(n) ? ilog2_const(n) : =
ilog2_var(n))
> #define	rounddown_pow_of_two(n)	((__typeof(n))1 << ilog2(n))
> -#define	order_base_2(n) ({			\
> -	__typeof(n) _n =3D (n);			\

This local var `_n` is within the scope of the macro `order_base_2`, it =
is surrounded with
{} and is harmless, so it will not pollute the file scoped variables.

Am I reading the commit message wrong ?

Best regards,
Zhenlei

> -	_n =3D=3D 1 ? 0 : 1 + ilog2(_n - 1);	\
> -})
> +#define order_base_2(n) ilog2(2*(n)-1)
> #define	roundup_pow_of_two(n)	((__typeof(n))1 << =
order_base_2(n))
>=20
> #define	bitcount64(x)	__bitcount64((uint64_t)(x))






Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?858BD10B-A2C9-4D3A-9FF5-C5573597DF8B>