Skip to contentSkip to conversation

net/ice/base: fix build error for GCC 4.8.5

PATCH Applied Aman Singh 3 participants 4 messages Oct 5, 2021 Network drivers

lore
Share & tools
lore

Aman Singh

author
#0 lore raw

PATCH 1/1 net/ice/base: fix build error for GCC 4.8.5

Code changes done for build issue as reported in Bug 817
error: dereferencing type-punned pointer will break strict-aliasing rules. added union to avoid pointer dereferencing

Fixes 39925373a333 ("net/ice/base: add parser execution main loop")
---
 drivers/net/ice/base/ice_parser_rt.c | 36 +++++++++++++++-------------
 1 file changed, 20 insertions(+), 16 deletions(-)
drivers/net/ice/base/ice_parser_rt.c +20 -16
index 7a44675737..eb35ad0bc0 100644
@@ -187,21 +187,23 @@ static u32 _bit_rev_u32(u32 v, int len)
 
 static u32 _hv_bit_sel(struct ice_parser_rt *rt, int start, int len)
 {
-	u64 d64, msk;
-	u8 b[8];
+	u64 msk;
+	union {
+		u64 d64;
+		u8 b[8];
+	} bit_sel;
 	int i;
 
 	int offset = GPR_HB_IDX + start / 16;
 
-	ice_memcpy(b, &rt->gpr[offset], 8, ICE_NONDMA_TO_NONDMA);
+	ice_memcpy(bit_sel.b, &rt->gpr[offset], 8, ICE_NONDMA_TO_NONDMA);
 
 	for (i = 0; i < 8; i++)
-		b[i] = _bit_rev_u8(b[i]);
+		bit_sel.b[i] = _bit_rev_u8(bit_sel.b[i]);
 
-	d64 = *(u64 *)&b[0];
 	msk = (1ul << len) - 1;
 
-	return _bit_rev_u32((u32)((d64 >> (start % 16)) & msk), len);
+	return _bit_rev_u32((u32)((bit_sel.d64 >> (start % 16)) & msk), len);
 }
 
 static u32 _pk_build(struct ice_parser_rt *rt, struct ice_np_keybuilder *kb)
@@ -444,21 +446,23 @@ static void _po_update(struct ice_parser_rt *rt, struct ice_alu *alu)
 static u16 _reg_bit_sel(struct ice_parser_rt *rt, int reg_idx,
 			int start, int len)
 {
-	u32 d32, msk;
-	u8 b[4];
-	u8 v[4];
+	u32 msk;
+	union {
+		u32 d32;
+		u8 b[4];
+	} bit_sel;
 
-	ice_memcpy(b, &rt->gpr[reg_idx + start / 16], 4, ICE_NONDMA_TO_NONDMA);
+	ice_memcpy(bit_sel.b, &rt->gpr[reg_idx + start / 16], 4,
+		   ICE_NONDMA_TO_NONDMA);
 
-	v[0] = _bit_rev_u8(b[0]);
-	v[1] = _bit_rev_u8(b[1]);
-	v[2] = _bit_rev_u8(b[2]);
-	v[3] = _bit_rev_u8(b[3]);
+	bit_sel.b[0] = _bit_rev_u8(bit_sel.b[0]);
+	bit_sel.b[1] = _bit_rev_u8(bit_sel.b[1]);
+	bit_sel.b[2] = _bit_rev_u8(bit_sel.b[2]);
+	bit_sel.b[3] = _bit_rev_u8(bit_sel.b[3]);
 
-	d32 = *(u32 *)&v[0];
 	msk = (1u << len) - 1;
 
-	return _bit_rev_u16((u16)((d32 >> (start % 16)) & msk), len);
+	return _bit_rev_u16((u16)((bit_sel.d32 >> (start % 16)) & msk), len);
 }
 
 static void _err_add(struct ice_parser_rt *rt, int idx, bool val)
Signature · 1 line
2.17.1
Tested-by on v1 1/1
#1 lore raw
Quoted 5 lines · Aman Singh

Code changes done for build issue as reported in Bug 817
error: dereferencing type-punned pointer will break strict-aliasing rules. added union to avoid pointer dereferencing

About the title, Ali reproduced the issue with other versions of gcc.

This patch touches base/ code, is Intel ok with this?
Else, we could consider disabling strict aliasing for the base driver, like

$ git grep alias '**/base/meson.build'
drivers/net/fm10k/base/meson.build:    '-Wno-strict-aliasing',
'-Wno-format-extra-args',
drivers/net/i40e/base/meson.build:        '-Wno-strict-aliasing',
'-Wno-unused-but-set-variable',
drivers/net/qede/base/meson.build:        '-Wno-strict-aliasing',

Bugzilla ID: 817

Quoted 1 line
Fixes 39925373a333 ("net/ice/base: add parser execution main loop")

No Cc: stable, this is a regression in main.

Quoted 1 line
Signature · 1 line
David Marchand
Acked-by
#2 lore raw
Quoted 9 lines · David Marchand
Quoted 5 lines · Aman Singh

Code changes done for build issue as reported in Bug 817
error: dereferencing type-punned pointer will break strict-aliasing rules. added union to avoid pointer dereferencing

About the title, Ali reproduced the issue with other versions of gcc.

Quoted 9 lines

This patch touches base/ code, is Intel ok with this?
Else, we could consider disabling strict aliasing for the base driver, like

$ git grep alias '**/base/meson.build'
drivers/net/fm10k/base/meson.build:    '-Wno-strict-aliasing',
'-Wno-format-extra-args',
drivers/net/i40e/base/meson.build:        '-Wno-strict-aliasing',
'-Wno-unused-but-set-variable',
drivers/net/qede/base/meson.build:        '-Wno-strict-aliasing',

It has some complications to update the shared code from the DPDK, but for this case the fix seems simple and valid, so I am for getting the fix and work on to propagate the fix to the shared code, instead of disable the warning directly.

Mainly Qi and Beilei will be managing the shared code part, if shared code comes with different solution, we can send an incremental patch to replace this fix.

Briefly I am for getting the patch, hence:

Quoted 12 lines

Bugzilla ID: 817

Quoted 1 line
Fixes 39925373a333 ("net/ice/base: add parser execution main loop")

No Cc: stable, this is a regression in main.

Quoted 1 line
#3 lore raw
Quoted 7 lines · Ferruh Yigit
Quoted 6 lines · David Marchand
Quoted 4 lines · Aman Singh

Code changes done for build issue as reported in Bug 817
error: dereferencing type-punned pointer will break strict-aliasing rules. added union to avoid pointer dereferencing

Quoted 6 lines
Quoted 5 lines

Bugzilla ID: 817

Quoted 3 lines
Fixes 39925373a333 ("net/ice/base: add parser execution main loop")

Applied, thanks.

Signature · 1 line
David Marchand