Merge branch 'net-hns3-fixes-for-net'
Guangbin Huang says: ==================== net: hns3: fixes for -net This series includes some bugfixes for the HNS3 ethernet driver. ==================== Link: https://lore.kernel.org/r/1626685988-25869-1-git-send-email-huangguangbin2@huawei.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
commit
97d0931f67
@ -98,6 +98,7 @@ struct hclgevf_mbx_resp_status {
|
||||
u32 origin_mbx_msg;
|
||||
bool received_resp;
|
||||
int resp_status;
|
||||
u16 match_id;
|
||||
u8 additional_info[HCLGE_MBX_MAX_RESP_DATA_SIZE];
|
||||
};
|
||||
|
||||
@ -143,7 +144,8 @@ struct hclge_mbx_vf_to_pf_cmd {
|
||||
u8 mbx_need_resp;
|
||||
u8 rsv1[1];
|
||||
u8 msg_len;
|
||||
u8 rsv2[3];
|
||||
u8 rsv2;
|
||||
u16 match_id;
|
||||
struct hclge_vf_to_pf_msg msg;
|
||||
};
|
||||
|
||||
@ -153,7 +155,8 @@ struct hclge_mbx_pf_to_vf_cmd {
|
||||
u8 dest_vfid;
|
||||
u8 rsv[3];
|
||||
u8 msg_len;
|
||||
u8 rsv1[3];
|
||||
u8 rsv1;
|
||||
u16 match_id;
|
||||
struct hclge_pf_to_vf_msg msg;
|
||||
};
|
||||
|
||||
|
@ -9552,13 +9552,17 @@ static int hclge_set_vport_vlan_filter(struct hclge_vport *vport, bool enable)
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
if (test_bit(HNAE3_DEV_SUPPORT_PORT_VLAN_BYPASS_B, ae_dev->caps))
|
||||
if (test_bit(HNAE3_DEV_SUPPORT_PORT_VLAN_BYPASS_B, ae_dev->caps)) {
|
||||
ret = hclge_set_port_vlan_filter_bypass(hdev, vport->vport_id,
|
||||
!enable);
|
||||
else if (!vport->vport_id)
|
||||
} else if (!vport->vport_id) {
|
||||
if (test_bit(HNAE3_DEV_SUPPORT_VLAN_FLTR_MDF_B, ae_dev->caps))
|
||||
enable = false;
|
||||
|
||||
ret = hclge_set_vlan_filter_ctrl(hdev, HCLGE_FILTER_TYPE_PORT,
|
||||
HCLGE_FILTER_FE_INGRESS,
|
||||
enable, 0);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -47,6 +47,7 @@ static int hclge_gen_resp_to_vf(struct hclge_vport *vport,
|
||||
|
||||
resp_pf_to_vf->dest_vfid = vf_to_pf_req->mbx_src_vfid;
|
||||
resp_pf_to_vf->msg_len = vf_to_pf_req->msg_len;
|
||||
resp_pf_to_vf->match_id = vf_to_pf_req->match_id;
|
||||
|
||||
resp_pf_to_vf->msg.code = HCLGE_MBX_PF_VF_RESP;
|
||||
resp_pf_to_vf->msg.vf_mbx_msg_code = vf_to_pf_req->msg.code;
|
||||
|
@ -2641,6 +2641,16 @@ static int hclgevf_rss_init_hw(struct hclgevf_dev *hdev)
|
||||
|
||||
static int hclgevf_init_vlan_config(struct hclgevf_dev *hdev)
|
||||
{
|
||||
struct hnae3_handle *nic = &hdev->nic;
|
||||
int ret;
|
||||
|
||||
ret = hclgevf_en_hw_strip_rxvtag(nic, true);
|
||||
if (ret) {
|
||||
dev_err(&hdev->pdev->dev,
|
||||
"failed to enable rx vlan offload, ret = %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
return hclgevf_set_vlan_filter(&hdev->nic, htons(ETH_P_8021Q), 0,
|
||||
false);
|
||||
}
|
||||
|
@ -13,6 +13,7 @@ static int hclgevf_resp_to_errno(u16 resp_code)
|
||||
return resp_code ? -resp_code : 0;
|
||||
}
|
||||
|
||||
#define HCLGEVF_MBX_MATCH_ID_START 1
|
||||
static void hclgevf_reset_mbx_resp_status(struct hclgevf_dev *hdev)
|
||||
{
|
||||
/* this function should be called with mbx_resp.mbx_mutex held
|
||||
@ -21,6 +22,10 @@ static void hclgevf_reset_mbx_resp_status(struct hclgevf_dev *hdev)
|
||||
hdev->mbx_resp.received_resp = false;
|
||||
hdev->mbx_resp.origin_mbx_msg = 0;
|
||||
hdev->mbx_resp.resp_status = 0;
|
||||
hdev->mbx_resp.match_id++;
|
||||
/* Update match_id and ensure the value of match_id is not zero */
|
||||
if (hdev->mbx_resp.match_id == 0)
|
||||
hdev->mbx_resp.match_id = HCLGEVF_MBX_MATCH_ID_START;
|
||||
memset(hdev->mbx_resp.additional_info, 0, HCLGE_MBX_MAX_RESP_DATA_SIZE);
|
||||
}
|
||||
|
||||
@ -115,6 +120,7 @@ int hclgevf_send_mbx_msg(struct hclgevf_dev *hdev,
|
||||
if (need_resp) {
|
||||
mutex_lock(&hdev->mbx_resp.mbx_mutex);
|
||||
hclgevf_reset_mbx_resp_status(hdev);
|
||||
req->match_id = hdev->mbx_resp.match_id;
|
||||
status = hclgevf_cmd_send(&hdev->hw, &desc, 1);
|
||||
if (status) {
|
||||
dev_err(&hdev->pdev->dev,
|
||||
@ -211,6 +217,19 @@ void hclgevf_mbx_handler(struct hclgevf_dev *hdev)
|
||||
resp->additional_info[i] = *temp;
|
||||
temp++;
|
||||
}
|
||||
|
||||
/* If match_id is not zero, it means PF support
|
||||
* match_id. If the match_id is right, VF get the
|
||||
* right response, otherwise ignore the response.
|
||||
* Driver will clear hdev->mbx_resp when send
|
||||
* next message which need response.
|
||||
*/
|
||||
if (req->match_id) {
|
||||
if (req->match_id == resp->match_id)
|
||||
resp->received_resp = true;
|
||||
} else {
|
||||
resp->received_resp = true;
|
||||
}
|
||||
break;
|
||||
case HCLGE_MBX_LINK_STAT_CHANGE:
|
||||
case HCLGE_MBX_ASSERTING_RESET:
|
||||
|
Loading…
x
Reference in New Issue
Block a user