net: marvell: prestera: Add explicit padding
authorGeert Uytterhoeven <geert@linux-m68k.org>
Tue, 2 Nov 2021 08:24:33 +0000 (09:24 +0100)
committerJakub Kicinski <kuba@kernel.org>
Wed, 3 Nov 2021 01:08:58 +0000 (18:08 -0700)
On m68k:

    In function ‘prestera_hw_build_tests’,
inlined from ‘prestera_hw_switch_init’ at drivers/net/ethernet/marvell/prestera/prestera_hw.c:788:2:
    ././include/linux/compiler_types.h:335:38: error: call to ‘__compiletime_assert_345’ declared with attribute error: BUILD_BUG_ON failed: sizeof(struct prestera_msg_switch_attr_req) != 16
    ...

The driver assumes structure members are naturally aligned, but does not
add explicit padding, thus breaking architectures where integral values
are not always naturally aligned (e.g. on m68k, __alignof(int) is 2, not
4).

Fixes: bb5dbf2cc64d5cfa ("net: marvell: prestera: add firmware v4.0 support")
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
Reviewed-by: Arnd Bergmann <arnd@arndb.de>
Link: https://lore.kernel.org/r/20211102082433.3820514-1-geert@linux-m68k.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/marvell/prestera/prestera_hw.c

index 41ba17c..4f5f52d 100644 (file)
@@ -189,6 +189,7 @@ struct prestera_msg_switch_attr_req {
        struct prestera_msg_cmd cmd;
        __le32 attr;
        union prestera_msg_switch_param param;
+       u8 pad[2];
 };
 
 struct prestera_msg_switch_init_resp {
@@ -313,6 +314,7 @@ struct prestera_msg_port_info_resp {
        __le32 hw_id;
        __le32 dev_id;
        __le16 fp_id;
+       u8 pad[2];
 };
 
 struct prestera_msg_vlan_req {
@@ -345,11 +347,13 @@ struct prestera_msg_bridge_req {
        __le32 port;
        __le32 dev;
        __le16 bridge;
+       u8 pad[2];
 };
 
 struct prestera_msg_bridge_resp {
        struct prestera_msg_ret ret;
        __le16 bridge;
+       u8 pad[2];
 };
 
 struct prestera_msg_acl_action {
@@ -408,16 +412,19 @@ struct prestera_msg_acl_ruleset_bind_req {
        __le32 port;
        __le32 dev;
        __le16 ruleset_id;
+       u8 pad[2];
 };
 
 struct prestera_msg_acl_ruleset_req {
        struct prestera_msg_cmd cmd;
        __le16 id;
+       u8 pad[2];
 };
 
 struct prestera_msg_acl_ruleset_resp {
        struct prestera_msg_ret ret;
        __le16 id;
+       u8 pad[2];
 };
 
 struct prestera_msg_span_req {
@@ -425,11 +432,13 @@ struct prestera_msg_span_req {
        __le32 port;
        __le32 dev;
        u8 id;
+       u8 pad[3];
 };
 
 struct prestera_msg_span_resp {
        struct prestera_msg_ret ret;
        u8 id;
+       u8 pad[3];
 };
 
 struct prestera_msg_stp_req {
@@ -443,6 +452,7 @@ struct prestera_msg_stp_req {
 struct prestera_msg_rxtx_req {
        struct prestera_msg_cmd cmd;
        u8 use_sdma;
+       u8 pad[3];
 };
 
 struct prestera_msg_rxtx_resp {
@@ -455,12 +465,14 @@ struct prestera_msg_lag_req {
        __le32 port;
        __le32 dev;
        __le16 lag_id;
+       u8 pad[2];
 };
 
 struct prestera_msg_cpu_code_counter_req {
        struct prestera_msg_cmd cmd;
        u8 counter_type;
        u8 code;
+       u8 pad[2];
 };
 
 struct mvsw_msg_cpu_code_counter_ret {