patches for DPDK stable branches
 help / color / mirror / Atom feed
* [dpdk-stable] [PATCH 1/4] net/bnx2x: fix build with gcc11
@ 2021-05-10 15:03 Ferruh Yigit
  2021-05-10 15:03 ` [dpdk-stable] [PATCH 2/4] " Ferruh Yigit
                   ` (4 more replies)
  0 siblings, 5 replies; 25+ messages in thread
From: Ferruh Yigit @ 2021-05-10 15:03 UTC (permalink / raw)
  To: Rasesh Mody, Shahed Shaikh
  Cc: Ferruh Yigit, dev, stable, Kevin Traynor, Ajit Khaparde

Reproduced with '--buildtype=debugoptimized' config,
compiler version: gcc (GCC) 12.0.0 20210509 (experimental)

Build error:
In file included from ../drivers/net/bnx2x/bnx2x_rxtx.c:8:
../drivers/net/bnx2x/bnx2x_rxtx.c: In function ‘bnx2x_upd_rx_prod_fast’:
../drivers/net/bnx2x/bnx2x.h:1528:35:
    warning: ‘rx_prods’ is used uninitialized [-Wuninitialized]
 #define REG_WR32(sc, offset, val) bnx2x_reg_write32(sc, (offset), val)
                                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../drivers/net/bnx2x/bnx2x.h:1531:33:
	note: in expansion of macro ‘REG_WR32’
 1531 | #define REG_WR(sc, offset, val) REG_WR32(sc, offset, val)
      |                                 ^~~~~~~~
../drivers/net/bnx2x/bnx2x_rxtx.c:331:9:
	note: in expansion of macro ‘REG_WR’
  331 |         REG_WR(sc, fp->ustorm_rx_prods_offset, val[0]);
      |         ^~~~~~
../drivers/net/bnx2x/bnx2x_rxtx.c:324:40: note: ‘rx_prods’ declared here
  324 |         struct ustorm_eth_rx_producers rx_prods = { 0 };
      |                                        ^~~~~~~~

REG_WR32 requires 'uint32_t', use union instead of cast to 'uint32_t'.

Fixes: 38dff79ba736 ("net/bnx2x: update HSI")
Cc: stable@dpdk.org

Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
---
Cc: rmody@marvell.com
Cc: Kevin Traynor <ktraynor@redhat.com>
Cc: Ajit Khaparde <ajit.khaparde@broadcom.com>
---
 drivers/net/bnx2x/bnx2x_rxtx.c | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/drivers/net/bnx2x/bnx2x_rxtx.c b/drivers/net/bnx2x/bnx2x_rxtx.c
index 57e2ce504587..fdd6eeed8c1a 100644
--- a/drivers/net/bnx2x/bnx2x_rxtx.c
+++ b/drivers/net/bnx2x/bnx2x_rxtx.c
@@ -321,14 +321,15 @@ static inline void
 bnx2x_upd_rx_prod_fast(struct bnx2x_softc *sc, struct bnx2x_fastpath *fp,
 		uint16_t rx_bd_prod, uint16_t rx_cq_prod)
 {
-	struct ustorm_eth_rx_producers rx_prods = { 0 };
-	uint32_t *val = NULL;
+	union {
+		struct ustorm_eth_rx_producers rx_prods;
+		uint32_t val;
+	} val = { 0 };
 
-	rx_prods.bd_prod  = rx_bd_prod;
-	rx_prods.cqe_prod = rx_cq_prod;
+	val.rx_prods.bd_prod  = rx_bd_prod;
+	val.rx_prods.cqe_prod = rx_cq_prod;
 
-	val = (uint32_t *)&rx_prods;
-	REG_WR(sc, fp->ustorm_rx_prods_offset, val[0]);
+	REG_WR(sc, fp->ustorm_rx_prods_offset, val.val);
 }
 
 static uint16_t
-- 
2.31.1


^ permalink raw reply	[flat|nested] 25+ messages in thread

* [dpdk-stable] [PATCH 2/4] net/bnx2x: fix build with gcc11
  2021-05-10 15:03 [dpdk-stable] [PATCH 1/4] net/bnx2x: fix build with gcc11 Ferruh Yigit
@ 2021-05-10 15:03 ` Ferruh Yigit
  2021-05-10 15:03 ` [dpdk-stable] [PATCH 3/4] net/ice/base: " Ferruh Yigit
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 25+ messages in thread
From: Ferruh Yigit @ 2021-05-10 15:03 UTC (permalink / raw)
  To: Rasesh Mody, Shahed Shaikh
  Cc: Ferruh Yigit, dev, stable, Kevin Traynor, Ajit Khaparde

Reproduced with '--buildtype=debugoptimized' config,
compiler version: gcc (GCC) 12.0.0 20210509 (experimental)

Build error:
In file included from ../drivers/net/bnx2x/bnx2x.c:16:
../drivers/net/bnx2x/bnx2x.c: In function ‘bnx2x_hc_ack_sb’:
../drivers/net/bnx2x/bnx2x.h:1528:35:
         warning: ‘igu_ack’ is used uninitialized [-Wuninitialized]
 #define REG_WR32(sc, offset, val) bnx2x_reg_write32(sc, (offset), val)
                                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../drivers/net/bnx2x/bnx2x.h:1531:33:
	note: in expansion of macro ‘REG_WR32’
 1531 | #define REG_WR(sc, offset, val) REG_WR32(sc, offset, val)
      |                                 ^~~~~~~~
../drivers/net/bnx2x/bnx2x.h:1916:9: note: in expansion of macro ‘REG_WR’
 1916 |         REG_WR(sc, hc_addr, *val);
      |         ^~~~~~
../drivers/net/bnx2x/bnx2x.h:1905:33: note: ‘igu_ack’ declared here
 1905 |         struct igu_ack_register igu_ack;
      |                                 ^~~~~~~

REG_WR32 requires 'uint32_t', use union instead of cast to 'uint32_t'.

Fixes: 38dff79ba736 ("net/bnx2x: update HSI")
Cc: stable@dpdk.org

Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
---
Cc: rmody@marvell.com
Cc: Kevin Traynor <ktraynor@redhat.com>
Cc: Ajit Khaparde <ajit.khaparde@broadcom.com>
---
 drivers/net/bnx2x/bnx2x.h | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/drivers/net/bnx2x/bnx2x.h b/drivers/net/bnx2x/bnx2x.h
