net: hns3: fix GRO configuration error after reset
The GRO configuration is enabled by default after reset. This is incorrect and should be restored to the user-configured value. So this restoration is added during reset initialization. Signed-off-by: Yufeng Mo <moyufeng@huawei.com> Signed-off-by: Guangbin Huang <huangguangbin2@huawei.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
Родитель
55649d5654
Коммит
3462207d2d
|
@ -1550,6 +1550,7 @@ static int hclge_configure(struct hclge_dev *hdev)
|
|||
hdev->tm_info.hw_pfc_map = 0;
|
||||
hdev->wanted_umv_size = cfg.umv_space;
|
||||
hdev->tx_spare_buf_size = cfg.tx_spare_buf_size;
|
||||
hdev->gro_en = true;
|
||||
if (cfg.vlan_fliter_cap == HCLGE_VLAN_FLTR_CAN_MDF)
|
||||
set_bit(HNAE3_DEV_SUPPORT_VLAN_FLTR_MDF_B, ae_dev->caps);
|
||||
|
||||
|
@ -1618,7 +1619,7 @@ static int hclge_config_tso(struct hclge_dev *hdev, u16 tso_mss_min,
|
|||
return hclge_cmd_send(&hdev->hw, &desc, 1);
|
||||
}
|
||||
|
||||
static int hclge_config_gro(struct hclge_dev *hdev, bool en)
|
||||
static int hclge_config_gro(struct hclge_dev *hdev)
|
||||
{
|
||||
struct hclge_cfg_gro_status_cmd *req;
|
||||
struct hclge_desc desc;
|
||||
|
@ -1630,7 +1631,7 @@ static int hclge_config_gro(struct hclge_dev *hdev, bool en)
|
|||
hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_GRO_GENERIC_CONFIG, false);
|
||||
req = (struct hclge_cfg_gro_status_cmd *)desc.data;
|
||||
|
||||
req->gro_en = en ? 1 : 0;
|
||||
req->gro_en = hdev->gro_en ? 1 : 0;
|
||||
|
||||
ret = hclge_cmd_send(&hdev->hw, &desc, 1);
|
||||
if (ret)
|
||||
|
@ -11586,7 +11587,7 @@ static int hclge_init_ae_dev(struct hnae3_ae_dev *ae_dev)
|
|||
goto err_mdiobus_unreg;
|
||||
}
|
||||
|
||||
ret = hclge_config_gro(hdev, true);
|
||||
ret = hclge_config_gro(hdev);
|
||||
if (ret)
|
||||
goto err_mdiobus_unreg;
|
||||
|
||||
|
@ -11967,7 +11968,7 @@ static int hclge_reset_ae_dev(struct hnae3_ae_dev *ae_dev)
|
|||
return ret;
|
||||
}
|
||||
|
||||
ret = hclge_config_gro(hdev, true);
|
||||
ret = hclge_config_gro(hdev);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
|
@ -12701,8 +12702,15 @@ static int hclge_gro_en(struct hnae3_handle *handle, bool enable)
|
|||
{
|
||||
struct hclge_vport *vport = hclge_get_vport(handle);
|
||||
struct hclge_dev *hdev = vport->back;
|
||||
bool gro_en_old = hdev->gro_en;
|
||||
int ret;
|
||||
|
||||
return hclge_config_gro(hdev, enable);
|
||||
hdev->gro_en = enable;
|
||||
ret = hclge_config_gro(hdev);
|
||||
if (ret)
|
||||
hdev->gro_en = gro_en_old;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void hclge_sync_promisc_mode(struct hclge_dev *hdev)
|
||||
|
|
|
@ -927,6 +927,7 @@ struct hclge_dev {
|
|||
unsigned long fd_bmap[BITS_TO_LONGS(MAX_FD_FILTER_NUM)];
|
||||
enum HCLGE_FD_ACTIVE_RULE_TYPE fd_active_type;
|
||||
u8 fd_en;
|
||||
bool gro_en;
|
||||
|
||||
u16 wanted_umv_size;
|
||||
/* max available unicast mac vlan space */
|
||||
|
|
|
@ -2487,6 +2487,8 @@ static int hclgevf_configure(struct hclgevf_dev *hdev)
|
|||
{
|
||||
int ret;
|
||||
|
||||
hdev->gro_en = true;
|
||||
|
||||
ret = hclgevf_get_basic_info(hdev);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
@ -2549,7 +2551,7 @@ static int hclgevf_init_roce_base_info(struct hclgevf_dev *hdev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int hclgevf_config_gro(struct hclgevf_dev *hdev, bool en)
|
||||
static int hclgevf_config_gro(struct hclgevf_dev *hdev)
|
||||
{
|
||||
struct hclgevf_cfg_gro_status_cmd *req;
|
||||
struct hclgevf_desc desc;
|
||||
|
@ -2562,7 +2564,7 @@ static int hclgevf_config_gro(struct hclgevf_dev *hdev, bool en)
|
|||
false);
|
||||
req = (struct hclgevf_cfg_gro_status_cmd *)desc.data;
|
||||
|
||||
req->gro_en = en ? 1 : 0;
|
||||
req->gro_en = hdev->gro_en ? 1 : 0;
|
||||
|
||||
ret = hclgevf_cmd_send(&hdev->hw, &desc, 1);
|
||||
if (ret)
|
||||
|
@ -3308,7 +3310,7 @@ static int hclgevf_reset_hdev(struct hclgevf_dev *hdev)
|
|||
return ret;
|
||||
}
|
||||
|
||||
ret = hclgevf_config_gro(hdev, true);
|
||||
ret = hclgevf_config_gro(hdev);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
|
@ -3389,7 +3391,7 @@ static int hclgevf_init_hdev(struct hclgevf_dev *hdev)
|
|||
if (ret)
|
||||
goto err_config;
|
||||
|
||||
ret = hclgevf_config_gro(hdev, true);
|
||||
ret = hclgevf_config_gro(hdev);
|
||||
if (ret)
|
||||
goto err_config;
|
||||
|
||||
|
@ -3638,8 +3640,15 @@ void hclgevf_update_speed_duplex(struct hclgevf_dev *hdev, u32 speed,
|
|||
static int hclgevf_gro_en(struct hnae3_handle *handle, bool enable)
|
||||
{
|
||||
struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle);
|
||||
bool gro_en_old = hdev->gro_en;
|
||||
int ret;
|
||||
|
||||
return hclgevf_config_gro(hdev, enable);
|
||||
hdev->gro_en = enable;
|
||||
ret = hclgevf_config_gro(hdev);
|
||||
if (ret)
|
||||
hdev->gro_en = gro_en_old;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void hclgevf_get_media_type(struct hnae3_handle *handle, u8 *media_type,
|
||||
|
|
|
@ -310,6 +310,8 @@ struct hclgevf_dev {
|
|||
u16 *vector_status;
|
||||
int *vector_irq;
|
||||
|
||||
bool gro_en;
|
||||
|
||||
unsigned long vlan_del_fail_bmap[BITS_TO_LONGS(VLAN_N_VID)];
|
||||
|
||||
struct hclgevf_mac_table_cfg mac_table;
|
||||
|
|
Загрузка…
Ссылка в новой задаче