On 10/23/2019 3:04 PM, Olivier Matz wrote:
> On Wed, Oct 23, 2019 at 11:43:58AM +0000, Kiran Kumar Kokkilagadda wrote:
>>> -----Original Message-----
>>> From: Olivier Matz <olivier.m...@6wind.com>
>>> Sent: Wednesday, October 23, 2019 5:09 PM
>>> To: Raslan Darawsheh <rasl...@mellanox.com>
>>> Cc: Ferruh Yigit <ferruh.yi...@intel.com>; Kiran Kumar Kokkilagadda
>>> <kirankum...@marvell.com>; Adrien Mazarguil
>>> <adrien.mazarg...@6wind.com>; Wenzhuo Lu <wenzhuo...@intel.com>;
>>> Jingjing Wu <jingjing...@intel.com>; Bernard Iremonger
>>> <bernard.iremon...@intel.com>; John McNamara
>>> <john.mcnam...@intel.com>; Marko Kovacevic <marko.kovace...@intel.com>;
>>> Thomas Monjalon <tho...@monjalon.net>; Andrew Rybchenko
>>> <arybche...@solarflare.com>; dev@dpdk.org; ajit.khapa...@broadcom.com
>>> Subject: [EXT] Re: [dpdk-dev] [PATCH v10] ethdev: add HIGIG2 key field to 
>>> flow
>>> API
>>>
>>> External Email
>>>
>>> ----------------------------------------------------------------------
>>> Hi,
>>>
>>>
>>>
>>> On Wed, Oct 23, 2019 at 10:50:52AM +0000, Raslan Darawsheh wrote:
>>>
>>>> Hi,
>>>
>>>>
>>>
>>>> This patch broke the compilation of MLX5 PMD in debug mode:
>>>
>>>>
>>>
>>>>                  from /root/dpdk/x86_64-native-linux-
>>> gcc/include/rte_ethdev_driver.h:18,
>>>
>>>>                  from /root/dpdk/drivers/net/mlx5/mlx5_mp.c:11:
>>>
>>>> /root/dpdk/x86_64-native-linux-gcc/include/rte_higig.h:112:2: error: type 
>>>> of
>>> bit-field 'opcode' is a GCC extension [-Werror=pedantic]
>>>
>>>>   uint16_t opcode:3;
>>>
>>>>   ^
>>>
>>>> /root/dpdk/x86_64-native-linux-gcc/include/rte_higig.h:113:2: error: type 
>>>> of
>>> bit-field 'resv1' is a GCC extension [-Werror=pedantic]
>>>
>>>>   uint16_t resv1:2;
>>>
>>>>   ^
>>>
>>>> /root/dpdk/x86_64-native-linux-gcc/include/rte_higig.h:114:2: error: type 
>>>> of
>>> bit-field 'src_t' is a GCC extension [-Werror=pedantic]
>>>
>>>>   uint16_t src_t:1;
>>>
>>>>   ^
>>>
>>>> /root/dpdk/x86_64-native-linux-gcc/include/rte_higig.h:115:2: error: type 
>>>> of
>>> bit-field 'pfm' is a GCC extension [-Werror=pedantic]
>>>
>>>>   uint16_t pfm:2;
>>>
>>>>   ^
>>>
>>>> /root/dpdk/x86_64-native-linux-gcc/include/rte_higig.h:116:2: error: type 
>>>> of
>>> bit-field 'resv2' is a GCC extension [-Werror=pedantic]
>>>
>>>>   uint16_t resv2:5;
>>>
>>>>   ^
>>>
>>>> /root/dpdk/x86_64-native-linux-gcc/include/rte_higig.h:117:2: error: type 
>>>> of
>>> bit-field 'hdr_ext_len' is a GCC extension [-Werror=pedantic]
>>>
>>>>   uint16_t hdr_ext_len:3;
>>>
>>>>
>>>
>>>> and this is with gcc 4.8.5
>>>
>>>
>>>
>>> From https://urldefense.proofpoint.com/v2/url?u=https-
>>> 3A__stackoverflow.com_questions_10906238_warning-2Dwhen-2Dusing-
>>> 2Dbitfield-2Dwith-2Dunsigned-
>>> 2Dchar&d=DwIBAg&c=nKjWec2b6R0mOyPaz7xtfQ&r=owEKckYY4FTmil1Z6oBUR
>>> wkTThyuRbLAY9LdfiaT6HA&m=GZ-
>>> 6cngPycaUlGJT20VEOf9oTcp5PMwk7j1JV1vAQfs&s=SCg5yVPS4zZa8GSn9bl_eUtI
>>> vBmoDzi35PspWUttIUY&e=
>>>
>>> it seems that it is allowed in c99, so I guess it's a gcc 4.8 bug.
>>>
>>>
>>>
>>> Adding __extension__ above the struct solves the warnings, I suggest to
>>>
>>> add it.
>>
>> /**
>>  *
>>  * higig2 ppt type1 header.
>>  */
>> RTE_STD_C11
>> struct rte_higig2_ppt_type1 {
>>         uint16_t classification;
>>         uint16_t resv;
>>         uint16_t vid;
>> #if RTE_BYTE_ORDER == RTE_LITTLE_ENDIAN
>>         uint16_t opcode:3;
>>         uint16_t resv1:2;
>>         uint16_t src_t:1;
>>         uint16_t pfm:2;
>>         uint16_t resv2:5;
>>         uint16_t hdr_ext_len:3;
>> #elif RTE_BYTE_ORDER == RTE_BIG_ENDIAN
>>         uint16_t pfm:2;
>>         uint16_t src_t:1;
>>         uint16_t resv1:2;
>>         uint16_t opcode:3;
>>         uint16_t hdr_ext_len:3;
>>         uint16_t resv2:5;
>> #endif
>> };
>>
>> I have already added it. RTE_STD_C11 , this is a macro for __extension__. 
>> /** C extension macro for environments lacking C11 features. */
>> #if !defined(__STDC_VERSION__) || __STDC_VERSION__ < 201112L
>> #define RTE_STD_C11 __extension__
>> #else
>> #define RTE_STD_C11
>> #endif
> 
> The __extension__ is only added if compiled for < c11.
> But there is apparently a problem with gcc-4.8: even in c11, it does
> not support bitfields on u16. See: https://godbolt.org/z/hRIbgg
> 
> On gcc-4.9, the problem disappeared: https://godbolt.org/z/kkzz9v
> 
> So as a workaround, using __extension__ should work, probably with a short
> explanation.
> 

Thanks Olivier, this was also our finding with Raslan and he sent the fix 
already.
https://patches.dpdk.org/patch/61748/

Also it looks like gcc4.8 thinks this is not c11 standard but extension only for
uint16_t type, structs with uint32_t bit-fieds works as expected.

Reply via email to