From: "Kinsella, Ray" <mdr@ashroe.eu>
To: "Morten Brørup" <mb@smartsharesystems.com>,
"Tyler Retzlaff" <roretzla@linux.microsoft.com>,
"Stephen Hemminger" <stephen@networkplumber.org>
Cc: dev@dpdk.org, anatoly.burakov@intel.com,
Neil Horman <nhorman@tuxdriver.com>
Subject: Re: [dpdk-dev] [PATCH] librte_eal/common: fix return type of rte_bsf64
Date: Fri, 12 Mar 2021 11:46:39 +0000 [thread overview]
Message-ID: <f99e5ce3-730d-d610-df93-bca99c7b971d@ashroe.eu> (raw)
In-Reply-To: <98CBD80474FA8B44BF855DF32C47DC35C61674@smartserver.smartshare.dk>
On 12/03/2021 07:34, Morten Brørup wrote:
> CC: ABI Policy maintainers. You might have an opinion. Or not. :-)
My 2c is that this is affecting inlined functions from include/rte_common.h.
Although not ideal, the practical effect on Binary Compatibility is therefore likely to be _nil_.
Just a small comment - when Steve points out "The cast is no longer needed, it should be removed."
I think Tyler _may_ have mis-understood his point when he said
"it's not so much about making it compile. it's about making it correct
with respect to original author intent, consistent with the rte_bsf32
declaration ... "
My interpretation of what Steve said, is that once you change the return type
to uint32_t ... there is no need for the cast any more, that is all.
>
>> From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Tyler Retzlaff
>> Sent: Wednesday, March 10, 2021 11:53 PM
>>
>> On Wed, Mar 10, 2021 at 10:49:42AM -0800, Stephen Hemminger wrote:
>>> On Tue, 9 Mar 2021 22:41:06 -0800
>>> Tyler Retzlaff <roretzla@linux.microsoft.com> wrote:
>>>
>>>> based on the original commit and the usage of rte_bsf64 it appears
>> the
>>>> function should always have returned uint32_t instead of int which
>> is
>>>> consistent with the cast introduced in the return statement.
>>>>
>>>> Fixes: 4e261f551986 ("eal: add 64-bit bsf and 32-bit safe bsf
>>>> functions")
>>>> Cc: anatoly.burakov@intel.com
>>>>
>>>> Signed-off-by: Tyler Retzlaff <roretzla@linux.microsoft.com>
>>>> ---
>>>> lib/librte_eal/include/rte_common.h | 2 +-
>>>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>>>
>>>> diff --git a/lib/librte_eal/include/rte_common.h
>> b/lib/librte_eal/include/rte_common.h
>>>> index 1b630baf1..5e70ee7a8 100644
>>>> --- a/lib/librte_eal/include/rte_common.h
>>>> +++ b/lib/librte_eal/include/rte_common.h
>>>> @@ -679,7 +679,7 @@ rte_fls_u32(uint32_t x)
>>>> * @return
>>>> * least significant set bit in the input parameter.
>>>> */
>>>> -static inline int
>>>> +static inline uint32_t
>>>> rte_bsf64(uint64_t v)
>>>> {
>>>> return (uint32_t)__builtin_ctzll(v);
>>>
>>> The cast is no longer needed, it should be removed.
>>
>> it's not so much about making it compile. it's about making it correct
>> with respect to original author intent, consistent with the rte_bsf32
>> declaration, other consumers of the inline function inside rte_common.h
>> and whether or not it makes sense to have a function that returns a
>> count of bits signed. based on those factors i'm asserting that the
>> cast is actually correct and it is the return type that is wrong.
>>
>> your suggestion however would avoid having to deal with the downside of
>> changing the return type which is that an api change is necessary since
>> the function is exposed to applications. but even for something small
>> like this i think it is best to pursue the correct change rather than
>> sprinkle casts to (uint32_t) at various call-sites.
>>
>> i'm in the process of sending the proposal to deprecate/change the
>> return type unless others feel the above evaluation missed the mark.
>>
>> thanks!
>
> Please also update the similar math functions in rte_common.h, so the return type is consistent across these functions:
> - rte_bsf32()
> - rte_bsf32_safe()
> - rte_fls_u32()
> - rte_bsf64()
> - rte_fls_u64()
> - rte_log2_u32()
> - rte_log2_u64()
>
> They should all return either int or uint32_t.
>
> Standard C conventions would have them all return int (probably due to C's default type promotion to int when used in calculations), which is also the type returned by their underlying implementation.
>
> For some unknown reason, DPDK often uses uint32_t where you would normally use int. I guess it was inspired by MISRA C (for embedded systems); but it is not a documented conventions, and often deviated from.
>
> I don't have a personal preference for int or uint32_t here. But at least follow the same convention in the same header file.
>
> (Please note that the functions returning a Boolean value as an int type should keep doing that.)
>
>
> Med venlig hilsen / kind regards
> - Morten Brørup
>
next prev parent reply other threads:[~2021-03-12 11:46 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-03-10 6:41 Tyler Retzlaff
2021-03-10 18:31 ` Ranjit Menon
2021-03-10 18:49 ` Stephen Hemminger
2021-03-10 22:52 ` Tyler Retzlaff
2021-03-12 7:34 ` Morten Brørup
2021-03-12 11:46 ` Kinsella, Ray [this message]
2021-03-12 18:10 ` Tyler Retzlaff
2021-03-12 18:24 ` Tyler Retzlaff
2021-03-12 21:13 ` Morten Brørup
2021-03-13 1:10 ` Tyler Retzlaff
2021-03-13 7:29 ` Morten Brørup
2021-03-13 16:04 ` Tyler Retzlaff
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=f99e5ce3-730d-d610-df93-bca99c7b971d@ashroe.eu \
--to=mdr@ashroe.eu \
--cc=anatoly.burakov@intel.com \
--cc=dev@dpdk.org \
--cc=mb@smartsharesystems.com \
--cc=nhorman@tuxdriver.com \
--cc=roretzla@linux.microsoft.com \
--cc=stephen@networkplumber.org \
/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;
as well as URLs for NNTP newsgroup(s).