[v2,2/4] net/bnx2x: fix build with gcc11
Checks
Commit Message
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(-)
Comments
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();
>
@@ -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();