OSDN Git Service

net: hns3: replace an unsuitable variable type in hclge_inform_reset_assert_to_vf()
authorHuazhong Tan <tanhuazhong@huawei.com>
Sat, 4 Jan 2020 02:49:30 +0000 (10:49 +0800)
committerDavid S. Miller <davem@davemloft.net>
Mon, 6 Jan 2020 21:26:25 +0000 (13:26 -0800)
In hclge_inform_reset_assert_to_vf(), variable reset_type(enum type)
will be copied into msg_data whose size is 2 bytes. Currently, hip08
is a little-endian machine, so the lower two bytes of reset_type will
be copied to msg_data. But when running on a big-endian machine,
msg_data will have a wrong value(the higher two bytes of reset_type).

So this patch modifies the type of reset_type to u16, and adds a
build check in case enum hnae3_reset_type has value larger than
U16_MAX.

Signed-off-by: Huazhong Tan <tanhuazhong@huawei.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/hisilicon/hns3/hnae3.h
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_mbx.c

index ed97bd6..6b131ab 100644 (file)
@@ -164,6 +164,7 @@ enum hnae3_reset_type {
        HNAE3_IMP_RESET,
        HNAE3_UNKNOWN_RESET,
        HNAE3_NONE_RESET,
+       HNAE3_MAX_RESET,
 };
 
 enum hnae3_flr_state {
index f905dd3..a3c0822 100644 (file)
@@ -86,10 +86,12 @@ static int hclge_send_mbx_msg(struct hclge_vport *vport, u8 *msg, u16 msg_len,
 int hclge_inform_reset_assert_to_vf(struct hclge_vport *vport)
 {
        struct hclge_dev *hdev = vport->back;
-       enum hnae3_reset_type reset_type;
+       u16 reset_type;
        u8 msg_data[2];
        u8 dest_vfid;
 
+       BUILD_BUG_ON(HNAE3_MAX_RESET > U16_MAX);
+
        dest_vfid = (u8)vport->vport_id;
 
        if (hdev->reset_type == HNAE3_FUNC_RESET)