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-boun...@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 <roret...@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.bura...@intel.com
>>>>
>>>> Signed-off-by: Tyler Retzlaff <roret...@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
> 

Reply via email to