[dpdk-dev] [PATCH 00/40] ice base code update
Zhang, Qi Z
qi.z.zhang at intel.com
Fri Sep 11 13:52:17 CEST 2020
> -----Original Message-----
> From: Ferruh Yigit <ferruh.yigit at intel.com>
> Sent: Friday, September 11, 2020 7:08 PM
> To: Zhang, Qi Z <qi.z.zhang at intel.com>; Yang, Qiming
> <qiming.yang at intel.com>
> Cc: dev at dpdk.org
> Subject: Re: [dpdk-dev] [PATCH 00/40] ice base code update
>
> On 9/10/2020 4:26 AM, Zhang, Qi Z wrote:
> >
> >
> >> -----Original Message-----
> >> From: Yang, Qiming <qiming.yang at intel.com>
> >> Sent: Wednesday, September 9, 2020 3:17 PM
> >> To: Zhang, Qi Z <qi.z.zhang at intel.com>
> >> Cc: dev at dpdk.org
> >> Subject: RE: [PATCH 00/40] ice base code update
> >>
> >>
> >>
> >>> -----Original Message-----
> >>> From: Zhang, Qi Z <qi.z.zhang at intel.com>
> >>> Sent: Monday, September 7, 2020 19:28
> >>> To: Yang, Qiming <qiming.yang at intel.com>
> >>> Cc: dev at dpdk.org; Zhang, Qi Z <qi.z.zhang at intel.com>
> >>> Subject: [PATCH 00/40] ice base code update
> >>>
> >>> main changes:
> >>> 1. Added support for outer IP filter for GTPC.
> >>> 2. Added support for outer IP filter for GPTU control packet (no inner IP) 3.
> >>> Added support for QinQ switch filter 4. code refactor and bug fixes
> >>>
> >>> Qi Zhang (40):
> >>> net/ice/base: handle error gracefully in HW table calloc
> >>> net/ice/base: split caps discover into two functions
> >>> net/ice/base: avoid unnecessary single-member variable-length structs
> >>> net/ice/base: fix issues around move nodes
> >>> net/ice/base: cleanup stack hog
> >>> net/ice/base: clean the code wrapping
> >>> net/ice/base: cleanup misleading comment
> >>> net/ice/base: silence static analysis warning
> >>> net/ice/base: replace single-element array used for C struct hack
> >>> net/ice/base: introduce and use bitmap set API
> >>> net/ice/base: introduce and use bitmap hamming weight API
> >>> net/ice/base: add function header
> >>> net/ice/base: introduce and use for each bit iterator
> >>> net/ice/base: correct abbreviations
> >>> net/ice/base: add AQ cmd 0X0A0A LLDP fltr control
> >>> net/ice/base: add support for GTP-U type switch rule
> >>> net/ice/base: join format strings to same line
> >>> net/ice/base: introduce Tx rate limiting on port level
> >>> net/ice/base: reduce profile to recip info get from firmware
> >>> net/ice/base: refactor DCB related variables
> >>> net/ice/base: support outer IP filter for GTPC
> >>> net/ice/base: support outer IP filter for GTPU without inner IP
> >>> net/ice/base: move a function
> >>> net/ice/base: clear advanced rules in reset preparation
> >>> net/ice/base: move a function
> >>> net/ice/base: add check for failed acts allocation
> >>> net/ice/base: remove repeated words
> >>> net/ice/base: remove function ACL count query
> >>> net/ice/base: preserve NVM capabilities in safe mode
> >>> net/ice/base: misc minor ACL changes
> >>> net/ice/base: adjust rate limit profile ids runtime database
> >>> net/ice/base: enable QinQ filter for switch advanced rule
> >>> net/ice/base: create flash info structure and separate NVM version
> >>> net/ice/base: remove unused parameter
> >>> net/ice/base: minor code clean
> >>> net/ice/base: cache NVM module bank information
> >>> net/ice/base: rename function
> >>> net/ice/base: remove unnecessary conditional
> >>> net/ice/base: rename ACL priority values
> >>> net/ice/base: preserve default aggr vsi information
> >>>
>
>
> Hi Qi,
>
> I am getting build error [1], can you please check.
>
>
> [1]
> ../drivers/net/ice/ice_rxtx.c: In function ‘ice_tx_queue_start’:
> ../drivers/net/ice/ice_rxtx.c:486:15: error: array subscript 0 is outside array
> bounds of ‘struct ice_aqc_add_txqs_perq[]’ [-Werror=array-bounds]
> 486 | txq_elem.txqs[0].txq_id = rte_cpu_to_le_16(txq->reg_idx);
> | ~~~~~~~~~~~~~^~~
> In file included from ../drivers/net/ice/base/ice_controlq.h:8,
> from ../drivers/net/ice/base/ice_type.h:52,
> from ../drivers/net/ice/base/ice_common.h:8,
> from ../drivers/net/ice/ice_ethdev.h:12,
> from ../drivers/net/ice/ice_rxtx.h:8,
> from ../drivers/net/ice/ice_rxtx.c:9:
> ../drivers/net/ice/base/ice_adminq_cmd.h:2429:31: note: while referencing
> ‘txqs’
> 2429 | struct ice_aqc_add_txqs_perq txqs[STRUCT_HACK_VAR_LEN];
> | ^~~~
> ../drivers/net/ice/ice_rxtx.c:462:29: note: defined here ‘txq_elem’
> 462 | struct ice_aqc_add_tx_qgrp txq_elem;
> | ^~~~~~~~
> ../drivers/net/ice/ice_rxtx.c:498:54: error: array subscript 0 is outside array
> bounds of ‘struct ice_aqc_add_txqs_perq[]’ [-Werror=array-bounds]
> 498 | ice_set_ctx(hw, (uint8_t *)&tx_ctx, txq_elem.txqs[0].txq_ctx,
> |
> ~~~~~~~~~~~~~~~~^~~~~~~~
> In file included from ../drivers/net/ice/base/ice_controlq.h:8,
> from ../drivers/net/ice/base/ice_type.h:52,
> from ../drivers/net/ice/base/ice_common.h:8,
> from ../drivers/net/ice/ice_ethdev.h:12,
> from ../drivers/net/ice/ice_rxtx.h:8,
> from ../drivers/net/ice/ice_rxtx.c:9:
> ../drivers/net/ice/base/ice_adminq_cmd.h:2429:31: note: while referencing
> ‘txqs’
> 2429 | struct ice_aqc_add_txqs_perq txqs[STRUCT_HACK_VAR_LEN];
> | ^~~~
> ../drivers/net/ice/ice_rxtx.c:462:29: note: defined here ‘txq_elem’
> 462 | struct ice_aqc_add_tx_qgrp txq_elem;
> | ^~~~~~~~
> ../drivers/net/ice/ice_rxtx.c:514:29: error: array subscript 0 is outside array
> bounds of ‘struct ice_aqc_add_txqs_perq[]’ [-Werror=array-bounds]
> 514 | txq->q_teid = txq_elem.txqs[0].q_teid;
> | ~~~~~~~~~~~~~^~~
> In file included from ../drivers/net/ice/base/ice_controlq.h:8,
> from ../drivers/net/ice/base/ice_type.h:52,
> from ../drivers/net/ice/base/ice_common.h:8,
> from ../drivers/net/ice/ice_ethdev.h:12,
> from ../drivers/net/ice/ice_rxtx.h:8,
> from ../drivers/net/ice/ice_rxtx.c:9:
> ../drivers/net/ice/base/ice_adminq_cmd.h:2429:31: note: while referencing
> ‘txqs’
> 2429 | struct ice_aqc_add_txqs_perq txqs[STRUCT_HACK_VAR_LEN];
> | ^~~~
> ../drivers/net/ice/ice_rxtx.c:462:29: note: defined here ‘txq_elem’
> 462 | struct ice_aqc_add_tx_qgrp txq_elem;
> | ^~~~~~~~
> ../drivers/net/ice/ice_rxtx.c: In function ‘ice_fdir_tx_queue_start’:
> ../drivers/net/ice/ice_rxtx.c:658:15: error: array subscript 0 is outside array
> bounds of ‘struct ice_aqc_add_txqs_perq[]’ [-Werror=array-bounds]
> 658 | txq_elem.txqs[0].txq_id = rte_cpu_to_le_16(txq->reg_idx);
> | ~~~~~~~~~~~~~^~~
> In file included from ../drivers/net/ice/base/ice_controlq.h:8,
> from ../drivers/net/ice/base/ice_type.h:52,
> from ../drivers/net/ice/base/ice_common.h:8,
> from ../drivers/net/ice/ice_ethdev.h:12,
> from ../drivers/net/ice/ice_rxtx.h:8,
> from ../drivers/net/ice/ice_rxtx.c:9:
> ../drivers/net/ice/base/ice_adminq_cmd.h:2429:31: note: while referencing
> ‘txqs’
> 2429 | struct ice_aqc_add_txqs_perq txqs[STRUCT_HACK_VAR_LEN];
> | ^~~~
> ../drivers/net/ice/ice_rxtx.c:640:29: note: defined here ‘txq_elem’
> 640 | struct ice_aqc_add_tx_qgrp txq_elem;
> | ^~~~~~~~
> ../drivers/net/ice/ice_rxtx.c:670:54: error: array subscript 0 is outside array
> bounds of ‘struct ice_aqc_add_txqs_perq[]’ [-Werror=array-bounds]
> 670 | ice_set_ctx(hw, (uint8_t *)&tx_ctx, txq_elem.txqs[0].txq_ctx,
> |
> ~~~~~~~~~~~~~~~~^~~~~~~~
> In file included from ../drivers/net/ice/base/ice_controlq.h:8,
> from ../drivers/net/ice/base/ice_type.h:52,
> from ../drivers/net/ice/base/ice_common.h:8,
> from ../drivers/net/ice/ice_ethdev.h:12,
> from ../drivers/net/ice/ice_rxtx.h:8,
> from ../drivers/net/ice/ice_rxtx.c:9:
> ../drivers/net/ice/base/ice_adminq_cmd.h:2429:31: note: while referencing
> ‘txqs’
> 2429 | struct ice_aqc_add_txqs_perq txqs[STRUCT_HACK_VAR_LEN];
> | ^~~~
> ../drivers/net/ice/ice_rxtx.c:640:29: note: defined here ‘txq_elem’
> 640 | struct ice_aqc_add_tx_qgrp txq_elem;
> | ^~~~~~~~
> ../drivers/net/ice/ice_rxtx.c:686:29: error: array subscript 0 is outside array
> bounds of ‘struct ice_aqc_add_txqs_perq[]’ [-Werror=array-bounds]
> 686 | txq->q_teid = txq_elem.txqs[0].q_teid;
> | ~~~~~~~~~~~~~^~~
> In file included from ../drivers/net/ice/base/ice_controlq.h:8,
> from ../drivers/net/ice/base/ice_type.h:52,
> from ../drivers/net/ice/base/ice_common.h:8,
> from ../drivers/net/ice/ice_ethdev.h:12,
> from ../drivers/net/ice/ice_rxtx.h:8,
> from ../drivers/net/ice/ice_rxtx.c:9:
> ../drivers/net/ice/base/ice_adminq_cmd.h:2429:31: note: while referencing
> ‘txqs’
> 2429 | struct ice_aqc_add_txqs_perq txqs[STRUCT_HACK_VAR_LEN];
> | ^~~~
> ../drivers/net/ice/ice_rxtx.c:640:29: note: defined here ‘txq_elem’
> 640 | struct ice_aqc_add_tx_qgrp txq_elem;
> | ^~~~~~~~
> cc1: all warnings being treated as errors
Seems this issue is only reported by a new version GCC, and it does help to detect a invalid memory access issue.
The bug has been fixed in dpdk-next-net-intel on below commit
commit 978dddfae32764dd6ba81d615399fbc0452ecfb3
Author: Qi Zhang <qi.z.zhang at intel.com>
Date: Wed Aug 26 14:57:07 2020 +0800
net/ice/base: replace single-element array used for C struct hack
Convert the pre-C90-extension "C struct hack" method (using a single-
element array at the end of a structure for implementing variable-length
types) to the preferred use of C99 flexible array member.
Thanks
Qi
More information about the dev
mailing list