net/i40e: fix gcc 11 build warning on POWER architecture
Checks
Commit Message
Building DPDK with a gcc 11 based compiler such as the IBM Advanced
Toolchain 15 (1) generates a stringop-overflow warning when using -O3
optimization (DPDK default for production releases):
writing 1 byte into a region of size 0 [-Wstringop-overflow=]
The issue has been reported to the gcc project (2) but can be resolved
by preventing the compiler from unrolling the loop as part of the -O3
optimization.
(1) https://www.ibm.com/support/pages/advance-toolchain-linux-power
(2) https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102316
Bugzilla ID: 743
Signed-off-by: David Christensen <drc@linux.vnet.ibm.com>
---
drivers/net/i40e/i40e_flow.c | 4 ++++
1 file changed, 4 insertions(+)
Comments
Hi David:
Not sure if below patch also help to solve the issue you met on power arch,
Looks like the error is same: "writing 1 byte into a region of size 0"
would you help to check?
commit 1b0f3a18145468c309bb5a8cb98a8aa29af059e7
Author: Ferruh Yigit <ferruh.yigit@intel.com>
Date: Fri Oct 29 11:37:01 2021 +0100
net/i40e: fix build for 32-bit
Got error with: gcc 11.2.1 "cc (GCC) 11.2.1 20210728 (Red Hat 11.2.1-1)"
Build error:
In function 'i40e_flow_parse_fdir_pattern',
inlined from 'i40e_flow_parse_fdir_filter'
at ../drivers/net/i40e/i40e_flow.c:3274:8:
../drivers/net/i40e/i40e_flow.c:3052:69:
error: writing 1 byte into a region of size 0
[-Werror=stringop-overflow=]
3052 | filter->input.flow_ext.flexbytes[j] =
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
3053 | raw_spec->pattern[i];
| ~~~~~~~~~~~~~~~~~~~~
In file included from ../drivers/net/i40e/i40e_flow.c:25:
../drivers/net/i40e/i40e_flow.c:
In function 'i40e_flow_parse_fdir_filter':
../drivers/net/i40e/i40e_ethdev.h:638:17:
note: at offset 16 into destination object 'flexbytes' of size 16
638 | uint8_t flexbytes[RTE_ETH_FDIR_MAX_FLEXLEN];
| ^~~~~~~~~
Fixing by adding range checks.
Fixes: 6ced3dd72f5f ("net/i40e: support flexible payload parsing for FDIR")
Cc: stable@dpdk.org
Thanks
Qi
> -----Original Message-----
> From: dev <dev-bounces@dpdk.org> On Behalf Of David Christensen
> Sent: Friday, October 15, 2021 3:05 AM
> To: dev@dpdk.org; Xing, Beilei <beilei.xing@intel.com>
> Cc: stable@dpdk.org; David Christensen <drc@linux.vnet.ibm.com>
> Subject: [dpdk-dev] [PATCH] net/i40e: fix gcc 11 build warning on POWER
> architecture
>
> Building DPDK with a gcc 11 based compiler such as the IBM Advanced
> Toolchain 15 (1) generates a stringop-overflow warning when using -O3
> optimization (DPDK default for production releases):
>
> writing 1 byte into a region of size 0 [-Wstringop-overflow=]
>
> The issue has been reported to the gcc project (2) but can be resolved by
> preventing the compiler from unrolling the loop as part of the -O3
> optimization.
>
> (1) https://www.ibm.com/support/pages/advance-toolchain-linux-power
> (2) https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102316
>
> Bugzilla ID: 743
>
> Signed-off-by: David Christensen <drc@linux.vnet.ibm.com>
> ---
> drivers/net/i40e/i40e_flow.c | 4 ++++
> 1 file changed, 4 insertions(+)
>
> diff --git a/drivers/net/i40e/i40e_flow.c b/drivers/net/i40e/i40e_flow.c index
> e41a84f1d7..17ab7ad9b9 100644
> --- a/drivers/net/i40e/i40e_flow.c
> +++ b/drivers/net/i40e/i40e_flow.c
> @@ -3047,6 +3047,10 @@ i40e_flow_parse_fdir_pattern(struct rte_eth_dev
> *dev,
> return -rte_errno;
> }
>
> +#if defined(RTE_ARCH_PPC_64) && defined(RTE_TOOLCHAIN_GCC) && \
> +(GCC_VERSION >= 110000) #pragma GCC unroll 1 #endif
> for (i = 0; i < raw_spec->length; i++) {
> j = i + next_dst_off;
> filter->input.flow_ext.flexbytes[j] =
> --
> 2.27.0
> Not sure if below patch also help to solve the issue you met on power arch,
> Looks like the error is same: "writing 1 byte into a region of size 0"
> would you help to check?
>
> commit 1b0f3a18145468c309bb5a8cb98a8aa29af059e7
> Author: Ferruh Yigit <ferruh.yigit@intel.com>
> Date: Fri Oct 29 11:37:01 2021 +0100
>
> net/i40e: fix build for 32-bit
>
> Got error with: gcc 11.2.1 "cc (GCC) 11.2.1 20210728 (Red Hat 11.2.1-1)"
>
> Build error:
> In function 'i40e_flow_parse_fdir_pattern',
> inlined from 'i40e_flow_parse_fdir_filter'
> at ../drivers/net/i40e/i40e_flow.c:3274:8:
> ../drivers/net/i40e/i40e_flow.c:3052:69:
> error: writing 1 byte into a region of size 0
> [-Werror=stringop-overflow=]
> 3052 | filter->input.flow_ext.flexbytes[j] =
> | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
> 3053 | raw_spec->pattern[i];
> | ~~~~~~~~~~~~~~~~~~~~
> In file included from ../drivers/net/i40e/i40e_flow.c:25:
> ../drivers/net/i40e/i40e_flow.c:
> In function 'i40e_flow_parse_fdir_filter':
> ../drivers/net/i40e/i40e_ethdev.h:638:17:
> note: at offset 16 into destination object 'flexbytes' of size 16
> 638 | uint8_t flexbytes[RTE_ETH_FDIR_MAX_FLEXLEN];
> | ^~~~~~~~~
>
> Fixing by adding range checks.
>
> Fixes: 6ced3dd72f5f ("net/i40e: support flexible payload parsing for FDIR")
> Cc: stable@dpdk.org
Yep, definitely fixed it for POWER as well with the latest GCC compiler
(Advanced Toolchain 15.0 in my case). I'll withdraw by other patch.
Thanks for the heads up.
Dave
@@ -3047,6 +3047,10 @@ i40e_flow_parse_fdir_pattern(struct rte_eth_dev *dev,
return -rte_errno;
}
+#if defined(RTE_ARCH_PPC_64) && defined(RTE_TOOLCHAIN_GCC) && \
+(GCC_VERSION >= 110000)
+#pragma GCC unroll 1
+#endif
for (i = 0; i < raw_spec->length; i++) {
j = i + next_dst_off;
filter->input.flow_ext.flexbytes[j] =