[dpdk-dev] [PATCH 3/3] ethdev: fix build warning on 64-bit value

Ferruh Yigit ferruh.yigit at intel.com
Mon Apr 27 16:14:24 CEST 2020


On 4/27/2020 3:12 PM, David Marchand wrote:
> On Mon, Apr 27, 2020 at 4:07 PM Ferruh Yigit <ferruh.yigit at intel.com> wrote:
>>
>> On 4/27/2020 3:00 PM, David Marchand wrote:
>>> On Mon, Apr 27, 2020 at 3:47 PM Ananyev, Konstantin
>>> <konstantin.ananyev at intel.com> wrote:
>>>>
>>>>
>>>>
>>>>> -----Original Message-----
>>>>> From: dev <dev-bounces at dpdk.org> On Behalf Of David Marchand
>>>>> Sent: Monday, April 27, 2020 2:37 PM
>>>>> To: Richardson, Bruce <bruce.richardson at intel.com>
>>>>> Cc: dev <dev at dpdk.org>; Ori Kam <orika at mellanox.com>; Thomas Monjalon <thomas at monjalon.net>; Yigit, Ferruh
>>>>> <ferruh.yigit at intel.com>; Andrew Rybchenko <arybchenko at solarflare.com>; Zhang, Xiao <xiao.zhang at intel.com>
>>>>> Subject: Re: [dpdk-dev] [PATCH 3/3] ethdev: fix build warning on 64-bit value
>>>>>
>>>>> On Mon, Apr 27, 2020 at 3:34 PM Bruce Richardson
>>>>> <bruce.richardson at intel.com> wrote:
>>>>>>
>>>>>> On Mon, Apr 27, 2020 at 03:23:41PM +0200, David Marchand wrote:
>>>>>>> Building OVS with dpdk, sparse complains about 64-bit constant being
>>>>>>> passed as a normal integer that can't fit it:
>>>>>>> error: constant 0xffffffffffffffff is so big it is unsigned long
>>>>>>>
>>>>>>> Fixes: ecbc8570131d ("ethdev: add PFCP header to flow API")
>>>>>>>
>>>>>>> Signed-off-by: David Marchand <david.marchand at redhat.com>
>>>>>>> ---
>>>>>>>  lib/librte_ethdev/rte_flow.h | 2 +-
>>>>>>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>>>>>>
>>>>>>> diff --git a/lib/librte_ethdev/rte_flow.h b/lib/librte_ethdev/rte_flow.h
>>>>>>> index 132b44edc6..1fb94f35e8 100644
>>>>>>> --- a/lib/librte_ethdev/rte_flow.h
>>>>>>> +++ b/lib/librte_ethdev/rte_flow.h
>>>>>>> @@ -1534,7 +1534,7 @@ struct rte_flow_item_pfcp {
>>>>>>>  #ifndef __cplusplus
>>>>>>>  static const struct rte_flow_item_pfcp rte_flow_item_pfcp_mask = {
>>>>>>>       .s_field = 0x01,
>>>>>>> -     .seid = RTE_BE64(0xffffffffffffffff),
>>>>>>> +     .seid = RTE_BE64(UINT64_C(0xffffffffffffffff)),
>>>>>>
>>>>>> Rather than cast, why not put "ULL" at the end. If we are going to cast,
>>>>>> why not just put "-1" in to save some digits.
>>>>>
>>>>> I preferred this form in the hope future developers who want
>>>>> 0x0fffffffffffffff will copy/paste this.
>>>>>
>>>>
>>>> As I remember there should be UINT64_MAX in stdint.h.
>>>
>>> Yes, we could go with:
>>> +     .seid = RTE_BE64(UINT64_MAX),
>>
>> This is something else but if the value is 'UINT64_MAX', do we need 'RTE_BE64'
>> macro?
> 
> In OVS case, sparse validates that a rte_be64_t value (mapped to
> ovs_be64_t) is passed to .seid.
> 
> .../build/install/usr/local/include/rte_flow.h:1537:17: error:
> incorrect type in initializer (different base types)
> .../build/install/usr/local/include/rte_flow.h:1537:17:    expected
> restricted ovs_be64 [usertype] seid
> .../build/install/usr/local/include/rte_flow.h:1537:17:    got unsigned long
> 
> 

Got it, thanks for clarification.


More information about the dev mailing list