Skip to content

Commit

Permalink
net: hns3: add a conversion for mailbox's response code
Browse files Browse the repository at this point in the history
Currently, when mailbox handling fails, the PF driver
just responds 1 to the VF driver. It is not sufficient
for the VF driver to find out why its mailbox fails.

So the error should be responded to VF, but the error
is type int and the response field in struct
hclge_mbx_pf_to_vf_cmd is type u16, a conversion is
needed.

Signed-off-by: Jian Shen <shenjian15@huawei.com>
Signed-off-by: Huazhong Tan <tanhuazhong@huawei.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Jian Shen authored and David S. Miller committed Mar 22, 2020
1 parent 0998448 commit 027fd53
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 2 deletions.
16 changes: 15 additions & 1 deletion drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_mbx.c
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,11 @@
#include "hclge_mbx.h"
#include "hnae3.h"

static u16 hclge_errno_to_resp(int errno)
{
return abs(errno);
}

/* hclge_gen_resp_to_vf: used to generate a synchronous response to VF when PF
* receives a mailbox message from VF.
* @vport: pointer to struct hclge_vport
Expand All @@ -21,6 +26,7 @@ static int hclge_gen_resp_to_vf(struct hclge_vport *vport,
struct hclge_dev *hdev = vport->back;
enum hclge_cmd_status status;
struct hclge_desc desc;
u16 resp;

resp_pf_to_vf = (struct hclge_mbx_pf_to_vf_cmd *)desc.data;

Expand All @@ -43,7 +49,15 @@ static int hclge_gen_resp_to_vf(struct hclge_vport *vport,
resp_pf_to_vf->msg[0] = HCLGE_MBX_PF_VF_RESP;
resp_pf_to_vf->msg[1] = vf_to_pf_req->msg[0];
resp_pf_to_vf->msg[2] = vf_to_pf_req->msg[1];
resp_pf_to_vf->msg[3] = (resp_status == 0) ? 0 : 1;
resp = hclge_errno_to_resp(resp_status);
if (resp < SHRT_MAX) {
resp_pf_to_vf->msg[3] = resp;
} else {
dev_warn(&hdev->pdev->dev,
"failed to send response to VF, response status %d is out-of-bound\n",
resp);
resp_pf_to_vf->msg[3] = EIO;
}

if (resp_data && resp_data_len > 0)
memcpy(&resp_pf_to_vf->msg[4], resp_data, resp_data_len);
Expand Down
7 changes: 6 additions & 1 deletion drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_mbx.c
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,11 @@
#include "hclgevf_main.h"
#include "hnae3.h"

static int hclgevf_resp_to_errno(u16 resp_code)
{
return resp_code ? -resp_code : 0;
}

static void hclgevf_reset_mbx_resp_status(struct hclgevf_dev *hdev)
{
/* this function should be called with mbx_resp.mbx_mutex held
Expand Down Expand Up @@ -193,7 +198,7 @@ void hclgevf_mbx_handler(struct hclgevf_dev *hdev)

resp->origin_mbx_msg = (req->msg[1] << 16);
resp->origin_mbx_msg |= req->msg[2];
resp->resp_status = req->msg[3];
resp->resp_status = hclgevf_resp_to_errno(req->msg[3]);

temp = (u8 *)&req->msg[4];
for (i = 0; i < HCLGE_MBX_MAX_RESP_DATA_SIZE; i++) {
Expand Down

0 comments on commit 027fd53

Please sign in to comment.