mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-04-29 07:02:29 -04:00
net: hns3: add a conversion for mailbox's response code
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>
This commit is contained in:
committed by
David S. Miller
parent
09984483db
commit
027fd53160
@@ -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
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
@@ -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++) {
|
||||
|
||||
Reference in New Issue
Block a user