From: Devarsh Thakkar <devarsht@ti.com>
To: Nikolay Borisov <nik.borisov@suse.com>, <mchehab@kernel.org>,
<hverkuil-cisco@xs4all.nl>, <linux-media@vger.kernel.org>,
<linux-kernel@vger.kernel.org>, <sebastian.fricke@collabora.com>,
<andriy.shevchenko@linux.intel.com>, <jani.nikula@intel.com>,
<jirislaby@kernel.org>, <corbet@lwn.net>, <broonie@kernel.org>,
<rdunlap@infradead.org>, <linux-doc@vger.kernel.org>
Cc: <laurent.pinchart@ideasonboard.com>, <praneeth@ti.com>,
<nm@ti.com>, <vigneshr@ti.com>, <a-bhatia1@ti.com>,
<j-luthra@ti.com>, <b-brnich@ti.com>, <detheridge@ti.com>,
<p-mantena@ti.com>, <vijayp@ti.com>, <andi.shyti@linux.intel.com>,
<nicolas@ndufresne.ca>, <davidgow@google.com>,
<dlatypov@google.com>
Subject: Re: [PATCH 1/6] math.h: Add macros for rounding to closest value
Date: Sat, 20 Jul 2024 15:31:51 +0530 [thread overview]
Message-ID: <87e07706-03dc-42a2-b3fe-eaae24aa3c97@ti.com> (raw)
In-Reply-To: <4bf68f34-8a68-458f-9db2-c05b1b6bb711@suse.com>
Hi Nikolay,
Sorry for the delay.
On 09/07/24 14:19, Nikolay Borisov wrote:
>
>
> On 8.07.24 г. 18:59 ч., Devarsh Thakkar wrote:
>> Add below rounding related macros:
>>
>> round_closest_up(x, y) : Rounds x to closest multiple of y where y is a
>> power of 2, with a preference to round up in case two nearest values are
>> possible.
>>
>> round_closest_down(x, y) : Rounds x to closest multiple of y where y is a
>> power of 2, with a preference to round down in case two nearest values
>> are
>> possible.
>>
>> roundclosest(x, y) : Rounds x to closest multiple of y, this macro should
>> generally be used only when y is not multiple of 2 as otherwise
>> round_closest* macros should be used which are much faster.
>>
>> Examples:
>> * round_closest_up(17, 4) = 16
>> * round_closest_up(15, 4) = 16
>> * round_closest_up(14, 4) = 16
>> * round_closest_down(17, 4) = 16
>> * round_closest_down(15, 4) = 16
>> * round_closest_down(14, 4) = 12
>> * roundclosest(21, 5) = 20
>> * roundclosest(19, 5) = 20
>> * roundclosest(17, 5) = 15
>>
>> Signed-off-by: Devarsh Thakkar <devarsht@ti.com>
>> Acked-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
>> ---
>> NOTE: This patch is inspired from the Mentor Graphics IPU driver [1]
>> which uses similar macro locally and which is updated in further patch
>> in the series to use this generic macro instead along with other drivers
>> having similar requirements.
>>
>> Link:
>> https://elixir.bootlin.com/linux/v6.8.9/source/drivers/gpu/ipu-v3/ipu-image-convert.c#L480 [1]
>> ---
>> include/linux/math.h | 63 ++++++++++++++++++++++++++++++++++++++++++++
>> 1 file changed, 63 insertions(+)
>>
>> diff --git a/include/linux/math.h b/include/linux/math.h
>> index dd4152711de7..79e3dfda77fc 100644
>> --- a/include/linux/math.h
>> +++ b/include/linux/math.h
>> @@ -34,6 +34,52 @@
>> */
>> #define round_down(x, y) ((x) & ~__round_mask(x, y))
>> +/**
>> + * round_closest_up - round closest to be multiple of specified value
>> (which is
>> + * power of 2) with preference to rounding up
>> + * @x: the value to round
>> + * @y: multiple to round closest to (must be a power of 2)
>> + *
>> + * Rounds @x to closest multiple of @y (which must be a power of 2).
>> + * The value can be either rounded up or rounded down depending upon
>> rounded
>> + * value's closeness to the specified value. If there are two closest
>> possible
>> + * values, i.e. the difference between the specified value and it's
>> rounded up
>> + * and rounded down values is same then preference is given to
>> rounded up
>> + * value.
>> + *
>> + * To perform arbitrary rounding to closest value (not multiple of
>> 2), use
>> + * roundclosest().
>> + *
>> + * Examples:
>> + * * round_closest_up(17, 4) = 16
>> + * * round_closest_up(15, 4) = 16
>> + * * round_closest_up(14, 4) = 16
>> + */
>> +#define round_closest_up(x, y) round_down((x) + (y) / 2, (y))
>> +
>> +/**
>> + * round_closest_down - round closest to be multiple of specified
>> value (which
>> + * is power of 2) with preference to rounding down
>> + * @x: the value to round
>> + * @y: multiple to round closest to (must be a power of 2)
>> + *
>> + * Rounds @x to closest multiple of @y (which must be a power of 2).
>> + * The value can be either rounded up or rounded down depending upon
>> rounded
>> + * value's closeness to the specified value. If there are two closest
>> possible
>> + * values, i.e. the difference between the specified value and it's
>> rounded up
>> + * and rounded down values is same then preference is given to
>> rounded up
>> + * value.
>> + *
>> + * To perform arbitrary rounding to closest value (not multiple of
>> 2), use
>> + * roundclosest().
>> + *
>> + * Examples:
>> + * * round_closest_down(17, 4) = 16
>> + * * round_closest_down(15, 4) = 16
>> + * * round_closest_down(14, 4) = 12
>> + */
>> +#define round_closest_down(x, y) round_up((x) - (y) / 2, (y))
>
> This is already identical to the existing round_down, no ?
>
Nopes both are different as described in the comments, round_down rounds
down to next specified power of 2, but round_closest_down rounds to
closest multiple of the specified power (which could be higher or lower)
and if there are two closest multiples then it gives preference to lower
value as shown in below examples :
- round_closest_down(15, 4) = 16
- round_down(15,4) = 12
- round_closest_down(14, 4) = 12
- round_closest_up(14, 4) = 16
Regards
Devarsh
next prev parent reply other threads:[~2024-07-20 10:02 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-07-08 15:59 [PATCH 0/6] Add rounding macros and enable KUnit tests Devarsh Thakkar
2024-07-08 15:59 ` [PATCH 1/6] math.h: Add macros for rounding to closest value Devarsh Thakkar
2024-07-09 5:59 ` Jiri Slaby
2024-07-09 14:30 ` Devarsh Thakkar
2024-07-09 8:49 ` Nikolay Borisov
2024-07-20 10:01 ` Devarsh Thakkar [this message]
2024-07-09 17:18 ` Dave Martin
2024-07-20 11:36 ` Devarsh Thakkar
2024-07-08 15:59 ` [PATCH 2/6] math.h: Use kernel-doc syntax for divison macros Devarsh Thakkar
2024-07-08 15:59 ` [PATCH 3/6] Documentation: core-api: Add math.h macros and functions Devarsh Thakkar
2024-07-08 15:59 ` [PATCH 4/6] lib: Add basic KUnit test for lib/math Devarsh Thakkar
2024-07-08 15:59 ` [PATCH 5/6] lib: math_kunit: Add tests for new macros related to rounding to nearest value Devarsh Thakkar
2024-07-08 15:59 ` [PATCH 6/6] media: imagination: Round to closest multiple for cropping region Devarsh Thakkar
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87e07706-03dc-42a2-b3fe-eaae24aa3c97@ti.com \
--to=devarsht@ti.com \
--cc=a-bhatia1@ti.com \
--cc=andi.shyti@linux.intel.com \
--cc=andriy.shevchenko@linux.intel.com \
--cc=b-brnich@ti.com \
--cc=broonie@kernel.org \
--cc=corbet@lwn.net \
--cc=davidgow@google.com \
--cc=detheridge@ti.com \
--cc=dlatypov@google.com \
--cc=hverkuil-cisco@xs4all.nl \
--cc=j-luthra@ti.com \
--cc=jani.nikula@intel.com \
--cc=jirislaby@kernel.org \
--cc=laurent.pinchart@ideasonboard.com \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=mchehab@kernel.org \
--cc=nicolas@ndufresne.ca \
--cc=nik.borisov@suse.com \
--cc=nm@ti.com \
--cc=p-mantena@ti.com \
--cc=praneeth@ti.com \
--cc=rdunlap@infradead.org \
--cc=sebastian.fricke@collabora.com \
--cc=vigneshr@ti.com \
--cc=vijayp@ti.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox