[dpdk-kmods] linux/igb_uio: fix build for switch fall through

Ferruh Yigit ferruh.yigit at intel.com
Thu Dec 16 10:37:58 CET 2021


On 12/15/2021 11:15 PM, Stephen Hemminger wrote:
> On Wed, 15 Dec 2021 21:04:30 +0000
> Ferruh Yigit <ferruh.yigit at intel.com> wrote:
> 
>> On 12/15/2021 7:20 PM, Stephen Hemminger wrote:
>>> On Wed, 15 Dec 2021 18:48:59 +0000
>>> Ferruh Yigit <ferruh.yigit at intel.com> wrote:
>>>    
>>>> Linux is using '-Wimplicit-fallthrough=5' compiler option, which doesn't
>>>> take any fall through comments into account but only uses compiler
>>>> 'fallthrough' attribute to document fall through action is intended.
>>>>
>>>> "falls through" comment was used in the code which is causing a build
>>>> error now, this patch converts comment to the 'fallthrough' macro
>>>> defined in the Linux.
>>>>
>>>> To cover the case where Linux version doesn't have the macro, defined it
>>>> in the compatibility header too.
>>>>
>>>> Signed-off-by: Ferruh Yigit <ferruh.yigit at intel.com>
>>>
>>> Are you sure that fixes it? because the comment in the macro is typically
>>> not visible in a macro expansion.
>>>     Since in most case Linux uses gcc why not use the gcc attribute
>>>
>>>    __attribute__ ((fallthrough))
>>
>> Hi Stephen,
>>
>> That is the intention already.
>>
>> Patch is using the Linux kernel defined macro:
>> #if __has_attribute(__fallthrough__)
>> # define fallthrough                    __attribute__((__fallthrough__))
>> #else
>> # define fallthrough                    do {} while (0)  /* fallthrough */
>> #endif
>>
>> And it builds fine without the macro in the 'compat.h'.
>>
>>
>> I added the define in the 'compat.h' for old kernels which doesn't
>> define the macro. For that case I expect default '-Wimplicit-fallthrough'
>> option is used which accepts 'fallthrough;' as a regex hit.
> 
> Your right, on older kernels it really is just a dummy statement.
> The regex can't work, you can take (or leave the comment) it has no effect
> because implicit-fallthrough won't see it in a macro.

True, it has no benefit for 'Wimplicit-fallthrough', and regex doesn't hit.

But for the old kernels (<= 5.3) still need to have this define to prevent
build error, because they are missing 'fallthrough' macro.
But for those kernels, '-Wimplicit-fallthrough' compiler option is not
set, so that should be OK **.
I have tested with '4.19.221' stable kernel, this change builds fine.


**: Only v5.3 has potential problem, which defines '-Wimplicit-fallthrough' and
doesn't define the 'fallthrough' macro. When igb_uio compiled with this version
'fallthrough' is dummy statement from 'compat.h' and '-Wimplicit-fallthrough'
can cause warning.
To fix this, I will move both dummy and attribute macro definition to compat.h


More information about the dev mailing list