index e13ab1557418..80d19cbfd665 100644
--- a/drivers/net/bnx2x/bnx2x.h
+++ b/drivers/net/bnx2x/bnx2x.h
@@ -1902,18 +1902,19 @@ bnx2x_hc_ack_sb(struct bnx2x_softc *sc, uint8_t sb_id, uint8_t storm,
 {
 	uint32_t hc_addr = (HC_REG_COMMAND_REG + SC_PORT(sc) * 32 +
 			COMMAND_REG_INT_ACK);
-	struct igu_ack_register igu_ack;
-	uint32_t *val = NULL;
+	union {
+		struct igu_ack_register igu_ack;
+		uint32_t val;
+	} val;
 
-	igu_ack.status_block_index = index;
-	igu_ack.sb_id_and_flags =
+	val.igu_ack.status_block_index = index;
+	val.igu_ack.sb_id_and_flags =
 		((sb_id << IGU_ACK_REGISTER_STATUS_BLOCK_ID_SHIFT) |
 		 (storm << IGU_ACK_REGISTER_STORM_ID_SHIFT) |
 		 (update << IGU_ACK_REGISTER_UPDATE_INDEX_SHIFT) |
 		 (op << IGU_ACK_REGISTER_INTERRUPT_MODE_SHIFT));
 
-	val = (uint32_t *)&igu_ack;
-	REG_WR(sc, hc_addr, *val);
+	REG_WR(sc, hc_addr, val.val);
 
 	/* Make sure that ACK is written */
 	mb();
-- 
2.31.1


^ permalink raw reply	[flat|nested] 25+ messages in thread

* [dpdk-stable] [PATCH 3/4] net/ice/base: fix build with gcc11
  2021-05-10 15:03 [dpdk-stable] [PATCH 1/4] net/bnx2x: fix build with gcc11 Ferruh Yigit
  2021-05-10 15:03 ` [dpdk-stable] [PATCH 2/4] " Ferruh Yigit
@ 2021-05-10 15:03 ` Ferruh Yigit
  2021-05-10 17:04   ` [dpdk-stable] [dpdk-dev] " Wang, Haiyue
  2021-05-10 15:03 ` [dpdk-stable] [PATCH 4/4] net/tap: " Ferruh Yigit
                   ` (2 subsequent siblings)
  4 siblings, 1 reply; 25+ messages in thread
From: Ferruh Yigit @ 2021-05-10 15:03 UTC (permalink / raw)
  To: Qiming Yang, Qi Zhang, Paul M Stillwell Jr, Wenzhuo Lu,
	Leyi Rong, Shivanshu Shukla
  Cc: Ferruh Yigit, dev, stable, Kevin Traynor, Ajit Khaparde

Reproduced with '--buildtype=debugoptimized' config,
compiler version: gcc (GCC) 12.0.0 20210509 (experimental)

There are multiple build errors, like:
../drivers/net/ice/base/ice_switch.c: In function ‘ice_add_marker_act’:
../drivers/net/ice/base/ice_switch.c:3727:15:
	warning: array subscript ‘struct ice_aqc_sw_rules_elem[0]’
	is partly outside array bounds of ‘unsigned char[52]’
	[-Warray-bounds]
 3727 |         lg_act->type = CPU_TO_LE16(ICE_AQC_SW_RULES_T_LG_ACT);
      |               ^~
In file included from ../drivers/net/ice/base/ice_type.h:52,
                 from ../drivers/net/ice/base/ice_common.h:8,
                 from ../drivers/net/ice/base/ice_switch.h:8,
                 from ../drivers/net/ice/base/ice_switch.c:5:
../drivers/net/ice/base/ice_osdep.h:209:29:
	note: referencing an object of size 52 allocated by ‘rte_zmalloc’
  209 | #define ice_malloc(h, s)    rte_zmalloc(NULL, s, 0)
      |                             ^~~~~~~~~~~~~~~~~~~~~~~
../drivers/net/ice/base/ice_switch.c:3720:50:
	note: in expansion of macro ‘ice_malloc’
  lg_act = (struct ice_aqc_sw_rules_elem *)ice_malloc(hw, rules_size);

These errors are mainly because allocated memory is cast to
"struct ice_aqc_sw_rules_elem *" but allocated size is less than the size
of "struct ice_aqc_sw_rules_elem".

"struct ice_aqc_sw_rules_elem" has multiple other structs has unions,
based on which one is used allocated memory being less than the size of
"struct ice_aqc_sw_rules_elem" is logically correct but compiler is
complaining about it.

As a solution making sure allocated memory size is at least size of
"struct ice_aqc_sw_rules_elem".
The function to use the struct is 'ice_aq_sw_rules()', and it already has
parameter for size of the rule, allocating more than needed shouldn't
cause any problem.

Fixes: c7dd15931183 ("net/ice/base: add virtual switch code")
Fixes: 02acdce2f553 ("net/ice/base: add MAC filter with marker and counter")
Fixes: f89aa3affa9e ("net/ice/base: support removing advanced rule")
Cc: stable@dpdk.org

Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
---
Cc: paul.m.stillwell.jr@intel.com
Cc: qi.z.zhang@intel.com
Cc: leyi.rong@intel.com
Cc: Kevin Traynor <ktraynor@redhat.com>
Cc: Ajit Khaparde <ajit.khaparde@broadcom.com>
---
 drivers/net/ice/base/ice_switch.c | 30 +++++++++++++++++++++++-------
 1 file changed, 23 insertions(+), 7 deletions(-)

diff --git a/drivers/net/ice/base/ice_switch.c b/drivers/net/ice/base/ice_switch.c
index 229b355c62c5..fa2a623aff8c 100644
--- a/drivers/net/ice/base/ice_switch.c
+++ b/drivers/net/ice/base/ice_switch.c
@@ -3704,6 +3704,7 @@ ice_add_marker_act(struct ice_hw *hw, struct ice_fltr_mgmt_list_entry *m_ent,
 	enum ice_status status;
 	u16 lg_act_size;
 	u16 rules_size;
+	u16 max_size;
 	u32 act;
 	u16 id;
 
@@ -3717,7 +3718,9 @@ ice_add_marker_act(struct ice_hw *hw, struct ice_fltr_mgmt_list_entry *m_ent,
 	 */
 	lg_act_size = (u16)ICE_SW_RULE_LG_ACT_SIZE(num_lg_acts);
 	rules_size = lg_act_size + ICE_SW_RULE_RX_TX_ETH_HDR_SIZE;
-	lg_act = (struct ice_aqc_sw_rules_elem *)ice_malloc(hw, rules_size);
+	max_size = sizeof(struct ice_aqc_sw_rules_elem) * 2;
+	lg_act = (struct ice_aqc_sw_rules_elem *)ice_malloc(hw,
+		rules_size < max_size ? max_size : rules_size);
 	if (!lg_act)
 		return ICE_ERR_NO_MEMORY;
 
@@ -3803,6 +3806,7 @@ ice_add_counter_act(struct ice_hw *hw, struct ice_fltr_mgmt_list_entry *m_ent,
 	u16 lg_act_size;
 	u16 rules_size;
 	u16 f_rule_id;
+	u16 max_size;
 	u32 act;
 	u16 id;
 
@@ -3816,7 +3820,9 @@ ice_add_counter_act(struct ice_hw *hw, struct ice_fltr_mgmt_list_entry *m_ent,
 	 */
 	lg_act_size = (u16)ICE_SW_RULE_LG_ACT_SIZE(num_acts);
 	rules_size = lg_act_size + ICE_SW_RULE_RX_TX_ETH_HDR_SIZE;
-	lg_act = (struct ice_aqc_sw_rules_elem *)ice_malloc(hw, rules_size);
+	max_size = sizeof(struct ice_aqc_sw_rules_elem) * 2;
+	lg_act = (struct ice_aqc_sw_rules_elem *)ice_malloc(hw,
+		rules_size < max_size ? max_size : rules_size);
 	if (!lg_act)
 		return ICE_ERR_NO_MEMORY;
 
@@ -4009,12 +4015,14 @@ static enum ice_status
 ice_create_pkt_fwd_rule(struct ice_hw *hw, struct ice_sw_recipe *recp_list,
 			struct ice_fltr_list_entry *f_entry)
 {
+	u16 max_size = sizeof(struct ice_aqc_sw_rules_elem);
 	struct ice_fltr_mgmt_list_entry *fm_entry;
 	struct ice_aqc_sw_rules_elem *s_rule;
 	enum ice_status status;
 
 	s_rule = (struct ice_aqc_sw_rules_elem *)
-		ice_malloc(hw, ICE_SW_RULE_RX_TX_ETH_HDR_SIZE);
+		ice_malloc(hw, ICE_SW_RULE_RX_TX_ETH_HDR_SIZE < max_size ?
+				max_size : ICE_SW_RULE_RX_TX_ETH_HDR_SIZE);
 	if (!s_rule)
 		return ICE_ERR_NO_MEMORY;
 	fm_entry = (struct ice_fltr_mgmt_list_entry *)
@@ -4068,11 +4076,13 @@ ice_create_pkt_fwd_rule(struct ice_hw *hw, struct ice_sw_recipe *recp_list,
 static enum ice_status
 ice_update_pkt_fwd_rule(struct ice_hw *hw, struct ice_fltr_info *f_info)
 {
+	u16 max_size = sizeof(struct ice_aqc_sw_rules_elem);
 	struct ice_aqc_sw_rules_elem *s_rule;
 	enum ice_status status;
 
 	s_rule = (struct ice_aqc_sw_rules_elem *)
-		ice_malloc(hw, ICE_SW_RULE_RX_TX_ETH_HDR_SIZE);
+		ice_malloc(hw, ICE_SW_RULE_RX_TX_ETH_HDR_SIZE < max_size ?
+				max_size : ICE_SW_RULE_RX_TX_ETH_HDR_SIZE);
 	if (!s_rule)
 		return ICE_ERR_NO_MEMORY;
 
@@ -4545,11 +4555,13 @@ ice_remove_rule_internal(struct ice_hw *hw, struct ice_sw_recipe *recp_list,
 	}
 
 	if (remove_rule) {
+		u16 max_size = sizeof(struct ice_aqc_sw_rules_elem);
 		/* Remove the lookup rule */
 		struct ice_aqc_sw_rules_elem *s_rule;
 
 		s_rule = (struct ice_aqc_sw_rules_elem *)
-			ice_malloc(hw, ICE_SW_RULE_RX_TX_NO_HDR_SIZE);
+			ice_malloc(hw, ICE_SW_RULE_RX_TX_NO_HDR_SIZE < max_size
+				? max_size : ICE_SW_RULE_RX_TX_NO_HDR_SIZE);
 		if (!s_rule) {
 			status = ICE_ERR_NO_MEMORY;
 			goto exit;
@@ -5264,6 +5276,7 @@ enum ice_status
 ice_cfg_dflt_vsi(struct ice_port_info *pi, u16 vsi_handle, bool set,
 		 u8 direction)
 {
+	u16 max_size = sizeof(struct ice_aqc_sw_rules_elem);
 	struct ice_aqc_sw_rules_elem *s_rule;
 	struct ice_fltr_info f_info;
 	struct ice_hw *hw = pi->hw;
@@ -5279,7 +5292,8 @@ ice_cfg_dflt_vsi(struct ice_port_info *pi, u16 vsi_handle, bool set,
 	s_rule_size = set ? ICE_SW_RULE_RX_TX_ETH_HDR_SIZE :
 		ICE_SW_RULE_RX_TX_NO_HDR_SIZE;
 
-	s_rule = (struct ice_aqc_sw_rules_elem *)ice_malloc(hw, s_rule_size);
+	s_rule = (struct ice_aqc_sw_rules_elem *)ice_malloc(hw, s_rule_size <
+		max_size ? max_size : s_rule_size);
 	if (!s_rule)
 		return ICE_ERR_NO_MEMORY;
 
@@ -8998,12 +9012,14 @@ ice_rem_adv_rule(struct ice_hw *hw, struct ice_adv_lkup_elem *lkups,
 	}
 	ice_release_lock(rule_lock);
 	if (remove_rule) {
+		u16 max_size = sizeof(struct ice_aqc_sw_rules_elem);
 		struct ice_aqc_sw_rules_elem *s_rule;
 		u16 rule_buf_sz;
 
 		rule_buf_sz = ICE_SW_RULE_RX_TX_NO_HDR_SIZE;
 		s_rule = (struct ice_aqc_sw_rules_elem *)
-			ice_malloc(hw, rule_buf_sz);
+			ice_malloc(hw, rule_buf_sz < max_size ? max_size :
+				rule_buf_sz);
 		if (!s_rule)
 			return ICE_ERR_NO_MEMORY;
 		s_rule->pdata.lkup_tx_rx.act = 0;
-- 
2.31.1


^ permalink raw reply	[flat|nested] 25+ messages in thread

* [dpdk-stable] [PATCH 4/4] net/tap: fix build with gcc11
  2021-05-10 15:03 [dpdk-stable] [PATCH 1/4] net/bnx2x: fix build with gcc11 Ferruh Yigit
  2021-05-10 15:03 ` [dpdk-stable] [PATCH 2/4] " Ferruh Yigit
  2021-05-10 15:03 ` [dpdk-stable] [PATCH 3/4] net/ice/base: " Ferruh Yigit
@ 2021-05-10 15:03 ` Ferruh Yigit
  2021-05-11 12:28   ` [dpdk-stable] [dpdk-dev] " Kevin Traynor
  2021-05-11 11:44 ` [dpdk-stable] [PATCH v2 1/4] net/bnx2x: " Ferruh Yigit
  2021-05-11 13:14 ` [dpdk-stable] [PATCH v3 " Ferruh Yigit
  4 siblings, 1 reply; 25+ messages in thread
From: Ferruh Yigit @ 2021-05-10 15:03 UTC (permalink / raw)
  To: Keith Wiles, Pascal Mazon, Olga Shern; +Cc: Ferruh Yigit, dev, stable

Reproduced with '--buildtype=debugoptimized' config,
compiler version: gcc (GCC) 12.0.0 20210509 (experimental)

There are multiple build errors, like:
In file included from ../drivers/net/tap/tap_flow.c:13:
In function ‘rte_jhash_2hashes’,
    inlined from ‘rte_jhash’ at ../lib/hash/rte_jhash.h:284:2,
    inlined from ‘tap_flow_set_handle’ at
	../drivers/net/tap/tap_flow.c:1306:12,
    inlined from ‘rss_enable’ at ../drivers/net/tap/tap_flow.c:1909:3,
    inlined from ‘priv_flow_process’ at
	../drivers/net/tap/tap_flow.c:1228:11:
../lib/hash/rte_jhash.h:238:9:
	warning: ‘flow’ may be used uninitialized [-Wmaybe-uninitialized]
  238 |         __rte_jhash_2hashes(key, length, pc, pb, 1);
      |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../drivers/net/tap/tap_flow.c: In function ‘priv_flow_process’:
../lib/hash/rte_jhash.h:81:1: note: by argument 1 of type ‘const void *’
	to ‘__rte_jhash_2hashes.constprop’ declared here
 81 | __rte_jhash_2hashes(const void *key, uint32_t length, uint32_t *pc,
    | ^~~~~~~~~~~~~~~~~~~
../drivers/net/tap/tap_flow.c:1028:1: note: ‘flow’ declared here
 1028 | priv_flow_process(struct pmd_internals *pmd,
      | ^~~~~~~~~~~~~~~~~

Fix strict aliasing rule by using union.

Fixes: de96fe68ae95 ("net/tap: add basic flow API patterns and actions")
Cc: stable@dpdk.org

Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
---
Cc: pascal.mazon@6wind.com
---
 drivers/net/tap/tap_flow.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/drivers/net/tap/tap_flow.c b/drivers/net/tap/tap_flow.c
index 1ee6fb30ab2d..c4f60ce98e5e 100644
--- a/drivers/net/tap/tap_flow.c
+++ b/drivers/net/tap/tap_flow.c
@@ -1300,10 +1300,16 @@ tap_flow_validate(struct rte_eth_dev *dev,
 static void
 tap_flow_set_handle(struct rte_flow *flow)
 {
+	union {
+		struct rte_flow *flow;
+		const void *key;
+	} tmp;
 	uint32_t handle = 0;
 
+	tmp.flow = flow;
+
 	if (sizeof(flow) > 4)
-		handle = rte_jhash(&flow, sizeof(flow), 1);
+		handle = rte_jhash(tmp.key, sizeof(flow), 1);
 	else
 		handle = (uintptr_t)flow;
 	/* must be at least 1 to avoid letting the kernel choose one for us */
-- 
2.31.1


^ permalink raw reply	[flat|nested] 25+ messages in thread

* Re: [dpdk-stable] [dpdk-dev] [PATCH 3/4] net/ice/base: fix build with gcc11
  2021-05-10 15:03 ` [dpdk-stable] [PATCH 3/4] net/ice/base: " Ferruh Yigit
@ 2021-05-10 17:04   ` Wang, Haiyue
  2021-05-10 17:13     ` Wang, Haiyue
  2021-05-10 17:28     ` Ferruh Yigit
  0 siblings, 2 replies; 25+ messages in thread
From: Wang, Haiyue @ 2021-05-10 17:04 UTC (permalink / raw)
  To: Yigit, Ferruh, Yang, Qiming, Zhang, Qi Z, Stillwell Jr,  Paul M,
	Lu, Wenzhuo, Rong, Leyi, Shukla, Shivanshu
  Cc: Yigit, Ferruh, dev, stable, Kevin Traynor, Ajit Khaparde

> -----Original Message-----
> From: dev <dev-bounces@dpdk.org> On Behalf Of Ferruh Yigit
> Sent: Monday, May 10, 2021 23:03
> To: Yang, Qiming <qiming.yang@intel.com>; Zhang, Qi Z <qi.z.zhang@intel.com>; Stillwell Jr, Paul M
> <paul.m.stillwell.jr@intel.com>; Lu, Wenzhuo <wenzhuo.lu@intel.com>; Rong, Leyi <leyi.rong@intel.com>;
> Shukla, Shivanshu <shivanshu.shukla@intel.com>
> Cc: Yigit, Ferruh <ferruh.yigit@intel.com>; dev@dpdk.org; stable@dpdk.org; Kevin Traynor
> <ktraynor@redhat.com>; Ajit Khaparde <ajit.khaparde@broadcom.com>
> Subject: [dpdk-dev] [PATCH 3/4] net/ice/base: fix build with gcc11
> 
> Reproduced with '--buildtype=debugoptimized' config,
> compiler version: gcc (GCC) 12.0.0 20210509 (experimental)
> 
> There are multiple build errors, like:
> ../drivers/net/ice/base/ice_switch.c: In function ‘ice_add_marker_act’:
> ../drivers/net/ice/base/ice_switch.c:3727:15:
> 	warning: array subscript ‘struct ice_aqc_sw_rules_elem[0]’
> 	is partly outside array bounds of ‘unsigned char[52]’
> 	[-Warray-bounds]
>  3727 |         lg_act->type = CPU_TO_LE16(ICE_AQC_SW_RULES_T_LG_ACT);
>       |               ^~
> In file included from ../drivers/net/ice/base/ice_type.h:52,
>                  from ../drivers/net/ice/base/ice_common.h:8,
>                  from ../drivers/net/ice/base/ice_switch.h:8,
>                  from ../drivers/net/ice/base/ice_switch.c:5:
> ../drivers/net/ice/base/ice_osdep.h:209:29:
> 	note: referencing an object of size 52 allocated by ‘rte_zmalloc’
>   209 | #define ice_malloc(h, s)    rte_zmalloc(NULL, s, 0)
>       |                             ^~~~~~~~~~~~~~~~~~~~~~~
> ../drivers/net/ice/base/ice_switch.c:3720:50:
> 	note: in expansion of macro ‘ice_malloc’
>   lg_act = (struct ice_aqc_sw_rules_elem *)ice_malloc(hw, rules_size);
> 
> These errors are mainly because allocated memory is cast to
> "struct ice_aqc_sw_rules_elem *" but allocated size is less than the size
> of "struct ice_aqc_sw_rules_elem".
> 
> "struct ice_aqc_sw_rules_elem" has multiple other structs has unions,
> based on which one is used allocated memory being less than the size of
> "struct ice_aqc_sw_rules_elem" is logically correct but compiler is
> complaining about it.
> 
> As a solution making sure allocated memory size is at least size of
> "struct ice_aqc_sw_rules_elem".
> The function to use the struct is 'ice_aq_sw_rules()', and it already has
> parameter for size of the rule, allocating more than needed shouldn't
> cause any problem.
> 
> Fixes: c7dd15931183 ("net/ice/base: add virtual switch code")
> Fixes: 02acdce2f553 ("net/ice/base: add MAC filter with marker and counter")
> Fixes: f89aa3affa9e ("net/ice/base: support removing advanced rule")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
> ---
> Cc: paul.m.stillwell.jr@intel.com
> Cc: qi.z.zhang@intel.com
> Cc: leyi.rong@intel.com
> Cc: Kevin Traynor <ktraynor@redhat.com>
> Cc: Ajit Khaparde <ajit.khaparde@broadcom.com>
> ---
>  drivers/net/ice/base/ice_switch.c | 30 +++++++++++++++++++++++-------
>  1 file changed, 23 insertions(+), 7 deletions(-)

GCC bug ?

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98266

Bug 98266 - [11 Regression] bogus array subscript is partly outside array bounds on virtual inheritance



> --
> 2.31.1


^ permalink raw reply	[flat|nested] 25+ messages in thread

* Re: [dpdk-stable] [dpdk-dev] [PATCH 3/4] net/ice/base: fix build with gcc11
  2021-05-10 17:04   ` [dpdk-stable] [dpdk-dev] " Wang, Haiyue
@ 2021-05-10 17:13     ` Wang, Haiyue
  2021-05-10 17:31       ` Ferruh Yigit
  2021-05-10 17:28     ` Ferruh Yigit
  1 sibling, 1 reply; 25+ messages in thread
From: Wang, Haiyue @ 2021-05-10 17:13 UTC (permalink / raw)
  To: Yigit, Ferruh, Yang, Qiming, Zhang, Qi Z, Stillwell Jr,  Paul M,
	Lu, Wenzhuo, Rong, Leyi, Shukla, Shivanshu
  Cc: Yigit, Ferruh, dev, stable, Kevin Traynor, Ajit Khaparde

> -----Original Message-----
> From: Wang, Haiyue
> Sent: Tuesday, May 11, 2021 01:05
> To: Ferruh Yigit <ferruh.yigit@intel.com>; Yang, Qiming <qiming.yang@intel.com>; Zhang, Qi Z
> <qi.z.zhang@intel.com>; Stillwell Jr, Paul M <paul.m.stillwell.jr@intel.com>; Lu, Wenzhuo
> <wenzhuo.lu@intel.com>; Rong, Leyi <leyi.rong@intel.com>; Shukla, Shivanshu
> <Shivanshu.Shukla@intel.com>
> Cc: Yigit, Ferruh <ferruh.yigit@intel.com>; dev@dpdk.org; stable@dpdk.org; Kevin Traynor
> <ktraynor@redhat.com>; Ajit Khaparde <ajit.khaparde@broadcom.com>
> Subject: RE: [dpdk-dev] [PATCH 3/4] net/ice/base: fix build with gcc11
> 
> > -----Original Message-----
> > From: dev <dev-bounces@dpdk.org> On Behalf Of Ferruh Yigit
> > Sent: Monday, May 10, 2021 23:03
> > To: Yang, Qiming <qiming.yang@intel.com>; Zhang, Qi Z <qi.z.zhang@intel.com>; Stillwell Jr, Paul M
> > <paul.m.stillwell.jr@intel.com>; Lu, Wenzhuo <wenzhuo.lu@intel.com>; Rong, Leyi
> <leyi.rong@intel.com>;
> > Shukla, Shivanshu <shivanshu.shukla@intel.com>
> > Cc: Yigit, Ferruh <ferruh.yigit@intel.com>; dev@dpdk.org; stable@dpdk.org; Kevin Traynor
> > <ktraynor@redhat.com>; Ajit Khaparde <ajit.khaparde@broadcom.com>
> > Subject: [dpdk-dev] [PATCH 3/4] net/ice/base: fix build with gcc11
> >
> > Reproduced with '--buildtype=debugoptimized' config,
> > compiler version: gcc (GCC) 12.0.0 20210509 (experimental)
> >
> > There are multiple build errors, like:
> > ../drivers/net/ice/base/ice_switch.c: In function ‘ice_add_marker_act’:
> > ../drivers/net/ice/base/ice_switch.c:3727:15:
> > 	warning: array subscript ‘struct ice_aqc_sw_rules_elem[0]’
> > 	is partly outside array bounds of ‘unsigned char[52]’
> > 	[-Warray-bounds]
> >  3727 |         lg_act->type = CPU_TO_LE16(ICE_AQC_SW_RULES_T_LG_ACT);
> >       |               ^~
> > In file included from ../drivers/net/ice/base/ice_type.h:52,
> >                  from ../drivers/net/ice/base/ice_common.h:8,
> >                  from ../drivers/net/ice/base/ice_switch.h:8,
> >                  from ../drivers/net/ice/base/ice_switch.c:5:
> > ../drivers/net/ice/base/ice_osdep.h:209:29:
> > 	note: referencing an object of size 52 allocated by ‘rte_zmalloc’
> >   209 | #define ice_malloc(h, s)    rte_zmalloc(NULL, s, 0)
> >       |                             ^~~~~~~~~~~~~~~~~~~~~~~
> > ../drivers/net/ice/base/ice_switch.c:3720:50:
> > 	note: in expansion of macro ‘ice_malloc’
> >   lg_act = (struct ice_aqc_sw_rules_elem *)ice_malloc(hw, rules_size);
> >
> > These errors are mainly because allocated memory is cast to
> > "struct ice_aqc_sw_rules_elem *" but allocated size is less than the size
> > of "struct ice_aqc_sw_rules_elem".
> >
> > "struct ice_aqc_sw_rules_elem" has multiple other structs has unions,
> > based on which one is used allocated memory being less than the size of
> > "struct ice_aqc_sw_rules_elem" is logically correct but compiler is
> > complaining about it.
> >
> > As a solution making sure allocated memory size is at least size of
> > "struct ice_aqc_sw_rules_elem".
> > The function to use the struct is 'ice_aq_sw_rules()', and it already has
> > parameter for size of the rule, allocating more than needed shouldn't
> > cause any problem.
> >
> > Fixes: c7dd15931183 ("net/ice/base: add virtual switch code")
> > Fixes: 02acdce2f553 ("net/ice/base: add MAC filter with marker and counter")
> > Fixes: f89aa3affa9e ("net/ice/base: support removing advanced rule")
> > Cc: stable@dpdk.org
> >
> > Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
> > ---
> > Cc: paul.m.stillwell.jr@intel.com
> > Cc: qi.z.zhang@intel.com
> > Cc: leyi.rong@intel.com
> > Cc: Kevin Traynor <ktraynor@redhat.com>
> > Cc: Ajit Khaparde <ajit.khaparde@broadcom.com>
> > ---
> >  drivers/net/ice/base/ice_switch.c | 30 +++++++++++++++++++++++-------
> >  1 file changed, 23 insertions(+), 7 deletions(-)
> 
> GCC bug ?
> 
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98266
> 
> Bug 98266 - [11 Regression] bogus array subscript is partly outside array bounds on virtual
> inheritance
> 

Disable this gcc warning ?  ;-)

https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=44720996e2d79e47d508b0abe99b931a726a3197

gcc-10: disable 'array-bounds' warning for now

> 
> 
> > --
> > 2.31.1


^ permalink raw reply	[flat|nested] 25+ messages in thread

* Re: [dpdk-stable] [dpdk-dev] [PATCH 3/4] net/ice/base: fix build with gcc11
  2021-05-10 17:04   ` [dpdk-stable] [dpdk-dev] " Wang, Haiyue
  2021-05-10 17:13     ` Wang, Haiyue
@ 2021-05-10 17:28     ` Ferruh Yigit
  2021-05-11  1:59       ` Wang, Haiyue
  2021-05-11  9:08       ` Kevin Traynor
  1 sibling, 2 replies; 25+ messages in thread
From: Ferruh Yigit @ 2021-05-10 17:28 UTC (permalink / raw)
  To: Wang, Haiyue, Yang, Qiming, Zhang, Qi Z, Stillwell Jr, Paul M,
	Lu, Wenzhuo, Rong, Leyi, Shukla, Shivanshu
  Cc: dev, stable, Kevin Traynor, Ajit Khaparde

On 5/10/2021 6:04 PM, Wang, Haiyue wrote:
>> -----Original Message-----
>> From: dev <dev-bounces@dpdk.org> On Behalf Of Ferruh Yigit
>> Sent: Monday, May 10, 2021 23:03
>> To: Yang, Qiming <qiming.yang@intel.com>; Zhang, Qi Z <qi.z.zhang@intel.com>; Stillwell Jr, Paul M
>> <paul.m.stillwell.jr@intel.com>; Lu, Wenzhuo <wenzhuo.lu@intel.com>; Rong, Leyi <leyi.rong@intel.com>;
>> Shukla, Shivanshu <shivanshu.shukla@intel.com>
>> Cc: Yigit, Ferruh <ferruh.yigit@intel.com>; dev@dpdk.org; stable@dpdk.org; Kevin Traynor
>> <ktraynor@redhat.com>; Ajit Khaparde <ajit.khaparde@broadcom.com>
>> Subject: [dpdk-dev] [PATCH 3/4] net/ice/base: fix build with gcc11
>>
>> Reproduced with '--buildtype=debugoptimized' config,
>> compiler version: gcc (GCC) 12.0.0 20210509 (experimental)
>>
>> There are multiple build errors, like:
>> ../drivers/net/ice/base/ice_switch.c: In function ‘ice_add_marker_act’:
>> ../drivers/net/ice/base/ice_switch.c:3727:15:
>>       warning: array subscript ‘struct ice_aqc_sw_rules_elem[0]’
>>       is partly outside array bounds of ‘unsigned char[52]’
>>       [-Warray-bounds]
>>  3727 |         lg_act->type = CPU_TO_LE16(ICE_AQC_SW_RULES_T_LG_ACT);
>>       |               ^~
>> In file included from ../drivers/net/ice/base/ice_type.h:52,
>>                  from ../drivers/net/ice/base/ice_common.h:8,
>>                  from ../drivers/net/ice/base/ice_switch.h:8,
>>                  from ../drivers/net/ice/base/ice_switch.c:5:
>> ../drivers/net/ice/base/ice_osdep.h:209:29:
>>       note: referencing an object of size 52 allocated by ‘rte_zmalloc’
>>   209 | #define ice_malloc(h, s)    rte_zmalloc(NULL, s, 0)
>>       |                             ^~~~~~~~~~~~~~~~~~~~~~~
>> ../drivers/net/ice/base/ice_switch.c:3720:50:
>>       note: in expansion of macro ‘ice_malloc’
>>   lg_act = (struct ice_aqc_sw_rules_elem *)ice_malloc(hw, rules_size);
>>
>> These errors are mainly because allocated memory is cast to
>> "struct ice_aqc_sw_rules_elem *" but allocated size is less than the size
>> of "struct ice_aqc_sw_rules_elem".
>>
>> "struct ice_aqc_sw_rules_elem" has multiple other structs has unions,
>> based on which one is used allocated memory being less than the size of
>> "struct ice_aqc_sw_rules_elem" is logically correct but compiler is
>> complaining about it.
>>
>> As a solution making sure allocated memory size is at least size of
>> "struct ice_aqc_sw_rules_elem".
>> The function to use the struct is 'ice_aq_sw_rules()', and it already has
>> parameter for size of the rule, allocating more than needed shouldn't
>> cause any problem.
>>
>> Fixes: c7dd15931183 ("net/ice/base: add virtual switch code")
>> Fixes: 02acdce2f553 ("net/ice/base: add MAC filter with marker and counter")
>> Fixes: f89aa3affa9e ("net/ice/base: support removing advanced rule")
>> Cc: stable@dpdk.org
>>
>> Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
>> ---
>> Cc: paul.m.stillwell.jr@intel.com
>> Cc: qi.z.zhang@intel.com
>> Cc: leyi.rong@intel.com
>> Cc: Kevin Traynor <ktraynor@redhat.com>
>> Cc: Ajit Khaparde <ajit.khaparde@broadcom.com>
>> ---
>>  drivers/net/ice/base/ice_switch.c | 30 +++++++++++++++++++++++-------
>>  1 file changed, 23 insertions(+), 7 deletions(-)
> 
> GCC bug ?
> 
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98266
> 
> Bug 98266 - [11 Regression] bogus array subscript is partly outside array bounds on virtual inheritance
> 

I am not sure if this is a gcc defect.

Here there is a memory allocated and assigned to "struct ice_aqc_sw_rules_elem
*", but allocated memory size is less than the struct size. As far as I
understand this is the reason of compiler warning.

For this case it may not be problem logically since both who allocates memory
and who uses the memory follows a contract, but there is a mismatch between
pointer type and object. If some other function wants to access all fields of
the struct, it will be out of bound access.





^ permalink raw reply	[flat|nested] 25+ messages in thread

* Re: [dpdk-stable] [dpdk-dev] [PATCH 3/4] net/ice/base: fix build with gcc11
  2021-05-10 17:13     ` Wang, Haiyue
@ 2021-05-10 17:31       ` Ferruh Yigit
  2021-05-10 17:55         ` Stillwell Jr, Paul M
  0 siblings, 1 reply; 25+ messages in thread
From: Ferruh Yigit @ 2021-05-10 17:31 UTC (permalink / raw)
  To: Wang, Haiyue, Yang, Qiming, Zhang, Qi Z, Stillwell Jr, Paul M,
	Lu, Wenzhuo, Rong, Leyi, Shukla, Shivanshu
  Cc: dev, stable, Kevin Traynor, Ajit Khaparde

On 5/10/2021 6:13 PM, Wang, Haiyue wrote:
>> -----Original Message-----
>> From: Wang, Haiyue
>> Sent: Tuesday, May 11, 2021 01:05
>> To: Ferruh Yigit <ferruh.yigit@intel.com>; Yang, Qiming <qiming.yang@intel.com>; Zhang, Qi Z
>> <qi.z.zhang@intel.com>; Stillwell Jr, Paul M <paul.m.stillwell.jr@intel.com>; Lu, Wenzhuo
>> <wenzhuo.lu@intel.com>; Rong, Leyi <leyi.rong@intel.com>; Shukla, Shivanshu
>> <Shivanshu.Shukla@intel.com>
>> Cc: Yigit, Ferruh <ferruh.yigit@intel.com>; dev@dpdk.org; stable@dpdk.org; Kevin Traynor
>> <ktraynor@redhat.com>; Ajit Khaparde <ajit.khaparde@broadcom.com>
>> Subject: RE: [dpdk-dev] [PATCH 3/4] net/ice/base: fix build with gcc11
>>
>>> -----Original Message-----
>>> From: dev <dev-bounces@dpdk.org> On Behalf Of Ferruh Yigit
>>> Sent: Monday, May 10, 2021 23:03
>>> To: Yang, Qiming <qiming.yang@intel.com>; Zhang, Qi Z <qi.z.zhang@intel.com>; Stillwell Jr, Paul M
>>> <paul.m.stillwell.jr@intel.com>; Lu, Wenzhuo <wenzhuo.lu@intel.com>; Rong, Leyi
>> <leyi.rong@intel.com>;
>>> Shukla, Shivanshu <shivanshu.shukla@intel.com>
>>> Cc: Yigit, Ferruh <ferruh.yigit@intel.com>; dev@dpdk.org; stable@dpdk.org; Kevin Traynor
>>> <ktraynor@redhat.com>; Ajit Khaparde <ajit.khaparde@broadcom.com>
>>> Subject: [dpdk-dev] [PATCH 3/4] net/ice/base: fix build with gcc11
>>>
>>> Reproduced with '--buildtype=debugoptimized' config,
>>> compiler version: gcc (GCC) 12.0.0 20210509 (experimental)
>>>
>>> There are multiple build errors, like:
>>> ../drivers/net/ice/base/ice_switch.c: In function ‘ice_add_marker_act’:
>>> ../drivers/net/ice/base/ice_switch.c:3727:15:
>>>     warning: array subscript ‘struct ice_aqc_sw_rules_elem[0]’
>>>     is partly outside array bounds of ‘unsigned char[52]’
>>>     [-Warray-bounds]
>>>  3727 |         lg_act->type = CPU_TO_LE16(ICE_AQC_SW_RULES_T_LG_ACT);
>>>       |               ^~
>>> In file included from ../drivers/net/ice/base/ice_type.h:52,
>>>                  from ../drivers/net/ice/base/ice_common.h:8,
>>>                  from ../drivers/net/ice/base/ice_switch.h:8,
>>>                  from ../drivers/net/ice/base/ice_switch.c:5:
>>> ../drivers/net/ice/base/ice_osdep.h:209:29:
>>>     note: referencing an object of size 52 allocated by ‘rte_zmalloc’
>>>   209 | #define ice_malloc(h, s)    rte_zmalloc(NULL, s, 0)
>>>       |                             ^~~~~~~~~~~~~~~~~~~~~~~
>>> ../drivers/net/ice/base/ice_switch.c:3720:50:
>>>     note: in expansion of macro ‘ice_malloc’
>>>   lg_act = (struct ice_aqc_sw_rules_elem *)ice_malloc(hw, rules_size);
>>>
>>> These errors are mainly because allocated memory is cast to
>>> "struct ice_aqc_sw_rules_elem *" but allocated size is less than the size
>>> of "struct ice_aqc_sw_rules_elem".
>>>
>>> "struct ice_aqc_sw_rules_elem" has multiple other structs has unions,
>>> based on which one is used allocated memory being less than the size of
>>> "struct ice_aqc_sw_rules_elem" is logically correct but compiler is
>>> complaining about it.
>>>
>>> As a solution making sure allocated memory size is at least size of
>>> "struct ice_aqc_sw_rules_elem".
>>> The function to use the struct is 'ice_aq_sw_rules()', and it already has
>>> parameter for size of the rule, allocating more than needed shouldn't
>>> cause any problem.
>>>
>>> Fixes: c7dd15931183 ("net/ice/base: add virtual switch code")
>>> Fixes: 02acdce2f553 ("net/ice/base: add MAC filter with marker and counter")
>>> Fixes: f89aa3affa9e ("net/ice/base: support removing advanced rule")
>>> Cc: stable@dpdk.org
>>>
>>> Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
>>> ---
>>> Cc: paul.m.stillwell.jr@intel.com
>>> Cc: qi.z.zhang@intel.com
>>> Cc: leyi.rong@intel.com
>>> Cc: Kevin Traynor <ktraynor@redhat.com>
>>> Cc: Ajit Khaparde <ajit.khaparde@broadcom.com>
>>> ---
>>>  drivers/net/ice/base/ice_switch.c | 30 +++++++++++++++++++++++-------
>>>  1 file changed, 23 insertions(+), 7 deletions(-)
>>
>> GCC bug ?
>>
>> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98266
>>
>> Bug 98266 - [11 Regression] bogus array subscript is partly outside array bounds on virtual
>> inheritance
>>
> 
> Disable this gcc warning ?  ;-)
> 

That is an option as well but I prefer to fix it warning as much as possible
(unless false positive warnings).

What do you think about the patch? Do you see any problem with it?

> https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=44720996e2d79e47d508b0abe99b931a726a3197
> 
> gcc-10: disable 'array-bounds' warning for now
> 
>>
>>
>>> --
>>> 2.31.1
> 


^ permalink raw reply	[flat|nested] 25+ messages in thread

* Re: [dpdk-stable] [dpdk-dev] [PATCH 3/4] net/ice/base: fix build with gcc11
  2021-05-10 17:31       ` Ferruh Yigit
@ 2021-05-10 17:55         ` Stillwell Jr, Paul M
  0 siblings, 0 replies; 25+ messages in thread
From: Stillwell Jr, Paul M @ 2021-05-10 17:55 UTC (permalink / raw)
  To: Yigit, Ferruh, Wang, Haiyue, Yang, Qiming, Zhang, Qi Z, Lu,
	Wenzhuo, Rong, Leyi, Shukla, Shivanshu
  Cc: dev, stable, Kevin Traynor, Ajit Khaparde

> -----Original Message-----
> From: Yigit, Ferruh <ferruh.yigit@intel.com>
> Sent: Monday, May 10, 2021 10:32 AM
> To: Wang, Haiyue <haiyue.wang@intel.com>; Yang, Qiming
> <qiming.yang@intel.com>; Zhang, Qi Z <qi.z.zhang@intel.com>; Stillwell Jr, Paul
> M <paul.m.stillwell.jr@intel.com>; Lu, Wenzhuo <wenzhuo.lu@intel.com>;
> Rong, Leyi <leyi.rong@intel.com>; Shukla, Shivanshu
> <shivanshu.shukla@intel.com>
> Cc: dev@dpdk.org; stable@dpdk.org; Kevin Traynor <ktraynor@redhat.com>;
> Ajit Khaparde <ajit.khaparde@broadcom.com>
> Subject: Re: [dpdk-dev] [PATCH 3/4] net/ice/base: fix build with gcc11
> 
> On 5/10/2021 6:13 PM, Wang, Haiyue wrote:
> >> -----Original Message-----
> >> From: Wang, Haiyue
> >> Sent: Tuesday, May 11, 2021 01:05
> >> To: Ferruh Yigit <ferruh.yigit@intel.com>; Yang, Qiming
> >> <qiming.yang@intel.com>; Zhang, Qi Z <qi.z.zhang@intel.com>;
> >> Stillwell Jr, Paul M <paul.m.stillwell.jr@intel.com>; Lu, Wenzhuo
> >> <wenzhuo.lu@intel.com>; Rong, Leyi <leyi.rong@intel.com>; Shukla,
> >> Shivanshu <Shivanshu.Shukla@intel.com>
> >> Cc: Yigit, Ferruh <ferruh.yigit@intel.com>; dev@dpdk.org;
> >> stable@dpdk.org; Kevin Traynor <ktraynor@redhat.com>; Ajit Khaparde
> >> <ajit.khaparde@broadcom.com>
> >> Subject: RE: [dpdk-dev] [PATCH 3/4] net/ice/base: fix build with
> >> gcc11
> >>
> >>> -----Original Message-----
> >>> From: dev <dev-bounces@dpdk.org> On Behalf Of Ferruh Yigit
> >>> Sent: Monday, May 10, 2021 23:03
> >>> To: Yang, Qiming <qiming.yang@intel.com>; Zhang, Qi Z
> >>> <qi.z.zhang@intel.com>; Stillwell Jr, Paul M
> >>> <paul.m.stillwell.jr@intel.com>; Lu, Wenzhuo <wenzhuo.lu@intel.com>;
> >>> Rong, Leyi
> >> <leyi.rong@intel.com>;
> >>> Shukla, Shivanshu <shivanshu.shukla@intel.com>
> >>> Cc: Yigit, Ferruh <ferruh.yigit@intel.com>; dev@dpdk.org;
> >>> stable@dpdk.org; Kevin Traynor <ktraynor@redhat.com>; Ajit Khaparde
> >>> <ajit.khaparde@broadcom.com>
> >>> Subject: [dpdk-dev] [PATCH 3/4] net/ice/base: fix build with gcc11
> >>>
> >>> Reproduced with '--buildtype=debugoptimized' config, compiler
> >>> version: gcc (GCC) 12.0.0 20210509 (experimental)
> >>>
> >>> There are multiple build errors, like:
> >>> ../drivers/net/ice/base/ice_switch.c: In function ‘ice_add_marker_act’:
> >>> ../drivers/net/ice/base/ice_switch.c:3727:15:
> >>>     warning: array subscript ‘struct ice_aqc_sw_rules_elem[0]’
> >>>     is partly outside array bounds of ‘unsigned char[52]’
> >>>     [-Warray-bounds]
> >>>  3727 |         lg_act->type = CPU_TO_LE16(ICE_AQC_SW_RULES_T_LG_ACT);
> >>>       |               ^~
> >>> In file included from ../drivers/net/ice/base/ice_type.h:52,
> >>>                  from ../drivers/net/ice/base/ice_common.h:8,
> >>>                  from ../drivers/net/ice/base/ice_switch.h:8,
> >>>                  from ../drivers/net/ice/base/ice_switch.c:5:
> >>> ../drivers/net/ice/base/ice_osdep.h:209:29:
> >>>     note: referencing an object of size 52 allocated by ‘rte_zmalloc’
> >>>   209 | #define ice_malloc(h, s)    rte_zmalloc(NULL, s, 0)
> >>>       |                             ^~~~~~~~~~~~~~~~~~~~~~~
> >>> ../drivers/net/ice/base/ice_switch.c:3720:50:
> >>>     note: in expansion of macro ‘ice_malloc’
> >>>   lg_act = (struct ice_aqc_sw_rules_elem *)ice_malloc(hw,
> >>> rules_size);
> >>>
> >>> These errors are mainly because allocated memory is cast to "struct
> >>> ice_aqc_sw_rules_elem *" but allocated size is less than the size of
> >>> "struct ice_aqc_sw_rules_elem".
> >>>
> >>> "struct ice_aqc_sw_rules_elem" has multiple other structs has
> >>> unions, based on which one is used allocated memory being less than
> >>> the size of "struct ice_aqc_sw_rules_elem" is logically correct but
> >>> compiler is complaining about it.
> >>>
> >>> As a solution making sure allocated memory size is at least size of
> >>> "struct ice_aqc_sw_rules_elem".
> >>> The function to use the struct is 'ice_aq_sw_rules()', and it
> >>> already has parameter for size of the rule, allocating more than
> >>> needed shouldn't cause any problem.
> >>>
> >>> Fixes: c7dd15931183 ("net/ice/base: add virtual switch code")
> >>> Fixes: 02acdce2f553 ("net/ice/base: add MAC filter with marker and
> >>> counter")
> >>> Fixes: f89aa3affa9e ("net/ice/base: support removing advanced rule")
> >>> Cc: stable@dpdk.org
> >>>
> >>> Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
> >>> ---
> >>> Cc: paul.m.stillwell.jr@intel.com
> >>> Cc: qi.z.zhang@intel.com
> >>> Cc: leyi.rong@intel.com
> >>> Cc: Kevin Traynor <ktraynor@redhat.com>
> >>> Cc: Ajit Khaparde <ajit.khaparde@broadcom.com>
> >>> ---
> >>>  drivers/net/ice/base/ice_switch.c | 30
> >>> +++++++++++++++++++++++-------
> >>>  1 file changed, 23 insertions(+), 7 deletions(-)
> >>
> >> GCC bug ?
> >>
> >> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98266
> >>
> >> Bug 98266 - [11 Regression] bogus array subscript is partly outside
> >> array bounds on virtual inheritance
> >>
> >
> > Disable this gcc warning ?  ;-)
> >
> 
> That is an option as well but I prefer to fix it warning as much as possible (unless
> false positive warnings).
> 
> What do you think about the patch? Do you see any problem with it?
> 

The correct way to handle this is to submit a patch to our internal shared code repo where the patch will get reviewed and merged. Once it is merged, then it can go upstream in DPDK.

Paul

> > https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/com
> > mit/?id=44720996e2d79e47d508b0abe99b931a726a3197
> >
> > gcc-10: disable 'array-bounds' warning for now
> >
> >>
> >>
> >>> --
> >>> 2.31.1
> >


^ permalink raw reply	[flat|nested] 25+ messages in thread

* Re: [dpdk-stable] [dpdk-dev] [PATCH 3/4] net/ice/base: fix build with gcc11
  2021-05-10 17:28     ` Ferruh Yigit
@ 2021-05-11  1:59       ` Wang, Haiyue
  2021-05-11  9:33         ` Ferruh Yigit
  2021-05-11  9:08       ` Kevin Traynor
  1 sibling, 1 reply; 25+ messages in thread
From: Wang, Haiyue @ 2021-05-11  1:59 UTC (permalink / raw)
  To: Yigit, Ferruh, Yang, Qiming, Zhang, Qi Z, Stillwell Jr,  Paul M,
	Lu, Wenzhuo, Rong, Leyi, Shukla, Shivanshu
  Cc: dev, stable, Kevin Traynor, Ajit Khaparde

> -----Original Message-----
> From: Yigit, Ferruh <ferruh.yigit@intel.com>
> Sent: Tuesday, May 11, 2021 01:28
> To: Wang, Haiyue <haiyue.wang@intel.com>; Yang, Qiming <qiming.yang@intel.com>; Zhang, Qi Z
> <qi.z.zhang@intel.com>; Stillwell Jr, Paul M <paul.m.stillwell.jr@intel.com>; Lu, Wenzhuo
> <wenzhuo.lu@intel.com>; Rong, Leyi <leyi.rong@intel.com>; Shukla, Shivanshu
> <shivanshu.shukla@intel.com>
> Cc: dev@dpdk.org; stable@dpdk.org; Kevin Traynor <ktraynor@redhat.com>; Ajit Khaparde
> <ajit.khaparde@broadcom.com>
> Subject: Re: [dpdk-dev] [PATCH 3/4] net/ice/base: fix build with gcc11
> 
> On 5/10/2021 6:04 PM, Wang, Haiyue wrote:
> >> -----Original Message-----
> >> From: dev <dev-bounces@dpdk.org> On Behalf Of Ferruh Yigit
> >> Sent: Monday, May 10, 2021 23:03
> >> To: Yang, Qiming <qiming.yang@intel.com>; Zhang, Qi Z <qi.z.zhang@intel.com>; Stillwell Jr, Paul M
> >> <paul.m.stillwell.jr@intel.com>; Lu, Wenzhuo <wenzhuo.lu@intel.com>; Rong, Leyi
> <leyi.rong@intel.com>;
> >> Shukla, Shivanshu <shivanshu.shukla@intel.com>
> >> Cc: Yigit, Ferruh <ferruh.yigit@intel.com>; dev@dpdk.org; stable@dpdk.org; Kevin Traynor
> >> <ktraynor@redhat.com>; Ajit Khaparde <ajit.khaparde@broadcom.com>
> >> Subject: [dpdk-dev] [PATCH 3/4] net/ice/base: fix build with gcc11
> >>
> >> Reproduced with '--buildtype=debugoptimized' config,
> >> compiler version: gcc (GCC) 12.0.0 20210509 (experimental)
> >>
> >> There are multiple build errors, like:
> >> ../drivers/net/ice/base/ice_switch.c: In function ‘ice_add_marker_act’:
> >> ../drivers/net/ice/base/ice_switch.c:3727:15:
> >>       warning: array subscript ‘struct ice_aqc_sw_rules_elem[0]’
> >>       is partly outside array bounds of ‘unsigned char[52]’
> >>       [-Warray-bounds]
> >>  3727 |         lg_act->type = CPU_TO_LE16(ICE_AQC_SW_RULES_T_LG_ACT);
> >>       |               ^~
> >> In file included from ../drivers/net/ice/base/ice_type.h:52,
> >>                  from ../drivers/net/ice/base/ice_common.h:8,
> >>                  from ../drivers/net/ice/base/ice_switch.h:8,
> >>                  from ../drivers/net/ice/base/ice_switch.c:5:
> >> ../drivers/net/ice/base/ice_osdep.h:209:29:
> >>       note: referencing an object of size 52 allocated by ‘rte_zmalloc’
> >>   209 | #define ice_malloc(h, s)    rte_zmalloc(NULL, s, 0)
> >>       |                             ^~~~~~~~~~~~~~~~~~~~~~~
> >> ../drivers/net/ice/base/ice_switch.c:3720:50:
> >>       note: in expansion of macro ‘ice_malloc’
> >>   lg_act = (struct ice_aqc_sw_rules_elem *)ice_malloc(hw, rules_size);
> >>
> >> These errors are mainly because allocated memory is cast to
> >> "struct ice_aqc_sw_rules_elem *" but allocated size is less than the size
> >> of "struct ice_aqc_sw_rules_elem".
> >>
> >> "struct ice_aqc_sw_rules_elem" has multiple other structs has unions,
> >> based on which one is used allocated memory being less than the size of
> >> "struct ice_aqc_sw_rules_elem" is logically correct but compiler is
> >> complaining about it.
> >>
> >> As a solution making sure allocated memory size is at least size of
> >> "struct ice_aqc_sw_rules_elem".
> >> The function to use the struct is 'ice_aq_sw_rules()', and it already has
> >> parameter for size of the rule, allocating more than needed shouldn't
> >> cause any problem.
> >>
> >> Fixes: c7dd15931183 ("net/ice/base: add virtual switch code")
> >> Fixes: 02acdce2f553 ("net/ice/base: add MAC filter with marker and counter")
> >> Fixes: f89aa3affa9e ("net/ice/base: support removing advanced rule")
> >> Cc: stable@dpdk.org
> >>
> >> Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
> >> ---
> >> Cc: paul.m.stillwell.jr@intel.com
> >> Cc: qi.z.zhang@intel.com
> >> Cc: leyi.rong@intel.com
> >> Cc: Kevin Traynor <ktraynor@redhat.com>
> >> Cc: Ajit Khaparde <ajit.khaparde@broadcom.com>
> >> ---
> >>  drivers/net/ice/base/ice_switch.c | 30 +++++++++++++++++++++++-------
> >>  1 file changed, 23 insertions(+), 7 deletions(-)
> >
> > GCC bug ?
> >
> > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98266
> >
> > Bug 98266 - [11 Regression] bogus array subscript is partly outside array bounds on virtual
> inheritance
> >
> 
> I am not sure if this is a gcc defect.
> 
> Here there is a memory allocated and assigned to "struct ice_aqc_sw_rules_elem
> *", but allocated memory size is less than the struct size. As far as I
> understand this is the reason of compiler warning.
> 
> For this case it may not be problem logically since both who allocates memory
> and who uses the memory follows a contract, but there is a mismatch between
> pointer type and object. If some other function wants to access all fields of
> the struct, it will be out of bound access.
> 

That's why they are static function, not API. These functions are designed for
internally using to handle the compact memory layout with different types.

These XXX_SIZE is a helper to get the different memory type size. Of course,
this should be very careful, in other words, as you said: follows a contract. ;-)


#define DUMMY_ETH_HDR_LEN		16
#define ICE_SW_RULE_RX_TX_ETH_HDR_SIZE \
	(offsetof(struct ice_aqc_sw_rules_elem, pdata.lkup_tx_rx.hdr) + \
	 (DUMMY_ETH_HDR_LEN * \
	  sizeof(((struct ice_sw_rule_lkup_rx_tx *)0)->hdr[0])))
#define ICE_SW_RULE_RX_TX_NO_HDR_SIZE \
	(offsetof(struct ice_aqc_sw_rules_elem, pdata.lkup_tx_rx.hdr))
#define ICE_SW_RULE_LG_ACT_SIZE(n) \
	(offsetof(struct ice_aqc_sw_rules_elem, pdata.lg_act.act) + \
	 ((n) * sizeof(((struct ice_sw_rule_lg_act *)0)->act[0])))
#define ICE_SW_RULE_VSI_LIST_SIZE(n) \
	(offsetof(struct ice_aqc_sw_rules_elem, pdata.vsi_list.vsi) + \
	 ((n) * sizeof(((struct ice_sw_rule_vsi_list *)0)->vsi[0])))



> 
> 


^ permalink raw reply	[flat|nested] 25+ messages in thread

* Re: [dpdk-stable] [dpdk-dev] [PATCH 3/4] net/ice/base: fix build with gcc11
  2021-05-10 17:28     ` Ferruh Yigit
  2021-05-11  1:59       ` Wang, Haiyue
@ 2021-05-11  9:08       ` Kevin Traynor
  1 sibling, 0 replies; 25+ messages in thread
From: Kevin Traynor @ 2021-05-11  9:08 UTC (permalink / raw)
  To: Ferruh Yigit, Wang, Haiyue, Yang, Qiming, Zhang, Qi Z,
	Stillwell Jr, Paul M, Lu, Wenzhuo, Rong, Leyi, Shukla, Shivanshu
  Cc: dev, stable, Ajit Khaparde

On 10/05/2021 18:28, Ferruh Yigit wrote:
> On 5/10/2021 6:04 PM, Wang, Haiyue wrote:
>>> -----Original Message-----
>>> From: dev <dev-bounces@dpdk.org> On Behalf Of Ferruh Yigit
>>> Sent: Monday, May 10, 2021 23:03
>>> To: Yang, Qiming <qiming.yang@intel.com>; Zhang, Qi Z <qi.z.zhang@intel.com>; Stillwell Jr, Paul M
>>> <paul.m.stillwell.jr@intel.com>; Lu, Wenzhuo <wenzhuo.lu@intel.com>; Rong, Leyi <leyi.rong@intel.com>;
>>> Shukla, Shivanshu <shivanshu.shukla@intel.com>
>>> Cc: Yigit, Ferruh <ferruh.yigit@intel.com>; dev@dpdk.org; stable@dpdk.org; Kevin Traynor
>>> <ktraynor@redhat.com>; Ajit Khaparde <ajit.khaparde@broadcom.com>
>>> Subject: [dpdk-dev] [PATCH 3/4] net/ice/base: fix build with gcc11
>>>
>>> Reproduced with '--buildtype=debugoptimized' config,
>>> compiler version: gcc (GCC) 12.0.0 20210509 (experimental)
>>>
>>> There are multiple build errors, like:
>>> ../drivers/net/ice/base/ice_switch.c: In function ‘ice_add_marker_act’:
>>> ../drivers/net/ice/base/ice_switch.c:3727:15:
>>>       warning: array subscript ‘struct ice_aqc_sw_rules_elem[0]’
>>>       is partly outside array bounds of ‘unsigned char[52]’
>>>       [-Warray-bounds]
>>>  3727 |         lg_act->type = CPU_TO_LE16(ICE_AQC_SW_RULES_T_LG_ACT);
>>>       |               ^~
>>> In file included from ../drivers/net/ice/base/ice_type.h:52,
>>>                  from ../drivers/net/ice/base/ice_common.h:8,
>>>                  from ../drivers/net/ice/base/ice_switch.h:8,
>>>                  from ../drivers/net/ice/base/ice_switch.c:5:
>>> ../drivers/net/ice/base/ice_osdep.h:209:29:
>>>       note: referencing an object of size 52 allocated by ‘rte_zmalloc’
>>>   209 | #define ice_malloc(h, s)    rte_zmalloc(NULL, s, 0)
>>>       |                             ^~~~~~~~~~~~~~~~~~~~~~~
>>> ../drivers/net/ice/base/ice_switch.c:3720:50:
>>>       note: in expansion of macro ‘ice_malloc’
>>>   lg_act = (struct ice_aqc_sw_rules_elem *)ice_malloc(hw, rules_size);
>>>
>>> These errors are mainly because allocated memory is cast to
>>> "struct ice_aqc_sw_rules_elem *" but allocated size is less than the size
>>> of "struct ice_aqc_sw_rules_elem".
>>>
>>> "struct ice_aqc_sw_rules_elem" has multiple other structs has unions,
>>> based on which one is used allocated memory being less than the size of
>>> "struct ice_aqc_sw_rules_elem" is logically correct but compiler is
>>> complaining about it.
>>>
>>> As a solution making sure allocated memory size is at least size of
>>> "struct ice_aqc_sw_rules_elem".
>>> The function to use the struct is 'ice_aq_sw_rules()', and it already has
>>> parameter for size of the rule, allocating more than needed shouldn't
>>> cause any problem.
>>>

Bugzilla ID: 678

>>> Fixes: c7dd15931183 ("net/ice/base: add virtual switch code")
>>> Fixes: 02acdce2f553 ("net/ice/base: add MAC filter with marker and counter")
>>> Fixes: f89aa3affa9e ("net/ice/base: support removing advanced rule")
>>> Cc: stable@dpdk.org
>>>

If I apply on head of dpdk-next-net on F34 I still get some of these
warnings in ice. I'm using 'meson --werror -Dtests=false build'.

$ gcc --version
gcc (GCC) 11.1.1 20210428 (Red Hat 11.1.1-1)

>>> Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
>>> ---
>>> Cc: paul.m.stillwell.jr@intel.com
>>> Cc: qi.z.zhang@intel.com
>>> Cc: leyi.rong@intel.com
>>> Cc: Kevin Traynor <ktraynor@redhat.com>
>>> Cc: Ajit Khaparde <ajit.khaparde@broadcom.com>
>>> ---
>>>  drivers/net/ice/base/ice_switch.c | 30 +++++++++++++++++++++++-------
>>>  1 file changed, 23 insertions(+), 7 deletions(-)
>>
>> GCC bug ?
>>
>> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98266
>>
>> Bug 98266 - [11 Regression] bogus array subscript is partly outside array bounds on virtual inheritance

This gcc defect is fixed in PR middle-end/98266 which was first in in
11.0.1-0.2 [1]. Currently Fedora 34 uses 11.1.1-1 and includes this PR.

[1] https://src.fedoraproject.org/rpms/gcc/blob/rawhide/f/gcc.spec#_3246

>>
> > I am not sure if this is a gcc defect.
> 
> Here there is a memory allocated and assigned to "struct ice_aqc_sw_rules_elem
> *", but allocated memory size is less than the struct size. As far as I
> understand this is the reason of compiler warning.
> 
> For this case it may not be problem logically since both who allocates memory
> and who uses the memory follows a contract, but there is a mismatch between
> pointer type and object. If some other function wants to access all fields of
> the struct, it will be out of bound access.
> 
> 
> 
> 


^ permalink raw reply	[flat|nested] 25+ messages in thread

* Re: [dpdk-stable] [dpdk-dev] [PATCH 3/4] net/ice/base: fix build with gcc11
  2021-05-11  1:59       ` Wang, Haiyue
@ 2021-05-11  9:33         ` Ferruh Yigit
  0 siblings, 0 replies; 25+ messages in thread
From: Ferruh Yigit @ 2021-05-11  9:33 UTC (permalink / raw)
  To: Wang, Haiyue, Yang, Qiming, Zhang, Qi Z, Stillwell Jr, Paul M,
	Lu, Wenzhuo, Rong, Leyi, Shukla, Shivanshu
  Cc: dev, stable, Kevin Traynor, Ajit Khaparde

On 5/11/2021 2:59 AM, Wang, Haiyue wrote:
>> -----Original Message-----
>> From: Yigit, Ferruh <ferruh.yigit@intel.com>
>> Sent: Tuesday, May 11, 2021 01:28
>> To: Wang, Haiyue <haiyue.wang@intel.com>; Yang, Qiming <qiming.yang@intel.com>; Zhang, Qi Z
>> <qi.z.zhang@intel.com>; Stillwell Jr, Paul M <paul.m.stillwell.jr@intel.com>; Lu, Wenzhuo
>> <wenzhuo.lu@intel.com>; Rong, Leyi <leyi.rong@intel.com>; Shukla, Shivanshu
>> <shivanshu.shukla@intel.com>
>> Cc: dev@dpdk.org; stable@dpdk.org; Kevin Traynor <ktraynor@redhat.com>; Ajit Khaparde
>> <ajit.khaparde@broadcom.com>
>> Subject: Re: [dpdk-dev] [PATCH 3/4] net/ice/base: fix build with gcc11
>>
>> On 5/10/2021 6:04 PM, Wang, Haiyue wrote:
>>>> -----Original Message-----
>>>> From: dev <dev-bounces@dpdk.org> On Behalf Of Ferruh Yigit
>>>> Sent: Monday, May 10, 2021 23:03
>>>> To: Yang, Qiming <qiming.yang@intel.com>; Zhang, Qi Z <qi.z.zhang@intel.com>; Stillwell Jr, Paul M
>>>> <paul.m.stillwell.jr@intel.com>; Lu, Wenzhuo <wenzhuo.lu@intel.com>; Rong, Leyi
>> <leyi.rong@intel.com>;
>>>> Shukla, Shivanshu <shivanshu.shukla@intel.com>
>>>> Cc: Yigit, Ferruh <ferruh.yigit@intel.com>; dev@dpdk.org; stable@dpdk.org; Kevin Traynor
>>>> <ktraynor@redhat.com>; Ajit Khaparde <ajit.khaparde@broadcom.com>
>>>> Subject: [dpdk-dev] [PATCH 3/4] net/ice/base: fix build with gcc11
>>>>
>>>> Reproduced with '--buildtype=debugoptimized' config,
>>>> compiler version: gcc (GCC) 12.0.0 20210509 (experimental)
>>>>
>>>> There are multiple build errors, like:
>>>> ../drivers/net/ice/base/ice_switch.c: In function ‘ice_add_marker_act’:
>>>> ../drivers/net/ice/base/ice_switch.c:3727:15:
>>>>       warning: array subscript ‘struct ice_aqc_sw_rules_elem[0]’
>>>>       is partly outside array bounds of ‘unsigned char[52]’
>>>>       [-Warray-bounds]
>>>>  3727 |         lg_act->type = CPU_TO_LE16(ICE_AQC_SW_RULES_T_LG_ACT);
>>>>       |               ^~
>>>> In file included from ../drivers/net/ice/base/ice_type.h:52,
>>>>                  from ../drivers/net/ice/base/ice_common.h:8,
>>>>                  from ../drivers/net/ice/base/ice_switch.h:8,
>>>>                  from ../drivers/net/ice/base/ice_switch.c:5:
>>>> ../drivers/net/ice/base/ice_osdep.h:209:29:
>>>>       note: referencing an object of size 52 allocated by ‘rte_zmalloc’
>>>>   209 | #define ice_malloc(h, s)    rte_zmalloc(NULL, s, 0)
>>>>       |                             ^~~~~~~~~~~~~~~~~~~~~~~
>>>> ../drivers/net/ice/base/ice_switch.c:3720:50:
>>>>       note: in expansion of macro ‘ice_malloc’
>>>>   lg_act = (struct ice_aqc_sw_rules_elem *)ice_malloc(hw, rules_size);
>>>>
>>>> These errors are mainly because allocated memory is cast to
>>>> "struct ice_aqc_sw_rules_elem *" but allocated size is less than the size
>>>> of "struct ice_aqc_sw_rules_elem".
>>>>
>>>> "struct ice_aqc_sw_rules_elem" has multiple other structs has unions,
>>>> based on which one is used allocated memory being less than the size of
>>>> "struct ice_aqc_sw_rules_elem" is logically correct but compiler is
>>>> complaining about it.
>>>>
>>>> As a solution making sure allocated memory size is at least size of
>>>> "struct ice_aqc_sw_rules_elem".
>>>> The function to use the struct is 'ice_aq_sw_rules()', and it already has
>>>> parameter for size of the rule, allocating more than needed shouldn't
>>>> cause any problem.
>>>>
>>>> Fixes: c7dd15931183 ("net/ice/base: add virtual switch code")
>>>> Fixes: 02acdce2f553 ("net/ice/base: add MAC filter with marker and counter")
>>>> Fixes: f89aa3affa9e ("net/ice/base: support removing advanced rule")
>>>> Cc: stable@dpdk.org
>>>>
>>>> Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
>>>> ---
>>>> Cc: paul.m.stillwell.jr@intel.com
>>>> Cc: qi.z.zhang@intel.com
>>>> Cc: leyi.rong@intel.com
>>>> Cc: Kevin Traynor <ktraynor@redhat.com>
>>>> Cc: Ajit Khaparde <ajit.khaparde@broadcom.com>
>>>> ---
>>>>  drivers/net/ice/base/ice_switch.c | 30 +++++++++++++++++++++++-------
>>>>  1 file changed, 23 insertions(+), 7 deletions(-)
>>>
>>> GCC bug ?
>>>
>>> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98266
>>>
>>> Bug 98266 - [11 Regression] bogus array subscript is partly outside array bounds on virtual
>> inheritance
>>>
>>
>> I am not sure if this is a gcc defect.
>>
>> Here there is a memory allocated and assigned to "struct ice_aqc_sw_rules_elem
>> *", but allocated memory size is less than the struct size. As far as I
>> understand this is the reason of compiler warning.
>>
>> For this case it may not be problem logically since both who allocates memory
>> and who uses the memory follows a contract, but there is a mismatch between
>> pointer type and object. If some other function wants to access all fields of
>> the struct, it will be out of bound access.
>>
> 
> That's why they are static function, not API. These functions are designed for
> internally using to handle the compact memory layout with different types.
> 
> These XXX_SIZE is a helper to get the different memory type size. Of course,
> this should be very careful, in other words, as you said: follows a contract. ;-)
> 

As said above the code is logically correct (at least as far as I can see), but
it can be dangerous from programming perspective.

> 
> #define DUMMY_ETH_HDR_LEN               16
> #define ICE_SW_RULE_RX_TX_ETH_HDR_SIZE \
>         (offsetof(struct ice_aqc_sw_rules_elem, pdata.lkup_tx_rx.hdr) + \
>          (DUMMY_ETH_HDR_LEN * \
>           sizeof(((struct ice_sw_rule_lkup_rx_tx *)0)->hdr[0])))
> #define ICE_SW_RULE_RX_TX_NO_HDR_SIZE \
>         (offsetof(struct ice_aqc_sw_rules_elem, pdata.lkup_tx_rx.hdr))
> #define ICE_SW_RULE_LG_ACT_SIZE(n) \
>         (offsetof(struct ice_aqc_sw_rules_elem, pdata.lg_act.act) + \
>          ((n) * sizeof(((struct ice_sw_rule_lg_act *)0)->act[0])))
> #define ICE_SW_RULE_VSI_LIST_SIZE(n) \
>         (offsetof(struct ice_aqc_sw_rules_elem, pdata.vsi_list.vsi) + \
>          ((n) * sizeof(((struct ice_sw_rule_vsi_list *)0)->vsi[0])))
> 
> 
> 
>>
>>
> 


^ permalink raw reply	[flat|nested] 25+ messages in thread

* [dpdk-stable] [PATCH v2 1/4] net/bnx2x: fix build with gcc11
  2021-05-10 15:03 [dpdk-stable] [PATCH 1/4] net/bnx2x: fix build with gcc11 Ferruh Yigit
                   ` (2 preceding siblings ...)
  2021-05-10 15:03 ` [dpdk-stable] [PATCH 4/4] net/tap: " Ferruh Yigit
@ 2021-05-11 11:44 ` Ferruh Yigit
  2021-05-11 11:44   ` [dpdk-stable] [PATCH v2 2/4] " Ferruh Yigit
                     ` (3 more replies)
  2021-05-11 13:14 ` [dpdk-stable] [PATCH v3 " Ferruh Yigit
  4 siblings, 4 replies; 25+ messages in thread
From: Ferruh Yigit @ 2021-05-11 11:44 UTC (permalink / raw)
  To: Rasesh Mody, Shahed Shaikh
  Cc: Ferruh Yigit, dev, stable, Kevin Traynor, Ajit Khaparde

Reproduced with '--buildtype=debugoptimized' config,
compiler version: gcc (GCC) 12.0.0 20210509 (experimental)

Build error:
In file included from ../drivers/net/bnx2x/bnx2x_rxtx.c:8:
../drivers/net/bnx2x/bnx2x_rxtx.c: In function ‘bnx2x_upd_rx_prod_fast’:
../drivers/net/bnx2x/bnx2x.h:1528:35:
    warning: ‘rx_prods’ is used uninitialized [-Wuninitialized]
 #define REG_WR32(sc, offset, val) bnx2x_reg_write32(sc, (offset), val)
                                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../drivers/net/bnx2x/bnx2x.h:1531:33:
	note: in expansion of macro ‘REG_WR32’
 1531 | #define REG_WR(sc, offset, val) REG_WR32(sc, offset, val)
      |                                 ^~~~~~~~
../drivers/net/bnx2x/bnx2x_rxtx.c:331:9:
	note: in expansion of macro ‘REG_WR’
  331 |         REG_WR(sc, fp->ustorm_rx_prods_offset, val[0]);
      |         ^~~~~~
../drivers/net/bnx2x/bnx2x_rxtx.c:324:40: note: ‘rx_prods’ declared here
  324 |         struct ustorm_eth_rx_producers rx_prods = { 0 };
      |                                        ^~~~~~~~

REG_WR32 requires 'uint32_t', use union instead of cast to 'uint32_t'.

Fixes: 38dff79ba736 ("net/bnx2x: update HSI")
Cc: stable@dpdk.org

Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
---
Cc: rmody@marvell.com
Cc: Kevin Traynor <ktraynor@redhat.com>
Cc: Ajit Khaparde <ajit.khaparde@broadcom.com>

v2:
* fix struct initialization as '{0}' -> '{{0}}'
---
 drivers/net/bnx2x/bnx2x_rxtx.c | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/drivers/net/bnx2x/bnx2x_rxtx.c b/drivers/net/bnx2x/bnx2x_rxtx.c
index 57e2ce504587..2b1760229051 100644
--- a/drivers/net/bnx2x/bnx2x_rxtx.c
+++ b/drivers/net/bnx2x/bnx2x_rxtx.c
@@ -321,14 +321,15 @@ static inline void
 bnx2x_upd_rx_prod_fast(struct bnx2x_softc *sc, struct bnx2x_fastpath *fp,
 		uint16_t rx_bd_prod, uint16_t rx_cq_prod)
 {
-	struct ustorm_eth_rx_producers rx_prods = { 0 };
-	uint32_t *val = NULL;
+	union {
+		struct ustorm_eth_rx_producers rx_prods;
+		uint32_t val;
+	} val = { {0} };
 
-	rx_prods.bd_prod  = rx_bd_prod;
-	rx_prods.cqe_prod = rx_cq_prod;
+	val.rx_prods.bd_prod  = rx_bd_prod;
+	val.rx_prods.cqe_prod = rx_cq_prod;
 
-	val = (uint32_t *)&rx_prods;
-	REG_WR(sc, fp->ustorm_rx_prods_offset, val[0]);
+	REG_WR(sc, fp->ustorm_rx_prods_offset, val.val);
 }
 
 static uint16_t
-- 
2.31.1


^ permalink raw reply	[flat|nested] 25+ messages in thread

* [dpdk-stable] [PATCH v2 2/4] net/bnx2x: fix build with gcc11
  2021-05-11 11:44 ` [dpdk-stable] [PATCH v2 1/4] net/bnx2x: " Ferruh Yigit
@ 2021-05-11 11:44   ` Ferruh Yigit
  2021-05-11 12:27     ` Kevin Traynor
  2021-05-11 11:44   ` [dpdk-stable] [PATCH v2 3/4] net/ice/base: " Ferruh Yigit
                     ` (2 subsequent siblings)
  3 siblings, 1 reply; 25+ messages in thread
From: Ferruh Yigit @ 2021-05-11 11:44 UTC (permalink / raw)
  To: Rasesh Mody, Shahed Shaikh
  Cc: Ferruh Yigit, dev, stable, Kevin Traynor, Ajit Khaparde

Reproduced with '--buildtype=debugoptimized' config,
compiler version: gcc (GCC) 12.0.0 20210509 (experimental)

Build error:
In file included from ../drivers/net/bnx2x/bnx2x.c:16:
../drivers/net/bnx2x/bnx2x.c: In function ‘bnx2x_hc_ack_sb’:
../drivers/net/bnx2x/bnx2x.h:1528:35:
         warning: ‘igu_ack’ is used uninitialized [-Wuninitialized]
 #define REG_WR32(sc, offset, val) bnx2x_reg_write32(sc, (offset), val)
                                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../drivers/net/bnx2x/bnx2x.h:1531:33:
	note: in expansion of macro ‘REG_WR32’
 1531 | #define REG_WR(sc, offset, val) REG_WR32(sc, offset, val)
      |                                 ^~~~~~~~
../drivers/net/bnx2x/bnx2x.h:1916:9: note: in expansion of macro ‘REG_WR’
 1916 |         REG_WR(sc, hc_addr, *val);
      |         ^~~~~~
../drivers/net/bnx2x/bnx2x.h:1905:33: note: ‘igu_ack’ declared here
 1905 |         struct igu_ack_register igu_ack;
      |                                 ^~~~~~~

REG_WR32 requires 'uint32_t', use union instead of cast to 'uint32_t'.

Fixes: 38dff79ba736 ("net/bnx2x: update HSI")
Cc: stable@dpdk.org

Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
---
Cc: rmody@marvell.com
Cc: Kevin Traynor <ktraynor@redhat.com>
Cc: Ajit Khaparde <ajit.khaparde@broadcom.com>
---
 drivers/net/bnx2x/bnx2x.h | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/drivers/net/bnx2x/bnx2x.h b/drivers/net/bnx2x/bnx2x.h
index e13ab1557418..80d19cbfd665 100644
--- a/drivers/net/bnx2x/bnx2x.h
+++ b/drivers/net/bnx2x/bnx2x.h
@@ -1902,18 +1902,19 @@ bnx2x_hc_ack_sb(struct bnx2x_softc *sc, uint8_t sb_id, uint8_t storm,
 {
 	uint32_t hc_addr = (HC_REG_COMMAND_REG + SC_PORT(sc) * 32 +
 			COMMAND_REG_INT_ACK);
-	struct igu_ack_register igu_ack;
-	uint32_t *val = NULL;
+	union {
+		struct igu_ack_register igu_ack;
+		uint32_t val;
+	} val;
 
-	igu_ack.status_block_index = index;
-	igu_ack.sb_id_and_flags =
+	val.igu_ack.status_block_index = index;
+	val.igu_ack.sb_id_and_flags =
 		((sb_id << IGU_ACK_REGISTER_STATUS_BLOCK_ID_SHIFT) |
 		 (storm << IGU_ACK_REGISTER_STORM_ID_SHIFT) |
 		 (update << IGU_ACK_REGISTER_UPDATE_INDEX_SHIFT) |
 		 (op << IGU_ACK_REGISTER_INTERRUPT_MODE_SHIFT));
 
-	val = (uint32_t *)&igu_ack;
-	REG_WR(sc, hc_addr, *val);
+	REG_WR(sc, hc_addr, val.val);
 
 	/* Make sure that ACK is written */
 	mb();
-- 
2.31.1


^ permalink raw reply	[flat|nested] 25+ messages in thread

* [dpdk-stable] [PATCH v2 3/4] net/ice/base: fix build with gcc11
  2021-05-11 11:44 ` [dpdk-stable] [PATCH v2 1/4] net/bnx2x: " Ferruh Yigit
  2021-05-11 11:44   ` [dpdk-stable] [PATCH v2 2/4] " Ferruh Yigit
@ 2021-05-11 11:44   ` Ferruh Yigit
  2021-05-11 11:44   ` [dpdk-stable] [PATCH v2 4/4] net/tap: " Ferruh Yigit
  2021-05-11 12:26   ` [dpdk-stable] [PATCH v2 1/4] net/bnx2x: " Kevin Traynor
  3 siblings, 0 replies; 25+ messages in thread
From: Ferruh Yigit @ 2021-05-11 11:44 UTC (permalink / raw)
  To: Qiming Yang, Qi Zhang, Paul M Stillwell Jr, Wenzhuo Lu,
	Shivanshu Shukla, Leyi Rong
  Cc: Ferruh Yigit, dev, stable, Kevin Traynor, Ajit Khaparde

Reproduced with '--buildtype=debugoptimized' config,
compiler version: gcc (GCC) 12.0.0 20210509 (experimental)

There are multiple build errors, like:
../drivers/net/ice/base/ice_switch.c: In function ‘ice_add_marker_act’:
../drivers/net/ice/base/ice_switch.c:3727:15:
	warning: array subscript ‘struct ice_aqc_sw_rules_elem[0]’
	is partly outside array bounds of ‘unsigned char[52]’
	[-Warray-bounds]
 3727 |         lg_act->type = CPU_TO_LE16(ICE_AQC_SW_RULES_T_LG_ACT);
      |               ^~
In file included from ../drivers/net/ice/base/ice_type.h:52,
                 from ../drivers/net/ice/base/ice_common.h:8,
                 from ../drivers/net/ice/base/ice_switch.h:8,
                 from ../drivers/net/ice/base/ice_switch.c:5:
../drivers/net/ice/base/ice_osdep.h:209:29:
	note: referencing an object of size 52 allocated by ‘rte_zmalloc’
  209 | #define ice_malloc(h, s)    rte_zmalloc(NULL, s, 0)
      |                             ^~~~~~~~~~~~~~~~~~~~~~~
../drivers/net/ice/base/ice_switch.c:3720:50:
	note: in expansion of macro ‘ice_malloc’
  lg_act = (struct ice_aqc_sw_rules_elem *)ice_malloc(hw, rules_size);

These errors are mainly because allocated memory is cast to
"struct ice_aqc_sw_rules_elem *" but allocated size is less than the size
of "struct ice_aqc_sw_rules_elem".

"struct ice_aqc_sw_rules_elem" has multiple other structs has unions,
based on which one is used allocated memory being less than the size of
"struct ice_aqc_sw_rules_elem" is logically correct but compiler is
complaining about it.

Since the allocation is done explicitly and both producer and consumer
are internal, safe to ignore the warnings. Also to prevent any side
affect disabling the compiler warning for now, until proper fix done.

Reducing the warning disable to gcc >= 11 version.

Bugzilla ID: 678
Fixes: c7dd15931183 ("net/ice/base: add virtual switch code")
Fixes: 02acdce2f553 ("net/ice/base: add MAC filter with marker and counter")
Fixes: f89aa3affa9e ("net/ice/base: support removing advanced rule")
Cc: stable@dpdk.org

Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
---
Cc: paul.m.stillwell.jr@intel.com
Cc: qi.z.zhang@intel.com
Cc: leyi.rong@intel.com
Cc: Kevin Traynor <ktraynor@redhat.com>
Cc: Ajit Khaparde <ajit.khaparde@broadcom.com>

v2:
* Kevin reported more occurrences, the concern is to have more as the
  gcc version updated. And as the size of changes increases, the risk of
  unexpected side affect also increases.
  So disabling the 'array-bounds' warning for this release for
  gcc >= 11.0.0.
---
 drivers/net/ice/base/meson.build | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/drivers/net/ice/base/meson.build b/drivers/net/ice/base/meson.build
index 6c548a99775c..3305e5dd1822 100644
--- a/drivers/net/ice/base/meson.build
+++ b/drivers/net/ice/base/meson.build
@@ -23,6 +23,11 @@ error_cflags = [
         '-Wno-unused-parameter',
 ]
 
+# Bugzilla ID: 678
+if (toolchain == 'gcc' and cc.version().version_compare('>=11.0.0'))
+    error_cflags += ['-Wno-array-bounds']
+endif
+
 if is_windows and cc.get_id() != 'clang'
     cflags += ['-fno-asynchronous-unwind-tables']
 endif
-- 
2.31.1


^ permalink raw reply	[flat|nested] 25+ messages in thread

* [dpdk-stable] [PATCH v2 4/4] net/tap: fix build with gcc11
  2021-05-11 11:44 ` [dpdk-stable] [PATCH v2 1/4] net/bnx2x: " Ferruh Yigit
  2021-05-11 11:44   ` [dpdk-stable] [PATCH v2 2/4] " Ferruh Yigit
  2021-05-11 11:44   ` [dpdk-stable] [PATCH v2 3/4] net/ice/base: " Ferruh Yigit
@ 2021-05-11 11:44   ` Ferruh Yigit
  2021-05-11 12:26   ` [dpdk-stable] [PATCH v2 1/4] net/bnx2x: " Kevin Traynor
  3 siblings, 0 replies; 25+ messages in thread
From: Ferruh Yigit @ 2021-05-11 11:44 UTC (permalink / raw)
  To: Keith Wiles, Olga Shern, Pascal Mazon; +Cc: Ferruh Yigit, dev, stable

Reproduced with '--buildtype=debugoptimized' config,
compiler version: gcc (GCC) 12.0.0 20210509 (experimental)

There are multiple build errors, like:
In file included from ../drivers/net/tap/tap_flow.c:13:
In function ‘rte_jhash_2hashes’,
    inlined from ‘rte_jhash’ at ../lib/hash/rte_jhash.h:284:2,
    inlined from ‘tap_flow_set_handle’ at
	../drivers/net/tap/tap_flow.c:1306:12,
    inlined from ‘rss_enable’ at ../drivers/net/tap/tap_flow.c:1909:3,
    inlined from ‘priv_flow_process’ at
	../drivers/net/tap/tap_flow.c:1228:11:
../lib/hash/rte_jhash.h:238:9:
	warning: ‘flow’ may be used uninitialized [-Wmaybe-uninitialized]
  238 |         __rte_jhash_2hashes(key, length, pc, pb, 1);
      |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../drivers/net/tap/tap_flow.c: In function ‘priv_flow_process’:
../lib/hash/rte_jhash.h:81:1: note: by argument 1 of type ‘const void *’
	to ‘__rte_jhash_2hashes.constprop’ declared here
 81 | __rte_jhash_2hashes(const void *key, uint32_t length, uint32_t *pc,
    | ^~~~~~~~~~~~~~~~~~~
../drivers/net/tap/tap_flow.c:1028:1: note: ‘flow’ declared here
 1028 | priv_flow_process(struct pmd_internals *pmd,
      | ^~~~~~~~~~~~~~~~~

Fix strict aliasing rule by using union.

Fixes: de96fe68ae95 ("net/tap: add basic flow API patterns and actions")
Cc: stable@dpdk.org

Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
---
Cc: pascal.mazon@6wind.com
---
 drivers/net/tap/tap_flow.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/drivers/net/tap/tap_flow.c b/drivers/net/tap/tap_flow.c
index 1ee6fb30ab2d..c4f60ce98e5e 100644
--- a/drivers/net/tap/tap_flow.c
+++ b/drivers/net/tap/tap_flow.c
@@ -1300,10 +1300,16 @@ tap_flow_validate(struct rte_eth_dev *dev,
 static void
 tap_flow_set_handle(struct rte_flow *flow)
 {
+	union {
+		struct rte_flow *flow;
+		const void *key;
+	} tmp;
 	uint32_t handle = 0;
 
+	tmp.flow = flow;
+
 	if (sizeof(flow) > 4)
-		handle = rte_jhash(&flow, sizeof(flow), 1);
+		handle = rte_jhash(tmp.key, sizeof(flow), 1);
 	else
 		handle = (uintptr_t)flow;
 	/* must be at least 1 to avoid letting the kernel choose one for us */
-- 
2.31.1


^ permalink raw reply	[flat|nested] 25+ messages in thread

* Re: [dpdk-stable] [PATCH v2 1/4] net/bnx2x: fix build with gcc11
  2021-05-11 11:44 ` [dpdk-stable] [PATCH v2 1/4] net/bnx2x: " Ferruh Yigit
                     ` (2 preceding siblings ...)
  2021-05-11 11:44   ` [dpdk-stable] [PATCH v2 4/4] net/tap: " Ferruh Yigit
@ 2021-05-11 12:26   ` Kevin Traynor
  3 siblings, 0 replies; 25+ messages in thread
From: Kevin Traynor @ 2021-05-11 12:26 UTC (permalink / raw)
  To: Ferruh Yigit, Rasesh Mody, Shahed Shaikh; +Cc: dev, stable, Ajit Khaparde

On 11/05/2021 12:44, Ferruh Yigit wrote:
> Reproduced with '--buildtype=debugoptimized' config,
> compiler version: gcc (GCC) 12.0.0 20210509 (experimental)
> 
> Build error:
> In file included from ../drivers/net/bnx2x/bnx2x_rxtx.c:8:
> ../drivers/net/bnx2x/bnx2x_rxtx.c: In function ‘bnx2x_upd_rx_prod_fast’:
> ../drivers/net/bnx2x/bnx2x.h:1528:35:
>     warning: ‘rx_prods’ is used uninitialized [-Wuninitialized]
>  #define REG_WR32(sc, offset, val) bnx2x_reg_write32(sc, (offset), val)
>                                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> ../drivers/net/bnx2x/bnx2x.h:1531:33:
> 	note: in expansion of macro ‘REG_WR32’
>  1531 | #define REG_WR(sc, offset, val) REG_WR32(sc, offset, val)
>       |                                 ^~~~~~~~
> ../drivers/net/bnx2x/bnx2x_rxtx.c:331:9:
> 	note: in expansion of macro ‘REG_WR’
>   331 |         REG_WR(sc, fp->ustorm_rx_prods_offset, val[0]);
>       |         ^~~~~~
> ../drivers/net/bnx2x/bnx2x_rxtx.c:324:40: note: ‘rx_prods’ declared here
>   324 |         struct ustorm_eth_rx_producers rx_prods = { 0 };
>       |                                        ^~~~~~~~
> 
> REG_WR32 requires 'uint32_t', use union instead of cast to 'uint32_t'.
> 

Bugzilla ID: 692

> Fixes: 38dff79ba736 ("net/bnx2x: update HSI")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>

Acked-by: Kevin Traynor <ktraynor@redhat.com>

> ---
> Cc: rmody@marvell.com
> Cc: Kevin Traynor <ktraynor@redhat.com>
> Cc: Ajit Khaparde <ajit.khaparde@broadcom.com>
> 
> v2:
> * fix struct initialization as '{0}' -> '{{0}}'

(I won't be surprised if some compiler in the ci complains, but ok on
F34, gcc 11.1.1 and RHEL8.3, gcc 8.3.1)

> ---
>  drivers/net/bnx2x/bnx2x_rxtx.c | 13 +++++++------
>  1 file changed, 7 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/net/bnx2x/bnx2x_rxtx.c b/drivers/net/bnx2x/bnx2x_rxtx.c
> index 57e2ce504587..2b1760229051 100644
> --- a/drivers/net/bnx2x/bnx2x_rxtx.c
> +++ b/drivers/net/bnx2x/bnx2x_rxtx.c
> @@ -321,14 +321,15 @@ static inline void
>  bnx2x_upd_rx_prod_fast(struct bnx2x_softc *sc, struct bnx2x_fastpath *fp,
>  		uint16_t rx_bd_prod, uint16_t rx_cq_prod)
>  {
> -	struct ustorm_eth_rx_producers rx_prods = { 0 };
> -	uint32_t *val = NULL;
> +	union {
> +		struct ustorm_eth_rx_producers rx_prods;
> +		uint32_t val;
> +	} val = { {0} };
>  
> -	rx_prods.bd_prod  = rx_bd_prod;
> -	rx_prods.cqe_prod = rx_cq_prod;
> +	val.rx_prods.bd_prod  = rx_bd_prod;
> +	val.rx_prods.cqe_prod = rx_cq_prod;
>  
> -	val = (uint32_t *)&rx_prods;
> -	REG_WR(sc, fp->ustorm_rx_prods_offset, val[0]);
> +	REG_WR(sc, fp->ustorm_rx_prods_offset, val.val);
>  }
>  
>  static uint16_t
> 


^ permalink raw reply	[flat|nested] 25+ messages in thread

* Re: [dpdk-stable] [PATCH v2 2/4] net/bnx2x: fix build with gcc11
  2021-05-11 11:44   ` [dpdk-stable] [PATCH v2 2/4] " Ferruh Yigit
@ 2021-05-11 12:27     ` Kevin Traynor
  0 siblings, 0 replies; 25+ messages in thread
From: Kevin Traynor @ 2021-05-11 12:27 UTC (permalink / raw)
  To: Ferruh Yigit, Rasesh Mody, Shahed Shaikh; +Cc: dev, stable, Ajit Khaparde

On 11/05/2021 12:44, Ferruh Yigit wrote:
> Reproduced with '--buildtype=debugoptimized' config,
> compiler version: gcc (GCC) 12.0.0 20210509 (experimental)
> 
> Build error:
> In file included from ../drivers/net/bnx2x/bnx2x.c:16:
> ../drivers/net/bnx2x/bnx2x.c: In function ‘bnx2x_hc_ack_sb’:
> ../drivers/net/bnx2x/bnx2x.h:1528:35:
>          warning: ‘igu_ack’ is used uninitialized [-Wuninitialized]
>  #define REG_WR32(sc, offset, val) bnx2x_reg_write32(sc, (offset), val)
>                                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> ../drivers/net/bnx2x/bnx2x.h:1531:33:
> 	note: in expansion of macro ‘REG_WR32’
>  1531 | #define REG_WR(sc, offset, val) REG_WR32(sc, offset, val)
>       |                                 ^~~~~~~~
> ../drivers/net/bnx2x/bnx2x.h:1916:9: note: in expansion of macro ‘REG_WR’
>  1916 |         REG_WR(sc, hc_addr, *val);
>       |         ^~~~~~
> ../drivers/net/bnx2x/bnx2x.h:1905:33: note: ‘igu_ack’ declared here
>  1905 |         struct igu_ack_register igu_ack;
>       |                                 ^~~~~~~
> 
> REG_WR32 requires 'uint32_t', use union instead of cast to 'uint32_t'.
> 

Bugzilla ID: 692

> Fixes: 38dff79ba736 ("net/bnx2x: update HSI")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>

Acked-by: Kevin Traynor <ktraynor@redhat.com>

> ---
> Cc: rmody@marvell.com
> Cc: Kevin Traynor <ktraynor@redhat.com>
> Cc: Ajit Khaparde <ajit.khaparde@broadcom.com>
> ---
>  drivers/net/bnx2x/bnx2x.h | 13 +++++++------
>  1 file changed, 7 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/net/bnx2x/bnx2x.h b/drivers/net/bnx2x/bnx2x.h
> index e13ab1557418..80d19cbfd665 100644
> --- a/drivers/net/bnx2x/bnx2x.h
> +++ b/drivers/net/bnx2x/bnx2x.h
> @@ -1902,18 +1902,19 @@ bnx2x_hc_ack_sb(struct bnx2x_softc *sc, uint8_t sb_id, uint8_t storm,
>  {
>  	uint32_t hc_addr = (HC_REG_COMMAND_REG + SC_PORT(sc) * 32 +
>  			COMMAND_REG_INT_ACK);
> -	struct igu_ack_register igu_ack;
> -	uint32_t *val = NULL;
> +	union {
> +		struct igu_ack_register igu_ack;
> +		uint32_t val;
> +	} val;
>  
> -	igu_ack.status_block_index = index;
> -	igu_ack.sb_id_and_flags =
> +	val.igu_ack.status_block_index = index;
> +	val.igu_ack.sb_id_and_flags =
>  		((sb_id << IGU_ACK_REGISTER_STATUS_BLOCK_ID_SHIFT) |
>  		 (storm << IGU_ACK_REGISTER_STORM_ID_SHIFT) |
>  		 (update << IGU_ACK_REGISTER_UPDATE_INDEX_SHIFT) |
>  		 (op << IGU_ACK_REGISTER_INTERRUPT_MODE_SHIFT));
>  
> -	val = (uint32_t *)&igu_ack;
> -	REG_WR(sc, hc_addr, *val);
> +	REG_WR(sc, hc_addr, val.val);
>  
>  	/* Make sure that ACK is written */
>  	mb();
> 


^ permalink raw reply	[flat|nested] 25+ messages in thread

* Re: [dpdk-stable] [dpdk-dev] [PATCH 4/4] net/tap: fix build with gcc11
  2021-05-10 15:03 ` [dpdk-stable] [PATCH 4/4] net/tap: " Ferruh Yigit
@ 2021-05-11 12:28   ` Kevin Traynor
  0 siblings, 0 replies; 25+ messages in thread
From: Kevin Traynor @ 2021-05-11 12:28 UTC (permalink / raw)
  To: Ferruh Yigit, Keith Wiles, Pascal Mazon, Olga Shern; +Cc: dev, stable

On 10/05/2021 16:03, Ferruh Yigit wrote:
> Reproduced with '--buildtype=debugoptimized' config,
> compiler version: gcc (GCC) 12.0.0 20210509 (experimental)
> 
> There are multiple build errors, like:
> In file included from ../drivers/net/tap/tap_flow.c:13:
> In function ‘rte_jhash_2hashes’,
>     inlined from ‘rte_jhash’ at ../lib/hash/rte_jhash.h:284:2,
>     inlined from ‘tap_flow_set_handle’ at
> 	../drivers/net/tap/tap_flow.c:1306:12,
>     inlined from ‘rss_enable’ at ../drivers/net/tap/tap_flow.c:1909:3,
>     inlined from ‘priv_flow_process’ at
> 	../drivers/net/tap/tap_flow.c:1228:11:
> ../lib/hash/rte_jhash.h:238:9:
> 	warning: ‘flow’ may be used uninitialized [-Wmaybe-uninitialized]
>   238 |         __rte_jhash_2hashes(key, length, pc, pb, 1);
>       |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> ../drivers/net/tap/tap_flow.c: In function ‘priv_flow_process’:
> ../lib/hash/rte_jhash.h:81:1: note: by argument 1 of type ‘const void *’
> 	to ‘__rte_jhash_2hashes.constprop’ declared here
>  81 | __rte_jhash_2hashes(const void *key, uint32_t length, uint32_t *pc,
>     | ^~~~~~~~~~~~~~~~~~~
> ../drivers/net/tap/tap_flow.c:1028:1: note: ‘flow’ declared here
>  1028 | priv_flow_process(struct pmd_internals *pmd,
>       | ^~~~~~~~~~~~~~~~~
> 
> Fix strict aliasing rule by using union.
> 

Bugzilla ID: 690

> Fixes: de96fe68ae95 ("net/tap: add basic flow API patterns and actions")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>

Acked-by: Kevin Traynor <ktraynor@redhat.com>

> ---
> Cc: pascal.mazon@6wind.com
> ---
>  drivers/net/tap/tap_flow.c | 8 +++++++-
>  1 file changed, 7 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/net/tap/tap_flow.c b/drivers/net/tap/tap_flow.c
> index 1ee6fb30ab2d..c4f60ce98e5e 100644
> --- a/drivers/net/tap/tap_flow.c
> +++ b/drivers/net/tap/tap_flow.c
> @@ -1300,10 +1300,16 @@ tap_flow_validate(struct rte_eth_dev *dev,
>  static void
>  tap_flow_set_handle(struct rte_flow *flow)
>  {
> +	union {
> +		struct rte_flow *flow;
> +		const void *key;
> +	} tmp;
>  	uint32_t handle = 0;
>  
> +	tmp.flow = flow;
> +
>  	if (sizeof(flow) > 4)
> -		handle = rte_jhash(&flow, sizeof(flow), 1);
> +		handle = rte_jhash(tmp.key, sizeof(flow), 1);
>  	else
>  		handle = (uintptr_t)flow;
>  	/* must be at least 1 to avoid letting the kernel choose one for us */
> 


^ permalink raw reply	[flat|nested] 25+ messages in thread

* [dpdk-stable] [PATCH v3 1/4] net/bnx2x: fix build with gcc11
  2021-05-10 15:03 [dpdk-stable] [PATCH 1/4] net/bnx2x: fix build with gcc11 Ferruh Yigit
                   ` (3 preceding siblings ...)
  2021-05-11 11:44 ` [dpdk-stable] [PATCH v2 1/4] net/bnx2x: " Ferruh Yigit
@ 2021-05-11 13:14 ` Ferruh Yigit
  2021-05-11 13:14   ` [dpdk-stable] [PATCH v3 2/4] " Ferruh Yigit
                     ` (3 more replies)
  4 siblings, 4 replies; 25+ messages in thread
From: Ferruh Yigit @ 2021-05-11 13:14 UTC (permalink / raw)
  To: Rasesh Mody, Shahed Shaikh
  Cc: Ferruh Yigit, dev, stable, Kevin Traynor, Ajit Khaparde

Reproduced with '--buildtype=debugoptimized' config,
compiler version: gcc (GCC) 12.0.0 20210509 (experimental)

Build error:
In file included from ../drivers/net/bnx2x/bnx2x_rxtx.c:8:
../drivers/net/bnx2x/bnx2x_rxtx.c: In function ‘bnx2x_upd_rx_prod_fast’:
../drivers/net/bnx2x/bnx2x.h:1528:35:
    warning: ‘rx_prods’ is used uninitialized [-Wuninitialized]
 #define REG_WR32(sc, offset, val) bnx2x_reg_write32(sc, (offset), val)
                                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../drivers/net/bnx2x/bnx2x.h:1531:33:
	note: in expansion of macro ‘REG_WR32’
 1531 | #define REG_WR(sc, offset, val) REG_WR32(sc, offset, val)
      |                                 ^~~~~~~~
../drivers/net/bnx2x/bnx2x_rxtx.c:331:9:
	note: in expansion of macro ‘REG_WR’
  331 |         REG_WR(sc, fp->ustorm_rx_prods_offset, val[0]);
      |         ^~~~~~
../drivers/net/bnx2x/bnx2x_rxtx.c:324:40: note: ‘rx_prods’ declared here
  324 |         struct ustorm_eth_rx_producers rx_prods = { 0 };
      |                                        ^~~~~~~~

REG_WR32 requires 'uint32_t', use union instead of cast to 'uint32_t'.

Bugzilla ID: 692
Fixes: 38dff79ba736 ("net/bnx2x: update HSI")
Cc: stable@dpdk.org

Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
Acked-by: Kevin Traynor <ktraynor@redhat.com>
---
Cc: rmody@marvell.com
Cc: Kevin Traynor <ktraynor@redhat.com>
Cc: Ajit Khaparde <ajit.khaparde@broadcom.com>

v2:
* fix struct initialization as '{0}' -> '{{0}}'

v3:
* Add missing Bugzilla tag
---
 drivers/net/bnx2x/bnx2x_rxtx.c | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/drivers/net/bnx2x/bnx2x_rxtx.c b/drivers/net/bnx2x/bnx2x_rxtx.c
index 57e2ce504587..2b1760229051 100644
--- a/drivers/net/bnx2x/bnx2x_rxtx.c
+++ b/drivers/net/bnx2x/bnx2x_rxtx.c
@@ -321,14 +321,15 @@ static inline void
 bnx2x_upd_rx_prod_fast(struct bnx2x_softc *sc, struct bnx2x_fastpath *fp,
 		uint16_t rx_bd_prod, uint16_t rx_cq_prod)
 {
-	struct ustorm_eth_rx_producers rx_prods = { 0 };
-	uint32_t *val = NULL;
+	union {
+		struct ustorm_eth_rx_producers rx_prods;
+		uint32_t val;
+	} val = { {0} };
 
-	rx_prods.bd_prod  = rx_bd_prod;
-	rx_prods.cqe_prod = rx_cq_prod;
+	val.rx_prods.bd_prod  = rx_bd_prod;
+	val.rx_prods.cqe_prod = rx_cq_prod;
 
-	val = (uint32_t *)&rx_prods;
-	REG_WR(sc, fp->ustorm_rx_prods_offset, val[0]);
+	REG_WR(sc, fp->ustorm_rx_prods_offset, val.val);
 }
 
 static uint16_t
-- 
2.31.1


^ permalink raw reply	[flat|nested] 25+ messages in thread

* [dpdk-stable] [PATCH v3 2/4] net/bnx2x: fix build with gcc11
  2021-05-11 13:14 ` [dpdk-stable] [PATCH v3 " Ferruh Yigit
@ 2021-05-11 13:14   ` Ferruh Yigit
  2021-05-11 13:14   ` [dpdk-stable] [PATCH v3 3/4] net/ice/base: " Ferruh Yigit
                     ` (2 subsequent siblings)
  3 siblings, 0 replies; 25+ messages in thread
From: Ferruh Yigit @ 2021-05-11 13:14 UTC (permalink / raw)
  To: Rasesh Mody, Shahed Shaikh
  Cc: Ferruh Yigit, dev, stable, Kevin Traynor, Ajit Khaparde

Reproduced with '--buildtype=debugoptimized' config,
compiler version: gcc (GCC) 12.0.0 20210509 (experimental)

Build error:
In file included from ../drivers/net/bnx2x/bnx2x.c:16:
../drivers/net/bnx2x/bnx2x.c: In function ‘bnx2x_hc_ack_sb’:
../drivers/net/bnx2x/bnx2x.h:1528:35:
         warning: ‘igu_ack’ is used uninitialized [-Wuninitialized]
 #define REG_WR32(sc, offset, val) bnx2x_reg_write32(sc, (offset), val)
                                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../drivers/net/bnx2x/bnx2x.h:1531:33:
	note: in expansion of macro ‘REG_WR32’
 1531 | #define REG_WR(sc, offset, val) REG_WR32(sc, offset, val)
      |                                 ^~~~~~~~
../drivers/net/bnx2x/bnx2x.h:1916:9: note: in expansion of macro ‘REG_WR’
 1916 |         REG_WR(sc, hc_addr, *val);
      |         ^~~~~~
../drivers/net/bnx2x/bnx2x.h:1905:33: note: ‘igu_ack’ declared here
 1905 |         struct igu_ack_register igu_ack;
      |                                 ^~~~~~~

REG_WR32 requires 'uint32_t', use union instead of cast to 'uint32_t'.

Bugzilla ID: 692
Fixes: 38dff79ba736 ("net/bnx2x: update HSI")
Cc: stable@dpdk.org

Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
Acked-by: Kevin Traynor <ktraynor@redhat.com>
---
Cc: rmody@marvell.com
Cc: Kevin Traynor <ktraynor@redhat.com>
Cc: Ajit Khaparde <ajit.khaparde@broadcom.com>

v3:
* Add missing Bugzilla tag
---
 drivers/net/bnx2x/bnx2x.h | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/drivers/net/bnx2x/bnx2x.h b/drivers/net/bnx2x/bnx2x.h
index e13ab1557418..80d19cbfd665 100644
--- a/drivers/net/bnx2x/bnx2x.h
+++ b/drivers/net/bnx2x/bnx2x.h
@@ -1902,18 +1902,19 @@ bnx2x_hc_ack_sb(struct bnx2x_softc *sc, uint8_t sb_id, uint8_t storm,
 {
 	uint32_t hc_addr = (HC_REG_COMMAND_REG + SC_PORT(sc) * 32 +
 			COMMAND_REG_INT_ACK);
-	struct igu_ack_register igu_ack;
-	uint32_t *val = NULL;
+	union {
+		struct igu_ack_register igu_ack;
+		uint32_t val;
+	} val;
 
-	igu_ack.status_block_index = index;
-	igu_ack.sb_id_and_flags =
+	val.igu_ack.status_block_index = index;
+	val.igu_ack.sb_id_and_flags =
 		((sb_id << IGU_ACK_REGISTER_STATUS_BLOCK_ID_SHIFT) |
 		 (storm << IGU_ACK_REGISTER_STORM_ID_SHIFT) |
 		 (update << IGU_ACK_REGISTER_UPDATE_INDEX_SHIFT) |
 		 (op << IGU_ACK_REGISTER_INTERRUPT_MODE_SHIFT));
 
-	val = (uint32_t *)&igu_ack;
-	REG_WR(sc, hc_addr, *val);
+	REG_WR(sc, hc_addr, val.val);
 
 	/* Make sure that ACK is written */
 	mb();
-- 
2.31.1


^ permalink raw reply	[flat|nested] 25+ messages in thread

* [dpdk-stable] [PATCH v3 3/4] net/ice/base: fix build with gcc11
  2021-05-11 13:14 ` [dpdk-stable] [PATCH v3 " Ferruh Yigit
  2021-05-11 13:14   ` [dpdk-stable] [PATCH v3 2/4] " Ferruh Yigit
@ 2021-05-11 13:14   ` Ferruh Yigit
  2021-05-12  7:43     ` Wang, Haiyue
  2021-05-11 13:14   ` [dpdk-stable] [PATCH v3 4/4] net/tap: " Ferruh Yigit
  2021-05-12 13:04   ` [dpdk-stable] [PATCH v3 1/4] net/bnx2x: " Ferruh Yigit
  3 siblings, 1 reply; 25+ messages in thread
From: Ferruh Yigit @ 2021-05-11 13:14 UTC (permalink / raw)
  To: Qiming Yang, Qi Zhang, Paul M Stillwell Jr, Wenzhuo Lu,
	Shivanshu Shukla, Leyi Rong
  Cc: Ferruh Yigit, dev, stable, Kevin Traynor, Ajit Khaparde

Reproduced with '--buildtype=debugoptimized' config,
compiler version: gcc (GCC) 12.0.0 20210509 (experimental)

There are multiple build errors, like:
../drivers/net/ice/base/ice_switch.c: In function ‘ice_add_marker_act’:
../drivers/net/ice/base/ice_switch.c:3727:15:
	warning: array subscript ‘struct ice_aqc_sw_rules_elem[0]’
	is partly outside array bounds of ‘unsigned char[52]’
	[-Warray-bounds]
 3727 |         lg_act->type = CPU_TO_LE16(ICE_AQC_SW_RULES_T_LG_ACT);
      |               ^~
In file included from ../drivers/net/ice/base/ice_type.h:52,
                 from ../drivers/net/ice/base/ice_common.h:8,
                 from ../drivers/net/ice/base/ice_switch.h:8,
                 from ../drivers/net/ice/base/ice_switch.c:5:
../drivers/net/ice/base/ice_osdep.h:209:29:
	note: referencing an object of size 52 allocated by ‘rte_zmalloc’
  209 | #define ice_malloc(h, s)    rte_zmalloc(NULL, s, 0)
      |                             ^~~~~~~~~~~~~~~~~~~~~~~
../drivers/net/ice/base/ice_switch.c:3720:50:
	note: in expansion of macro ‘ice_malloc’
  lg_act = (struct ice_aqc_sw_rules_elem *)ice_malloc(hw, rules_size);

These errors are mainly because allocated memory is cast to
"struct ice_aqc_sw_rules_elem *" but allocated size is less than the size
of "struct ice_aqc_sw_rules_elem".

"struct ice_aqc_sw_rules_elem" has multiple other structs has unions,
based on which one is used allocated memory being less than the size of
"struct ice_aqc_sw_rules_elem" is logically correct but compiler is
complaining about it.

Since the allocation is done explicitly and both producer and consumer
are internal, safe to ignore the warnings. Also to prevent any side
affect disabling the compiler warning for now, until proper fix done.

Reducing the warning disable to gcc >= 11 version.

Bugzilla ID: 678
Fixes: c7dd15931183 ("net/ice/base: add virtual switch code")
Fixes: 02acdce2f553 ("net/ice/base: add MAC filter with marker and counter")
Fixes: f89aa3affa9e ("net/ice/base: support removing advanced rule")
Cc: stable@dpdk.org

Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
---
Cc: paul.m.stillwell.jr@intel.com
Cc: qi.z.zhang@intel.com
Cc: leyi.rong@intel.com
Cc: Kevin Traynor <ktraynor@redhat.com>
Cc: Ajit Khaparde <ajit.khaparde@broadcom.com>

v2:
* Kevin reported more occurrences, the concern is to have more as the
  gcc version updated. And as the size of changes increases, the risk of
  unexpected side affect also increases.
  So disabling the 'array-bounds' warning for this release for
  gcc >= 11.0.0.
---
 drivers/net/ice/base/meson.build | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/drivers/net/ice/base/meson.build b/drivers/net/ice/base/meson.build
index 6c548a99775c..3305e5dd1822 100644
--- a/drivers/net/ice/base/meson.build
+++ b/drivers/net/ice/base/meson.build
@@ -23,6 +23,11 @@ error_cflags = [
         '-Wno-unused-parameter',
 ]
 
+# Bugzilla ID: 678
+if (toolchain == 'gcc' and cc.version().version_compare('>=11.0.0'))
+    error_cflags += ['-Wno-array-bounds']
+endif
+
 if is_windows and cc.get_id() != 'clang'
     cflags += ['-fno-asynchronous-unwind-tables']
 endif
-- 
2.31.1


^ permalink raw reply	[flat|nested] 25+ messages in thread

* [dpdk-stable] [PATCH v3 4/4] net/tap: fix build with gcc11
  2021-05-11 13:14 ` [dpdk-stable] [PATCH v3 " Ferruh Yigit
  2021-05-11 13:14   ` [dpdk-stable] [PATCH v3 2/4] " Ferruh Yigit
  2021-05-11 13:14   ` [dpdk-stable] [PATCH v3 3/4] net/ice/base: " Ferruh Yigit
@ 2021-05-11 13:14   ` Ferruh Yigit
  2021-05-12 13:04   ` [dpdk-stable] [PATCH v3 1/4] net/bnx2x: " Ferruh Yigit
  3 siblings, 0 replies; 25+ messages in thread
From: Ferruh Yigit @ 2021-05-11 13:14 UTC (permalink / raw)
  To: Keith Wiles, Pascal Mazon, Olga Shern
  Cc: Ferruh Yigit, dev, stable, Kevin Traynor

Reproduced with '--buildtype=debugoptimized' config,
compiler version: gcc (GCC) 12.0.0 20210509 (experimental)

There are multiple build errors, like:
In file included from ../drivers/net/tap/tap_flow.c:13:
In function ‘rte_jhash_2hashes’,
    inlined from ‘rte_jhash’ at ../lib/hash/rte_jhash.h:284:2,
    inlined from ‘tap_flow_set_handle’ at
	../drivers/net/tap/tap_flow.c:1306:12,
    inlined from ‘rss_enable’ at ../drivers/net/tap/tap_flow.c:1909:3,
    inlined from ‘priv_flow_process’ at
	../drivers/net/tap/tap_flow.c:1228:11:
../lib/hash/rte_jhash.h:238:9:
	warning: ‘flow’ may be used uninitialized [-Wmaybe-uninitialized]
  238 |         __rte_jhash_2hashes(key, length, pc, pb, 1);
      |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../drivers/net/tap/tap_flow.c: In function ‘priv_flow_process’:
../lib/hash/rte_jhash.h:81:1: note: by argument 1 of type ‘const void *’
	to ‘__rte_jhash_2hashes.constprop’ declared here
 81 | __rte_jhash_2hashes(const void *key, uint32_t length, uint32_t *pc,
    | ^~~~~~~~~~~~~~~~~~~
../drivers/net/tap/tap_flow.c:1028:1: note: ‘flow’ declared here
 1028 | priv_flow_process(struct pmd_internals *pmd,
      | ^~~~~~~~~~~~~~~~~

Fix strict aliasing rule by using union.

Bugzilla ID: 690
Fixes: de96fe68ae95 ("net/tap: add basic flow API patterns and actions")
Cc: stable@dpdk.org

Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
Acked-by: Kevin Traynor <ktraynor@redhat.com>
---
Cc: pascal.mazon@6wind.com

v3:
* Add missing Bugzilla tag
---
 drivers/net/tap/tap_flow.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/drivers/net/tap/tap_flow.c b/drivers/net/tap/tap_flow.c
index 1ee6fb30ab2d..c4f60ce98e5e 100644
--- a/drivers/net/tap/tap_flow.c
+++ b/drivers/net/tap/tap_flow.c
@@ -1300,10 +1300,16 @@ tap_flow_validate(struct rte_eth_dev *dev,
 static void
 tap_flow_set_handle(struct rte_flow *flow)
 {
+	union {
+		struct rte_flow *flow;
+		const void *key;
+	} tmp;
 	uint32_t handle = 0;
 
+	tmp.flow = flow;
+
 	if (sizeof(flow) > 4)
-		handle = rte_jhash(&flow, sizeof(flow), 1);
+		handle = rte_jhash(tmp.key, sizeof(flow), 1);
 	else
 		handle = (uintptr_t)flow;
 	/* must be at least 1 to avoid letting the kernel choose one for us */
-- 
2.31.1


^ permalink raw reply	[flat|nested] 25+ messages in thread

* Re: [dpdk-stable] [PATCH v3 3/4] net/ice/base: fix build with gcc11
  2021-05-11 13:14   ` [dpdk-stable] [PATCH v3 3/4] net/ice/base: " Ferruh Yigit
@ 2021-05-12  7:43     ` Wang, Haiyue
  0 siblings, 0 replies; 25+ messages in thread
From: Wang, Haiyue @ 2021-05-12  7:43 UTC (permalink / raw)
  To: Yigit, Ferruh, Yang, Qiming, Zhang, Qi Z, Stillwell Jr,  Paul M,
	Lu, Wenzhuo, Shukla, Shivanshu, Rong, Leyi
  Cc: Yigit, Ferruh, dev, stable, Kevin Traynor, Ajit Khaparde

> -----Original Message-----
> From: stable <stable-bounces@dpdk.org> On Behalf Of Ferruh Yigit
> Sent: Tuesday, May 11, 2021 21:15
> To: Yang, Qiming <qiming.yang@intel.com>; Zhang, Qi Z <qi.z.zhang@intel.com>; Stillwell Jr, Paul M
> <paul.m.stillwell.jr@intel.com>; Lu, Wenzhuo <wenzhuo.lu@intel.com>; Shukla, Shivanshu
> <shivanshu.shukla@intel.com>; Rong, Leyi <leyi.rong@intel.com>
> Cc: Yigit, Ferruh <ferruh.yigit@intel.com>; dev@dpdk.org; stable@dpdk.org; Kevin Traynor
> <ktraynor@redhat.com>; Ajit Khaparde <ajit.khaparde@broadcom.com>
> Subject: [dpdk-stable] [PATCH v3 3/4] net/ice/base: fix build with gcc11
> 
> Reproduced with '--buildtype=debugoptimized' config,
> compiler version: gcc (GCC) 12.0.0 20210509 (experimental)
> 
> There are multiple build errors, like:
> ../drivers/net/ice/base/ice_switch.c: In function ‘ice_add_marker_act’:
> ../drivers/net/ice/base/ice_switch.c:3727:15:
> 	warning: array subscript ‘struct ice_aqc_sw_rules_elem[0]’
> 	is partly outside array bounds of ‘unsigned char[52]’
> 	[-Warray-bounds]
>  3727 |         lg_act->type = CPU_TO_LE16(ICE_AQC_SW_RULES_T_LG_ACT);
>       |               ^~
> In file included from ../drivers/net/ice/base/ice_type.h:52,
>                  from ../drivers/net/ice/base/ice_common.h:8,
>                  from ../drivers/net/ice/base/ice_switch.h:8,
>                  from ../drivers/net/ice/base/ice_switch.c:5:
> ../drivers/net/ice/base/ice_osdep.h:209:29:
> 	note: referencing an object of size 52 allocated by ‘rte_zmalloc’
>   209 | #define ice_malloc(h, s)    rte_zmalloc(NULL, s, 0)
>       |                             ^~~~~~~~~~~~~~~~~~~~~~~
> ../drivers/net/ice/base/ice_switch.c:3720:50:
> 	note: in expansion of macro ‘ice_malloc’
>   lg_act = (struct ice_aqc_sw_rules_elem *)ice_malloc(hw, rules_size);
> 
> These errors are mainly because allocated memory is cast to
> "struct ice_aqc_sw_rules_elem *" but allocated size is less than the size
> of "struct ice_aqc_sw_rules_elem".
> 
> "struct ice_aqc_sw_rules_elem" has multiple other structs has unions,
> based on which one is used allocated memory being less than the size of
> "struct ice_aqc_sw_rules_elem" is logically correct but compiler is
> complaining about it.
> 
> Since the allocation is done explicitly and both producer and consumer
> are internal, safe to ignore the warnings. Also to prevent any side
> affect disabling the compiler warning for now, until proper fix done.
> 
> Reducing the warning disable to gcc >= 11 version.
> 
> Bugzilla ID: 678
> Fixes: c7dd15931183 ("net/ice/base: add virtual switch code")
> Fixes: 02acdce2f553 ("net/ice/base: add MAC filter with marker and counter")
> Fixes: f89aa3affa9e ("net/ice/base: support removing advanced rule")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
> ---
> Cc: paul.m.stillwell.jr@intel.com
> Cc: qi.z.zhang@intel.com
> Cc: leyi.rong@intel.com
> Cc: Kevin Traynor <ktraynor@redhat.com>
> Cc: Ajit Khaparde <ajit.khaparde@broadcom.com>
> 
> v2:
> * Kevin reported more occurrences, the concern is to have more as the
>   gcc version updated. And as the size of changes increases, the risk of
>   unexpected side affect also increases.
>   So disabling the 'array-bounds' warning for this release for
>   gcc >= 11.0.0.
> ---
>  drivers/net/ice/base/meson.build | 5 +++++
>  1 file changed, 5 insertions(+)
> 

Acked-by: Haiyue Wang <haiyue.wang@intel.com>


And finally, we need to fix the code as: 
https://patchwork.ozlabs.org/project/intel-wired-lan/patch/20210413190345.GA304933@embeddedor/
 "By the way, we are about to be able to globally enable -Warray-bounds and,
 this is one of the last out-of-bounds warnings in linux-next."

> diff --git a/drivers/net/ice/base/meson.build b/drivers/net/ice/base/meson.build
> index 6c548a99775c..3305e5dd1822 100644
> --- a/drivers/net/ice/base/meson.build
> +++ b/drivers/net/ice/base/meson.build
> @@ -23,6 +23,11 @@ error_cflags = [
>          '-Wno-unused-parameter',
>  ]
> 
> +# Bugzilla ID: 678
> +if (toolchain == 'gcc' and cc.version().version_compare('>=11.0.0'))
> +    error_cflags += ['-Wno-array-bounds']
> +endif
> +
>  if is_windows and cc.get_id() != 'clang'
>      cflags += ['-fno-asynchronous-unwind-tables']
>  endif
> --
> 2.31.1


^ permalink raw reply	[flat|nested] 25+ messages in thread

* Re: [dpdk-stable] [PATCH v3 1/4] net/bnx2x: fix build with gcc11
  2021-05-11 13:14 ` [dpdk-stable] [PATCH v3 " Ferruh Yigit
                     ` (2 preceding siblings ...)
  2021-05-11 13:14   ` [dpdk-stable] [PATCH v3 4/4] net/tap: " Ferruh Yigit
@ 2021-05-12 13:04   ` Ferruh Yigit
  3 siblings, 0 replies; 25+ messages in thread
From: Ferruh Yigit @ 2021-05-12 13:04 UTC (permalink / raw)
  To: Rasesh Mody, Shahed Shaikh; +Cc: dev, stable, Kevin Traynor, Ajit Khaparde

On 5/11/2021 2:14 PM, Ferruh Yigit wrote:
> Reproduced with '--buildtype=debugoptimized' config,
> compiler version: gcc (GCC) 12.0.0 20210509 (experimental)
> 
> Build error:
> In file included from ../drivers/net/bnx2x/bnx2x_rxtx.c:8:
> ../drivers/net/bnx2x/bnx2x_rxtx.c: In function ‘bnx2x_upd_rx_prod_fast’:
> ../drivers/net/bnx2x/bnx2x.h:1528:35:
>     warning: ‘rx_prods’ is used uninitialized [-Wuninitialized]
>  #define REG_WR32(sc, offset, val) bnx2x_reg_write32(sc, (offset), val)
>                                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> ../drivers/net/bnx2x/bnx2x.h:1531:33:
> 	note: in expansion of macro ‘REG_WR32’
>  1531 | #define REG_WR(sc, offset, val) REG_WR32(sc, offset, val)
>       |                                 ^~~~~~~~
> ../drivers/net/bnx2x/bnx2x_rxtx.c:331:9:
> 	note: in expansion of macro ‘REG_WR’
>   331 |         REG_WR(sc, fp->ustorm_rx_prods_offset, val[0]);
>       |         ^~~~~~
> ../drivers/net/bnx2x/bnx2x_rxtx.c:324:40: note: ‘rx_prods’ declared here
>   324 |         struct ustorm_eth_rx_producers rx_prods = { 0 };
>       |                                        ^~~~~~~~
> 
> REG_WR32 requires 'uint32_t', use union instead of cast to 'uint32_t'.
> 
> Bugzilla ID: 692
> Fixes: 38dff79ba736 ("net/bnx2x: update HSI")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
> Acked-by: Kevin Traynor <ktraynor@redhat.com>

Series applied to dpdk-next-net/main, thanks.


^ permalink raw reply	[flat|nested] 25+ messages in thread

end of thread, other threads:[~2021-05-12 13:04 UTC | newest]

Thread overview: 25+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-05-10 15:03 [dpdk-stable] [PATCH 1/4] net/bnx2x: fix build with gcc11 Ferruh Yigit
2021-05-10 15:03 ` [dpdk-stable] [PATCH 2/4] " Ferruh Yigit
2021-05-10 15:03 ` [dpdk-stable] [PATCH 3/4] net/ice/base: " Ferruh Yigit
2021-05-10 17:04   ` [dpdk-stable] [dpdk-dev] " Wang, Haiyue
2021-05-10 17:13     ` Wang, Haiyue
2021-05-10 17:31       ` Ferruh Yigit
2021-05-10 17:55         ` Stillwell Jr, Paul M
2021-05-10 17:28     ` Ferruh Yigit
2021-05-11  1:59       ` Wang, Haiyue
2021-05-11  9:33         ` Ferruh Yigit
2021-05-11  9:08       ` Kevin Traynor
2021-05-10 15:03 ` [dpdk-stable] [PATCH 4/4] net/tap: " Ferruh Yigit
2021-05-11 12:28   ` [dpdk-stable] [dpdk-dev] " Kevin Traynor
2021-05-11 11:44 ` [dpdk-stable] [PATCH v2 1/4] net/bnx2x: " Ferruh Yigit
2021-05-11 11:44   ` [dpdk-stable] [PATCH v2 2/4] " Ferruh Yigit
2021-05-11 12:27     ` Kevin Traynor
2021-05-11 11:44   ` [dpdk-stable] [PATCH v2 3/4] net/ice/base: " Ferruh Yigit
2021-05-11 11:44   ` [dpdk-stable] [PATCH v2 4/4] net/tap: " Ferruh Yigit
2021-05-11 12:26   ` [dpdk-stable] [PATCH v2 1/4] net/bnx2x: " Kevin Traynor
2021-05-11 13:14 ` [dpdk-stable] [PATCH v3 " Ferruh Yigit
2021-05-11 13:14   ` [dpdk-stable] [PATCH v3 2/4] " Ferruh Yigit
2021-05-11 13:14   ` [dpdk-stable] [PATCH v3 3/4] net/ice/base: " Ferruh Yigit
2021-05-12  7:43     ` Wang, Haiyue
2021-05-11 13:14   ` [dpdk-stable] [PATCH v3 4/4] net/tap: " Ferruh Yigit
2021-05-12 13:04   ` [dpdk-stable] [PATCH v3 1/4] net/bnx2x: " Ferruh Yigit

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).