net/i40e: fix gcc 11 build warning on POWER architecture

Message ID 20211014190500.2657413-1-drc@linux.vnet.ibm.com (mailing list archive)
State Superseded, archived
Delegated to: Qi Zhang
Headers
Series net/i40e: fix gcc 11 build warning on POWER architecture |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/github-robot: build success github build: passed
ci/iol-broadcom-Functional success Functional Testing PASS
ci/iol-broadcom-Performance success Performance Testing PASS
ci/iol-intel-Functional success Functional Testing PASS
ci/iol-intel-Performance success Performance Testing PASS
ci/iol-x86_64-compile-testing success Testing PASS
ci/iol-x86_64-unit-testing success Testing PASS
ci/iol-aarch64-unit-testing success Testing PASS
ci/iol-mellanox-Performance success Performance Testing PASS
ci/Intel-compilation success Compilation OK
ci/intel-Testing success Testing PASS
ci/iol-aarch64-compile-testing success Testing PASS

Commit Message

David Christensen Oct. 14, 2021, 7:05 p.m. UTC
  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

Qi Zhang Nov. 5, 2021, 12:50 a.m. UTC | #1
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
  
David Christensen Nov. 9, 2021, 10:46 p.m. UTC | #2
> 	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
  

Patch

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] =