* [PATCH for-next 0/8] RDMA/hns: Clean up and refactor mailbox-related code
@ 2022-02-18 11:05 Wenpeng Liang
2022-02-18 11:05 ` [PATCH for-next 1/8] RDMA/hns: Remove the unused parameter "op_modifier" in mailbox Wenpeng Liang
` (7 more replies)
0 siblings, 8 replies; 18+ messages in thread
From: Wenpeng Liang @ 2022-02-18 11:05 UTC (permalink / raw)
To: jgg, leon; +Cc: linux-rdma, linuxarm, liangwenpeng
Mailbox-related code is getting harder to maintain. Especially after
removing the HIP06 code, the mailbox-related code needs to be cleaned
and refactored more urgently.
The following is the basic information of each patch
(1) #1~#4: Preparing for refactoring
(2) #5: Formal Refactoring
(3) #6~#7: Follow-up cleanup
Chengchang Tang (5):
RDMA/hns: Remove the unused parameter "op_modifier" in mailbox
RDMA/hns: Remove fixed parameter “timeout” in the mailbox
RDMA/hns: Refactor mailbox functions
RDMA/hns: Remove similar code that configures the hardware contexts
RDMA/hns: Refactor the alloc_srqc()
Wenpeng Liang (3):
RDMA/hns: Remove redundant parameter "mailbox" in the mailbox
RDMA/hns: Fix the wrong type of parameter "op" of the mailbox
RDMA/hns: Refactor the alloc_cqc()
drivers/infiniband/hw/hns/hns_roce_cmd.c | 108 +++++++------
drivers/infiniband/hw/hns/hns_roce_cmd.h | 8 +-
drivers/infiniband/hw/hns/hns_roce_cq.c | 71 +++++----
drivers/infiniband/hw/hns/hns_roce_device.h | 24 +--
drivers/infiniband/hw/hns/hns_roce_hem.c | 4 +-
drivers/infiniband/hw/hns/hns_roce_hw_v2.c | 143 ++++++++----------
.../infiniband/hw/hns/hns_roce_hw_v2_dfx.c | 5 +-
drivers/infiniband/hw/hns/hns_roce_mr.c | 38 ++---
drivers/infiniband/hw/hns/hns_roce_srq.c | 104 +++++++------
9 files changed, 260 insertions(+), 245 deletions(-)
--
2.33.0
^ permalink raw reply [flat|nested] 18+ messages in thread
* [PATCH for-next 1/8] RDMA/hns: Remove the unused parameter "op_modifier" in mailbox
2022-02-18 11:05 [PATCH for-next 0/8] RDMA/hns: Clean up and refactor mailbox-related code Wenpeng Liang
@ 2022-02-18 11:05 ` Wenpeng Liang
2022-02-24 13:30 ` Leon Romanovsky
2022-02-18 11:05 ` [PATCH for-next 2/8] RDMA/hns: Remove fixed parameter “timeout” in the mailbox Wenpeng Liang
` (6 subsequent siblings)
7 siblings, 1 reply; 18+ messages in thread
From: Wenpeng Liang @ 2022-02-18 11:05 UTC (permalink / raw)
To: jgg, leon; +Cc: linux-rdma, linuxarm, liangwenpeng
From: Chengchang Tang <tangchengchang@huawei.com>
The parameter "op_modifier" is only used for HIP06. It is useless for HIP08
and later versions. After removing HIP06, this parameter is no longer used,
so remove it.
Signed-off-by: Chengchang Tang <tangchengchang@huawei.com>
Signed-off-by: Haoyue Xu <xuhaoyue1@hisilicon.com>
Signed-off-by: Wenpeng Liang <liangwenpeng@huawei.com>
---
drivers/infiniband/hw/hns/hns_roce_cmd.c | 36 ++++++++-----------
drivers/infiniband/hw/hns/hns_roce_cmd.h | 3 +-
drivers/infiniband/hw/hns/hns_roce_cq.c | 4 +--
drivers/infiniband/hw/hns/hns_roce_device.h | 2 +-
drivers/infiniband/hw/hns/hns_roce_hw_v2.c | 26 +++++++-------
.../infiniband/hw/hns/hns_roce_hw_v2_dfx.c | 2 +-
drivers/infiniband/hw/hns/hns_roce_mr.c | 6 ++--
drivers/infiniband/hw/hns/hns_roce_srq.c | 4 +--
8 files changed, 37 insertions(+), 46 deletions(-)
diff --git a/drivers/infiniband/hw/hns/hns_roce_cmd.c b/drivers/infiniband/hw/hns/hns_roce_cmd.c
index 4b693d542ace..ab89e70b6f04 100644
--- a/drivers/infiniband/hw/hns/hns_roce_cmd.c
+++ b/drivers/infiniband/hw/hns/hns_roce_cmd.c
@@ -39,25 +39,22 @@
#define CMD_MAX_NUM 32
static int hns_roce_cmd_mbox_post_hw(struct hns_roce_dev *hr_dev, u64 in_param,
- u64 out_param, u32 in_modifier,
- u8 op_modifier, u16 op, u16 token,
- int event)
+ u64 out_param, u32 in_modifier, u16 op,
+ u16 token, int event)
{
return hr_dev->hw->post_mbox(hr_dev, in_param, out_param, in_modifier,
- op_modifier, op, token, event);
+ op, token, event);
}
/* this should be called with "poll_sem" */
static int __hns_roce_cmd_mbox_poll(struct hns_roce_dev *hr_dev, u64 in_param,
u64 out_param, unsigned long in_modifier,
- u8 op_modifier, u16 op,
- unsigned int timeout)
+ u16 op, unsigned int timeout)
{
int ret;
ret = hns_roce_cmd_mbox_post_hw(hr_dev, in_param, out_param,
- in_modifier, op_modifier, op,
- CMD_POLL_TOKEN, 0);
+ in_modifier, op, CMD_POLL_TOKEN, 0);
if (ret) {
dev_err_ratelimited(hr_dev->dev,
"failed to post mailbox 0x%x in poll mode, ret = %d.\n",
@@ -70,13 +67,13 @@ static int __hns_roce_cmd_mbox_poll(struct hns_roce_dev *hr_dev, u64 in_param,
static int hns_roce_cmd_mbox_poll(struct hns_roce_dev *hr_dev, u64 in_param,
u64 out_param, unsigned long in_modifier,
- u8 op_modifier, u16 op, unsigned int timeout)
+ u16 op, unsigned int timeout)
{
int ret;
down(&hr_dev->cmd.poll_sem);
ret = __hns_roce_cmd_mbox_poll(hr_dev, in_param, out_param, in_modifier,
- op_modifier, op, timeout);
+ op, timeout);
up(&hr_dev->cmd.poll_sem);
return ret;
@@ -102,8 +99,7 @@ void hns_roce_cmd_event(struct hns_roce_dev *hr_dev, u16 token, u8 status,
static int __hns_roce_cmd_mbox_wait(struct hns_roce_dev *hr_dev, u64 in_param,
u64 out_param, unsigned long in_modifier,
- u8 op_modifier, u16 op,
- unsigned int timeout)
+ u16 op, unsigned int timeout)
{
struct hns_roce_cmdq *cmd = &hr_dev->cmd;
struct hns_roce_cmd_context *context;
@@ -125,8 +121,7 @@ static int __hns_roce_cmd_mbox_wait(struct hns_roce_dev *hr_dev, u64 in_param,
reinit_completion(&context->done);
ret = hns_roce_cmd_mbox_post_hw(hr_dev, in_param, out_param,
- in_modifier, op_modifier, op,
- context->token, 1);
+ in_modifier, op, context->token, 1);
if (ret) {
dev_err_ratelimited(dev,
"failed to post mailbox 0x%x in event mode, ret = %d.\n",
@@ -154,21 +149,20 @@ static int __hns_roce_cmd_mbox_wait(struct hns_roce_dev *hr_dev, u64 in_param,
static int hns_roce_cmd_mbox_wait(struct hns_roce_dev *hr_dev, u64 in_param,
u64 out_param, unsigned long in_modifier,
- u8 op_modifier, u16 op, unsigned int timeout)
+ u16 op, unsigned int timeout)
{
int ret;
down(&hr_dev->cmd.event_sem);
ret = __hns_roce_cmd_mbox_wait(hr_dev, in_param, out_param, in_modifier,
- op_modifier, op, timeout);
+ op, timeout);
up(&hr_dev->cmd.event_sem);
return ret;
}
int hns_roce_cmd_mbox(struct hns_roce_dev *hr_dev, u64 in_param, u64 out_param,
- unsigned long in_modifier, u8 op_modifier, u16 op,
- unsigned int timeout)
+ unsigned long in_modifier, u16 op, unsigned int timeout)
{
bool is_busy;
@@ -178,12 +172,10 @@ int hns_roce_cmd_mbox(struct hns_roce_dev *hr_dev, u64 in_param, u64 out_param,
if (hr_dev->cmd.use_events)
return hns_roce_cmd_mbox_wait(hr_dev, in_param, out_param,
- in_modifier, op_modifier, op,
- timeout);
+ in_modifier, op, timeout);
else
return hns_roce_cmd_mbox_poll(hr_dev, in_param, out_param,
- in_modifier, op_modifier, op,
- timeout);
+ in_modifier, op, timeout);
}
int hns_roce_cmd_init(struct hns_roce_dev *hr_dev)
diff --git a/drivers/infiniband/hw/hns/hns_roce_cmd.h b/drivers/infiniband/hw/hns/hns_roce_cmd.h
index 8025e7f657fa..3055996935d5 100644
--- a/drivers/infiniband/hw/hns/hns_roce_cmd.h
+++ b/drivers/infiniband/hw/hns/hns_roce_cmd.h
@@ -140,8 +140,7 @@ enum {
};
int hns_roce_cmd_mbox(struct hns_roce_dev *hr_dev, u64 in_param, u64 out_param,
- unsigned long in_modifier, u8 op_modifier, u16 op,
- unsigned int timeout);
+ unsigned long in_modifier, u16 op, unsigned int timeout);
struct hns_roce_cmd_mailbox *
hns_roce_alloc_cmd_mailbox(struct hns_roce_dev *hr_dev);
diff --git a/drivers/infiniband/hw/hns/hns_roce_cq.c b/drivers/infiniband/hw/hns/hns_roce_cq.c
index 55057dcbb2dc..6fbfa262e6c7 100644
--- a/drivers/infiniband/hw/hns/hns_roce_cq.c
+++ b/drivers/infiniband/hw/hns/hns_roce_cq.c
@@ -140,7 +140,7 @@ static int alloc_cqc(struct hns_roce_dev *hr_dev, struct hns_roce_cq *hr_cq)
hr_dev->hw->write_cqc(hr_dev, hr_cq, mailbox->buf, mtts, dma_handle);
/* Send mailbox to hw */
- ret = hns_roce_cmd_mbox(hr_dev, mailbox->dma, 0, hr_cq->cqn, 0,
+ ret = hns_roce_cmd_mbox(hr_dev, mailbox->dma, 0, hr_cq->cqn,
HNS_ROCE_CMD_CREATE_CQC, HNS_ROCE_CMD_TIMEOUT_MSECS);
hns_roce_free_cmd_mailbox(hr_dev, mailbox);
if (ret) {
@@ -174,7 +174,7 @@ static void free_cqc(struct hns_roce_dev *hr_dev, struct hns_roce_cq *hr_cq)
struct device *dev = hr_dev->dev;
int ret;
- ret = hns_roce_cmd_mbox(hr_dev, 0, 0, hr_cq->cqn, 1,
+ ret = hns_roce_cmd_mbox(hr_dev, 0, 0, hr_cq->cqn,
HNS_ROCE_CMD_DESTROY_CQC,
HNS_ROCE_CMD_TIMEOUT_MSECS);
if (ret)
diff --git a/drivers/infiniband/hw/hns/hns_roce_device.h b/drivers/infiniband/hw/hns/hns_roce_device.h
index 1e0bae136997..6da996f46cf3 100644
--- a/drivers/infiniband/hw/hns/hns_roce_device.h
+++ b/drivers/infiniband/hw/hns/hns_roce_device.h
@@ -852,7 +852,7 @@ struct hns_roce_hw {
int (*hw_init)(struct hns_roce_dev *hr_dev);
void (*hw_exit)(struct hns_roce_dev *hr_dev);
int (*post_mbox)(struct hns_roce_dev *hr_dev, u64 in_param,
- u64 out_param, u32 in_modifier, u8 op_modifier, u16 op,
+ u64 out_param, u32 in_modifier, u16 op,
u16 token, int event);
int (*poll_mbox_done)(struct hns_roce_dev *hr_dev,
unsigned int timeout);
diff --git a/drivers/infiniband/hw/hns/hns_roce_hw_v2.c b/drivers/infiniband/hw/hns/hns_roce_hw_v2.c
index b33e948fd060..c86cf75c4caa 100644
--- a/drivers/infiniband/hw/hns/hns_roce_hw_v2.c
+++ b/drivers/infiniband/hw/hns/hns_roce_hw_v2.c
@@ -1353,7 +1353,7 @@ static int config_hem_ba_to_hw(struct hns_roce_dev *hr_dev, unsigned long obj,
if (IS_ERR(mbox))
return PTR_ERR(mbox);
- ret = hns_roce_cmd_mbox(hr_dev, base_addr, mbox->dma, obj, 0, op,
+ ret = hns_roce_cmd_mbox(hr_dev, base_addr, mbox->dma, obj, op,
HNS_ROCE_CMD_TIMEOUT_MSECS);
hns_roce_free_cmd_mailbox(hr_dev, mbox);
return ret;
@@ -2781,7 +2781,7 @@ static void hns_roce_v2_exit(struct hns_roce_dev *hr_dev)
}
static int hns_roce_mbox_post(struct hns_roce_dev *hr_dev, u64 in_param,
- u64 out_param, u32 in_modifier, u8 op_modifier,
+ u64 out_param, u32 in_modifier,
u16 op, u16 token, int event)
{
struct hns_roce_cmq_desc desc;
@@ -2848,7 +2848,7 @@ static int v2_wait_mbox_complete(struct hns_roce_dev *hr_dev, u32 timeout,
}
static int v2_post_mbox(struct hns_roce_dev *hr_dev, u64 in_param,
- u64 out_param, u32 in_modifier, u8 op_modifier,
+ u64 out_param, u32 in_modifier,
u16 op, u16 token, int event)
{
u8 status = 0;
@@ -2866,7 +2866,7 @@ static int v2_post_mbox(struct hns_roce_dev *hr_dev, u64 in_param,
/* Post new message to mbox */
ret = hns_roce_mbox_post(hr_dev, in_param, out_param, in_modifier,
- op_modifier, op, token, event);
+ op, token, event);
if (ret)
dev_err_ratelimited(hr_dev->dev,
"failed to post mailbox, ret = %d.\n", ret);
@@ -3992,7 +3992,7 @@ static int hns_roce_v2_clear_hem(struct hns_roce_dev *hr_dev,
return PTR_ERR(mailbox);
/* configure the tag and op */
- ret = hns_roce_cmd_mbox(hr_dev, 0, mailbox->dma, obj, 0, op,
+ ret = hns_roce_cmd_mbox(hr_dev, 0, mailbox->dma, obj, op,
HNS_ROCE_CMD_TIMEOUT_MSECS);
hns_roce_free_cmd_mailbox(hr_dev, mailbox);
@@ -4017,7 +4017,7 @@ static int hns_roce_v2_qp_modify(struct hns_roce_dev *hr_dev,
memcpy(mailbox->buf, context, qpc_size);
memcpy(mailbox->buf + qpc_size, qpc_mask, qpc_size);
- ret = hns_roce_cmd_mbox(hr_dev, mailbox->dma, 0, hr_qp->qpn, 0,
+ ret = hns_roce_cmd_mbox(hr_dev, mailbox->dma, 0, hr_qp->qpn,
HNS_ROCE_CMD_MODIFY_QPC,
HNS_ROCE_CMD_TIMEOUT_MSECS);
@@ -5092,7 +5092,7 @@ static int hns_roce_v2_query_qpc(struct hns_roce_dev *hr_dev,
if (IS_ERR(mailbox))
return PTR_ERR(mailbox);
- ret = hns_roce_cmd_mbox(hr_dev, 0, mailbox->dma, hr_qp->qpn, 0,
+ ret = hns_roce_cmd_mbox(hr_dev, 0, mailbox->dma, hr_qp->qpn,
HNS_ROCE_CMD_QUERY_QPC,
HNS_ROCE_CMD_TIMEOUT_MSECS);
if (ret)
@@ -5460,7 +5460,7 @@ static int hns_roce_v2_modify_srq(struct ib_srq *ibsrq,
hr_reg_write(srq_context, SRQC_LIMIT_WL, srq_attr->srq_limit);
hr_reg_clear(srqc_mask, SRQC_LIMIT_WL);
- ret = hns_roce_cmd_mbox(hr_dev, mailbox->dma, 0, srq->srqn, 0,
+ ret = hns_roce_cmd_mbox(hr_dev, mailbox->dma, 0, srq->srqn,
HNS_ROCE_CMD_MODIFY_SRQC,
HNS_ROCE_CMD_TIMEOUT_MSECS);
hns_roce_free_cmd_mailbox(hr_dev, mailbox);
@@ -5488,7 +5488,7 @@ static int hns_roce_v2_query_srq(struct ib_srq *ibsrq, struct ib_srq_attr *attr)
return PTR_ERR(mailbox);
srq_context = mailbox->buf;
- ret = hns_roce_cmd_mbox(hr_dev, 0, mailbox->dma, srq->srqn, 0,
+ ret = hns_roce_cmd_mbox(hr_dev, 0, mailbox->dma, srq->srqn,
HNS_ROCE_CMD_QUERY_SRQC,
HNS_ROCE_CMD_TIMEOUT_MSECS);
if (ret) {
@@ -5540,7 +5540,7 @@ static int hns_roce_v2_modify_cq(struct ib_cq *cq, u16 cq_count, u16 cq_period)
hr_reg_write(cq_context, CQC_CQ_PERIOD, cq_period);
hr_reg_clear(cqc_mask, CQC_CQ_PERIOD);
- ret = hns_roce_cmd_mbox(hr_dev, mailbox->dma, 0, hr_cq->cqn, 1,
+ ret = hns_roce_cmd_mbox(hr_dev, mailbox->dma, 0, hr_cq->cqn,
HNS_ROCE_CMD_MODIFY_CQC,
HNS_ROCE_CMD_TIMEOUT_MSECS);
hns_roce_free_cmd_mailbox(hr_dev, mailbox);
@@ -5872,11 +5872,11 @@ static void hns_roce_v2_destroy_eqc(struct hns_roce_dev *hr_dev, u32 eqn)
if (eqn < hr_dev->caps.num_comp_vectors)
ret = hns_roce_cmd_mbox(hr_dev, 0, 0, eqn & HNS_ROCE_V2_EQN_M,
- 0, HNS_ROCE_CMD_DESTROY_CEQC,
+ HNS_ROCE_CMD_DESTROY_CEQC,
HNS_ROCE_CMD_TIMEOUT_MSECS);
else
ret = hns_roce_cmd_mbox(hr_dev, 0, 0, eqn & HNS_ROCE_V2_EQN_M,
- 0, HNS_ROCE_CMD_DESTROY_AEQC,
+ HNS_ROCE_CMD_DESTROY_AEQC,
HNS_ROCE_CMD_TIMEOUT_MSECS);
if (ret)
dev_err(dev, "[mailbox cmd] destroy eqc(%u) failed.\n", eqn);
@@ -6002,7 +6002,7 @@ static int hns_roce_v2_create_eq(struct hns_roce_dev *hr_dev,
if (ret)
goto err_cmd_mbox;
- ret = hns_roce_cmd_mbox(hr_dev, mailbox->dma, 0, eq->eqn, 0,
+ ret = hns_roce_cmd_mbox(hr_dev, mailbox->dma, 0, eq->eqn,
eq_cmd, HNS_ROCE_CMD_TIMEOUT_MSECS);
if (ret) {
dev_err(hr_dev->dev, "[mailbox cmd] create eqc failed.\n");
diff --git a/drivers/infiniband/hw/hns/hns_roce_hw_v2_dfx.c b/drivers/infiniband/hw/hns/hns_roce_hw_v2_dfx.c
index 5a97b5a0b7be..bce3a67b0b2d 100644
--- a/drivers/infiniband/hw/hns/hns_roce_hw_v2_dfx.c
+++ b/drivers/infiniband/hw/hns/hns_roce_hw_v2_dfx.c
@@ -18,7 +18,7 @@ int hns_roce_v2_query_cqc_info(struct hns_roce_dev *hr_dev, u32 cqn,
return PTR_ERR(mailbox);
cq_context = mailbox->buf;
- ret = hns_roce_cmd_mbox(hr_dev, 0, mailbox->dma, cqn, 0,
+ ret = hns_roce_cmd_mbox(hr_dev, 0, mailbox->dma, cqn,
HNS_ROCE_CMD_QUERY_CQC,
HNS_ROCE_CMD_TIMEOUT_MSECS);
if (ret) {
diff --git a/drivers/infiniband/hw/hns/hns_roce_mr.c b/drivers/infiniband/hw/hns/hns_roce_mr.c
index 2ee06b906b60..e0ec839f2f6f 100644
--- a/drivers/infiniband/hw/hns/hns_roce_mr.c
+++ b/drivers/infiniband/hw/hns/hns_roce_mr.c
@@ -51,7 +51,7 @@ static int hns_roce_hw_create_mpt(struct hns_roce_dev *hr_dev,
struct hns_roce_cmd_mailbox *mailbox,
unsigned long mpt_index)
{
- return hns_roce_cmd_mbox(hr_dev, mailbox->dma, 0, mpt_index, 0,
+ return hns_roce_cmd_mbox(hr_dev, mailbox->dma, 0, mpt_index,
HNS_ROCE_CMD_CREATE_MPT,
HNS_ROCE_CMD_TIMEOUT_MSECS);
}
@@ -61,7 +61,7 @@ int hns_roce_hw_destroy_mpt(struct hns_roce_dev *hr_dev,
unsigned long mpt_index)
{
return hns_roce_cmd_mbox(hr_dev, 0, mailbox ? mailbox->dma : 0,
- mpt_index, !mailbox, HNS_ROCE_CMD_DESTROY_MPT,
+ mpt_index, HNS_ROCE_CMD_DESTROY_MPT,
HNS_ROCE_CMD_TIMEOUT_MSECS);
}
@@ -303,7 +303,7 @@ struct ib_mr *hns_roce_rereg_user_mr(struct ib_mr *ibmr, int flags, u64 start,
return ERR_CAST(mailbox);
mtpt_idx = key_to_hw_index(mr->key) & (hr_dev->caps.num_mtpts - 1);
- ret = hns_roce_cmd_mbox(hr_dev, 0, mailbox->dma, mtpt_idx, 0,
+ ret = hns_roce_cmd_mbox(hr_dev, 0, mailbox->dma, mtpt_idx,
HNS_ROCE_CMD_QUERY_MPT,
HNS_ROCE_CMD_TIMEOUT_MSECS);
if (ret)
diff --git a/drivers/infiniband/hw/hns/hns_roce_srq.c b/drivers/infiniband/hw/hns/hns_roce_srq.c
index e64ef6903fb4..525e1eba263a 100644
--- a/drivers/infiniband/hw/hns/hns_roce_srq.c
+++ b/drivers/infiniband/hw/hns/hns_roce_srq.c
@@ -63,7 +63,7 @@ static int hns_roce_hw_create_srq(struct hns_roce_dev *dev,
struct hns_roce_cmd_mailbox *mailbox,
unsigned long srq_num)
{
- return hns_roce_cmd_mbox(dev, mailbox->dma, 0, srq_num, 0,
+ return hns_roce_cmd_mbox(dev, mailbox->dma, 0, srq_num,
HNS_ROCE_CMD_CREATE_SRQ,
HNS_ROCE_CMD_TIMEOUT_MSECS);
}
@@ -73,7 +73,7 @@ static int hns_roce_hw_destroy_srq(struct hns_roce_dev *dev,
unsigned long srq_num)
{
return hns_roce_cmd_mbox(dev, 0, mailbox ? mailbox->dma : 0, srq_num,
- mailbox ? 0 : 1, HNS_ROCE_CMD_DESTROY_SRQ,
+ HNS_ROCE_CMD_DESTROY_SRQ,
HNS_ROCE_CMD_TIMEOUT_MSECS);
}
--
2.33.0
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH for-next 2/8] RDMA/hns: Remove fixed parameter “timeout” in the mailbox
2022-02-18 11:05 [PATCH for-next 0/8] RDMA/hns: Clean up and refactor mailbox-related code Wenpeng Liang
2022-02-18 11:05 ` [PATCH for-next 1/8] RDMA/hns: Remove the unused parameter "op_modifier" in mailbox Wenpeng Liang
@ 2022-02-18 11:05 ` Wenpeng Liang
2022-02-24 13:31 ` Leon Romanovsky
2022-02-18 11:05 ` [PATCH for-next 3/8] RDMA/hns: Remove redundant parameter "mailbox" " Wenpeng Liang
` (5 subsequent siblings)
7 siblings, 1 reply; 18+ messages in thread
From: Wenpeng Liang @ 2022-02-18 11:05 UTC (permalink / raw)
To: jgg, leon; +Cc: linux-rdma, linuxarm, liangwenpeng
From: Chengchang Tang <tangchengchang@huawei.com>
The value of the function parameter “timeout” is unique. Therefore,
it is unnecessary to specify the parameter “timeout” value each time.
So remove it.
Signed-off-by: Chengchang Tang <tangchengchang@huawei.com>
Signed-off-by: Haoyue Xu <xuhaoyue1@hisilicon.com>
Signed-off-by: Wenpeng Liang <liangwenpeng@huawei.com>
---
drivers/infiniband/hw/hns/hns_roce_cmd.c | 22 ++++++------
drivers/infiniband/hw/hns/hns_roce_cmd.h | 2 +-
drivers/infiniband/hw/hns/hns_roce_cq.c | 5 ++-
drivers/infiniband/hw/hns/hns_roce_device.h | 3 +-
drivers/infiniband/hw/hns/hns_roce_hw_v2.c | 35 +++++++------------
.../infiniband/hw/hns/hns_roce_hw_v2_dfx.c | 3 +-
drivers/infiniband/hw/hns/hns_roce_mr.c | 9 ++---
drivers/infiniband/hw/hns/hns_roce_srq.c | 6 ++--
8 files changed, 34 insertions(+), 51 deletions(-)
diff --git a/drivers/infiniband/hw/hns/hns_roce_cmd.c b/drivers/infiniband/hw/hns/hns_roce_cmd.c
index ab89e70b6f04..3642e9282b42 100644
--- a/drivers/infiniband/hw/hns/hns_roce_cmd.c
+++ b/drivers/infiniband/hw/hns/hns_roce_cmd.c
@@ -49,7 +49,7 @@ static int hns_roce_cmd_mbox_post_hw(struct hns_roce_dev *hr_dev, u64 in_param,
/* this should be called with "poll_sem" */
static int __hns_roce_cmd_mbox_poll(struct hns_roce_dev *hr_dev, u64 in_param,
u64 out_param, unsigned long in_modifier,
- u16 op, unsigned int timeout)
+ u16 op)
{
int ret;
@@ -62,18 +62,18 @@ static int __hns_roce_cmd_mbox_poll(struct hns_roce_dev *hr_dev, u64 in_param,
return ret;
}
- return hr_dev->hw->poll_mbox_done(hr_dev, timeout);
+ return hr_dev->hw->poll_mbox_done(hr_dev);
}
static int hns_roce_cmd_mbox_poll(struct hns_roce_dev *hr_dev, u64 in_param,
u64 out_param, unsigned long in_modifier,
- u16 op, unsigned int timeout)
+ u16 op)
{
int ret;
down(&hr_dev->cmd.poll_sem);
ret = __hns_roce_cmd_mbox_poll(hr_dev, in_param, out_param, in_modifier,
- op, timeout);
+ op);
up(&hr_dev->cmd.poll_sem);
return ret;
@@ -99,7 +99,7 @@ void hns_roce_cmd_event(struct hns_roce_dev *hr_dev, u16 token, u8 status,
static int __hns_roce_cmd_mbox_wait(struct hns_roce_dev *hr_dev, u64 in_param,
u64 out_param, unsigned long in_modifier,
- u16 op, unsigned int timeout)
+ u16 op)
{
struct hns_roce_cmdq *cmd = &hr_dev->cmd;
struct hns_roce_cmd_context *context;
@@ -130,7 +130,7 @@ static int __hns_roce_cmd_mbox_wait(struct hns_roce_dev *hr_dev, u64 in_param,
}
if (!wait_for_completion_timeout(&context->done,
- msecs_to_jiffies(timeout))) {
+ msecs_to_jiffies(HNS_ROCE_CMD_TIMEOUT_MSECS))) {
dev_err_ratelimited(dev, "[cmd] token 0x%x mailbox 0x%x timeout.\n",
context->token, op);
ret = -EBUSY;
@@ -149,20 +149,20 @@ static int __hns_roce_cmd_mbox_wait(struct hns_roce_dev *hr_dev, u64 in_param,
static int hns_roce_cmd_mbox_wait(struct hns_roce_dev *hr_dev, u64 in_param,
u64 out_param, unsigned long in_modifier,
- u16 op, unsigned int timeout)
+ u16 op)
{
int ret;
down(&hr_dev->cmd.event_sem);
ret = __hns_roce_cmd_mbox_wait(hr_dev, in_param, out_param, in_modifier,
- op, timeout);
+ op);
up(&hr_dev->cmd.event_sem);
return ret;
}
int hns_roce_cmd_mbox(struct hns_roce_dev *hr_dev, u64 in_param, u64 out_param,
- unsigned long in_modifier, u16 op, unsigned int timeout)
+ unsigned long in_modifier, u16 op)
{
bool is_busy;
@@ -172,10 +172,10 @@ int hns_roce_cmd_mbox(struct hns_roce_dev *hr_dev, u64 in_param, u64 out_param,
if (hr_dev->cmd.use_events)
return hns_roce_cmd_mbox_wait(hr_dev, in_param, out_param,
- in_modifier, op, timeout);
+ in_modifier, op);
else
return hns_roce_cmd_mbox_poll(hr_dev, in_param, out_param,
- in_modifier, op, timeout);
+ in_modifier, op);
}
int hns_roce_cmd_init(struct hns_roce_dev *hr_dev)
diff --git a/drivers/infiniband/hw/hns/hns_roce_cmd.h b/drivers/infiniband/hw/hns/hns_roce_cmd.h
index 3055996935d5..23937b106aa5 100644
--- a/drivers/infiniband/hw/hns/hns_roce_cmd.h
+++ b/drivers/infiniband/hw/hns/hns_roce_cmd.h
@@ -140,7 +140,7 @@ enum {
};
int hns_roce_cmd_mbox(struct hns_roce_dev *hr_dev, u64 in_param, u64 out_param,
- unsigned long in_modifier, u16 op, unsigned int timeout);
+ unsigned long in_modifier, u16 op);
struct hns_roce_cmd_mailbox *
hns_roce_alloc_cmd_mailbox(struct hns_roce_dev *hr_dev);
diff --git a/drivers/infiniband/hw/hns/hns_roce_cq.c b/drivers/infiniband/hw/hns/hns_roce_cq.c
index 6fbfa262e6c7..22bd9e066a38 100644
--- a/drivers/infiniband/hw/hns/hns_roce_cq.c
+++ b/drivers/infiniband/hw/hns/hns_roce_cq.c
@@ -141,7 +141,7 @@ static int alloc_cqc(struct hns_roce_dev *hr_dev, struct hns_roce_cq *hr_cq)
/* Send mailbox to hw */
ret = hns_roce_cmd_mbox(hr_dev, mailbox->dma, 0, hr_cq->cqn,
- HNS_ROCE_CMD_CREATE_CQC, HNS_ROCE_CMD_TIMEOUT_MSECS);
+ HNS_ROCE_CMD_CREATE_CQC);
hns_roce_free_cmd_mailbox(hr_dev, mailbox);
if (ret) {
ibdev_err(ibdev,
@@ -175,8 +175,7 @@ static void free_cqc(struct hns_roce_dev *hr_dev, struct hns_roce_cq *hr_cq)
int ret;
ret = hns_roce_cmd_mbox(hr_dev, 0, 0, hr_cq->cqn,
- HNS_ROCE_CMD_DESTROY_CQC,
- HNS_ROCE_CMD_TIMEOUT_MSECS);
+ HNS_ROCE_CMD_DESTROY_CQC);
if (ret)
dev_err(dev, "DESTROY_CQ failed (%d) for CQN %06lx\n", ret,
hr_cq->cqn);
diff --git a/drivers/infiniband/hw/hns/hns_roce_device.h b/drivers/infiniband/hw/hns/hns_roce_device.h
index 6da996f46cf3..2657f4c513ee 100644
--- a/drivers/infiniband/hw/hns/hns_roce_device.h
+++ b/drivers/infiniband/hw/hns/hns_roce_device.h
@@ -854,8 +854,7 @@ struct hns_roce_hw {
int (*post_mbox)(struct hns_roce_dev *hr_dev, u64 in_param,
u64 out_param, u32 in_modifier, u16 op,
u16 token, int event);
- int (*poll_mbox_done)(struct hns_roce_dev *hr_dev,
- unsigned int timeout);
+ int (*poll_mbox_done)(struct hns_roce_dev *hr_dev);
bool (*chk_mbox_avail)(struct hns_roce_dev *hr_dev, bool *is_busy);
int (*set_gid)(struct hns_roce_dev *hr_dev, int gid_index,
const union ib_gid *gid, const struct ib_gid_attr *attr);
diff --git a/drivers/infiniband/hw/hns/hns_roce_hw_v2.c b/drivers/infiniband/hw/hns/hns_roce_hw_v2.c
index c86cf75c4caa..a79ca9d3c62f 100644
--- a/drivers/infiniband/hw/hns/hns_roce_hw_v2.c
+++ b/drivers/infiniband/hw/hns/hns_roce_hw_v2.c
@@ -1353,8 +1353,7 @@ static int config_hem_ba_to_hw(struct hns_roce_dev *hr_dev, unsigned long obj,
if (IS_ERR(mbox))
return PTR_ERR(mbox);
- ret = hns_roce_cmd_mbox(hr_dev, base_addr, mbox->dma, obj, op,
- HNS_ROCE_CMD_TIMEOUT_MSECS);
+ ret = hns_roce_cmd_mbox(hr_dev, base_addr, mbox->dma, obj, op);
hns_roce_free_cmd_mailbox(hr_dev, mbox);
return ret;
}
@@ -2874,12 +2873,13 @@ static int v2_post_mbox(struct hns_roce_dev *hr_dev, u64 in_param,
return ret;
}
-static int v2_poll_mbox_done(struct hns_roce_dev *hr_dev, unsigned int timeout)
+static int v2_poll_mbox_done(struct hns_roce_dev *hr_dev)
{
u8 status = 0;
int ret;
- ret = v2_wait_mbox_complete(hr_dev, timeout, &status);
+ ret = v2_wait_mbox_complete(hr_dev, HNS_ROCE_CMD_TIMEOUT_MSECS,
+ &status);
if (!ret) {
if (status != MB_ST_COMPLETE_SUCC)
return -EBUSY;
@@ -3992,8 +3992,7 @@ static int hns_roce_v2_clear_hem(struct hns_roce_dev *hr_dev,
return PTR_ERR(mailbox);
/* configure the tag and op */
- ret = hns_roce_cmd_mbox(hr_dev, 0, mailbox->dma, obj, op,
- HNS_ROCE_CMD_TIMEOUT_MSECS);
+ ret = hns_roce_cmd_mbox(hr_dev, 0, mailbox->dma, obj, op);
hns_roce_free_cmd_mailbox(hr_dev, mailbox);
return ret;
@@ -4018,8 +4017,7 @@ static int hns_roce_v2_qp_modify(struct hns_roce_dev *hr_dev,
memcpy(mailbox->buf + qpc_size, qpc_mask, qpc_size);
ret = hns_roce_cmd_mbox(hr_dev, mailbox->dma, 0, hr_qp->qpn,
- HNS_ROCE_CMD_MODIFY_QPC,
- HNS_ROCE_CMD_TIMEOUT_MSECS);
+ HNS_ROCE_CMD_MODIFY_QPC);
hns_roce_free_cmd_mailbox(hr_dev, mailbox);
@@ -5093,8 +5091,7 @@ static int hns_roce_v2_query_qpc(struct hns_roce_dev *hr_dev,
return PTR_ERR(mailbox);
ret = hns_roce_cmd_mbox(hr_dev, 0, mailbox->dma, hr_qp->qpn,
- HNS_ROCE_CMD_QUERY_QPC,
- HNS_ROCE_CMD_TIMEOUT_MSECS);
+ HNS_ROCE_CMD_QUERY_QPC);
if (ret)
goto out;
@@ -5461,8 +5458,7 @@ static int hns_roce_v2_modify_srq(struct ib_srq *ibsrq,
hr_reg_clear(srqc_mask, SRQC_LIMIT_WL);
ret = hns_roce_cmd_mbox(hr_dev, mailbox->dma, 0, srq->srqn,
- HNS_ROCE_CMD_MODIFY_SRQC,
- HNS_ROCE_CMD_TIMEOUT_MSECS);
+ HNS_ROCE_CMD_MODIFY_SRQC);
hns_roce_free_cmd_mailbox(hr_dev, mailbox);
if (ret) {
ibdev_err(&hr_dev->ib_dev,
@@ -5489,8 +5485,7 @@ static int hns_roce_v2_query_srq(struct ib_srq *ibsrq, struct ib_srq_attr *attr)
srq_context = mailbox->buf;
ret = hns_roce_cmd_mbox(hr_dev, 0, mailbox->dma, srq->srqn,
- HNS_ROCE_CMD_QUERY_SRQC,
- HNS_ROCE_CMD_TIMEOUT_MSECS);
+ HNS_ROCE_CMD_QUERY_SRQC);
if (ret) {
ibdev_err(&hr_dev->ib_dev,
"failed to process cmd of querying SRQ, ret = %d.\n",
@@ -5541,8 +5536,7 @@ static int hns_roce_v2_modify_cq(struct ib_cq *cq, u16 cq_count, u16 cq_period)
hr_reg_clear(cqc_mask, CQC_CQ_PERIOD);
ret = hns_roce_cmd_mbox(hr_dev, mailbox->dma, 0, hr_cq->cqn,
- HNS_ROCE_CMD_MODIFY_CQC,
- HNS_ROCE_CMD_TIMEOUT_MSECS);
+ HNS_ROCE_CMD_MODIFY_CQC);
hns_roce_free_cmd_mailbox(hr_dev, mailbox);
if (ret)
ibdev_err(&hr_dev->ib_dev,
@@ -5872,12 +5866,10 @@ static void hns_roce_v2_destroy_eqc(struct hns_roce_dev *hr_dev, u32 eqn)
if (eqn < hr_dev->caps.num_comp_vectors)
ret = hns_roce_cmd_mbox(hr_dev, 0, 0, eqn & HNS_ROCE_V2_EQN_M,
- HNS_ROCE_CMD_DESTROY_CEQC,
- HNS_ROCE_CMD_TIMEOUT_MSECS);
+ HNS_ROCE_CMD_DESTROY_CEQC);
else
ret = hns_roce_cmd_mbox(hr_dev, 0, 0, eqn & HNS_ROCE_V2_EQN_M,
- HNS_ROCE_CMD_DESTROY_AEQC,
- HNS_ROCE_CMD_TIMEOUT_MSECS);
+ HNS_ROCE_CMD_DESTROY_AEQC);
if (ret)
dev_err(dev, "[mailbox cmd] destroy eqc(%u) failed.\n", eqn);
}
@@ -6002,8 +5994,7 @@ static int hns_roce_v2_create_eq(struct hns_roce_dev *hr_dev,
if (ret)
goto err_cmd_mbox;
- ret = hns_roce_cmd_mbox(hr_dev, mailbox->dma, 0, eq->eqn,
- eq_cmd, HNS_ROCE_CMD_TIMEOUT_MSECS);
+ ret = hns_roce_cmd_mbox(hr_dev, mailbox->dma, 0, eq->eqn, eq_cmd);
if (ret) {
dev_err(hr_dev->dev, "[mailbox cmd] create eqc failed.\n");
goto err_cmd_mbox;
diff --git a/drivers/infiniband/hw/hns/hns_roce_hw_v2_dfx.c b/drivers/infiniband/hw/hns/hns_roce_hw_v2_dfx.c
index bce3a67b0b2d..107288150e3f 100644
--- a/drivers/infiniband/hw/hns/hns_roce_hw_v2_dfx.c
+++ b/drivers/infiniband/hw/hns/hns_roce_hw_v2_dfx.c
@@ -19,8 +19,7 @@ int hns_roce_v2_query_cqc_info(struct hns_roce_dev *hr_dev, u32 cqn,
cq_context = mailbox->buf;
ret = hns_roce_cmd_mbox(hr_dev, 0, mailbox->dma, cqn,
- HNS_ROCE_CMD_QUERY_CQC,
- HNS_ROCE_CMD_TIMEOUT_MSECS);
+ HNS_ROCE_CMD_QUERY_CQC);
if (ret) {
dev_err(hr_dev->dev, "QUERY cqc cmd process error\n");
goto err_mailbox;
diff --git a/drivers/infiniband/hw/hns/hns_roce_mr.c b/drivers/infiniband/hw/hns/hns_roce_mr.c
index e0ec839f2f6f..bf4ea6bfff84 100644
--- a/drivers/infiniband/hw/hns/hns_roce_mr.c
+++ b/drivers/infiniband/hw/hns/hns_roce_mr.c
@@ -52,8 +52,7 @@ static int hns_roce_hw_create_mpt(struct hns_roce_dev *hr_dev,
unsigned long mpt_index)
{
return hns_roce_cmd_mbox(hr_dev, mailbox->dma, 0, mpt_index,
- HNS_ROCE_CMD_CREATE_MPT,
- HNS_ROCE_CMD_TIMEOUT_MSECS);
+ HNS_ROCE_CMD_CREATE_MPT);
}
int hns_roce_hw_destroy_mpt(struct hns_roce_dev *hr_dev,
@@ -61,8 +60,7 @@ int hns_roce_hw_destroy_mpt(struct hns_roce_dev *hr_dev,
unsigned long mpt_index)
{
return hns_roce_cmd_mbox(hr_dev, 0, mailbox ? mailbox->dma : 0,
- mpt_index, HNS_ROCE_CMD_DESTROY_MPT,
- HNS_ROCE_CMD_TIMEOUT_MSECS);
+ mpt_index, HNS_ROCE_CMD_DESTROY_MPT);
}
static int alloc_mr_key(struct hns_roce_dev *hr_dev, struct hns_roce_mr *mr)
@@ -304,8 +302,7 @@ struct ib_mr *hns_roce_rereg_user_mr(struct ib_mr *ibmr, int flags, u64 start,
mtpt_idx = key_to_hw_index(mr->key) & (hr_dev->caps.num_mtpts - 1);
ret = hns_roce_cmd_mbox(hr_dev, 0, mailbox->dma, mtpt_idx,
- HNS_ROCE_CMD_QUERY_MPT,
- HNS_ROCE_CMD_TIMEOUT_MSECS);
+ HNS_ROCE_CMD_QUERY_MPT);
if (ret)
goto free_cmd_mbox;
diff --git a/drivers/infiniband/hw/hns/hns_roce_srq.c b/drivers/infiniband/hw/hns/hns_roce_srq.c
index 525e1eba263a..5bb8ccea95a6 100644
--- a/drivers/infiniband/hw/hns/hns_roce_srq.c
+++ b/drivers/infiniband/hw/hns/hns_roce_srq.c
@@ -64,8 +64,7 @@ static int hns_roce_hw_create_srq(struct hns_roce_dev *dev,
unsigned long srq_num)
{
return hns_roce_cmd_mbox(dev, mailbox->dma, 0, srq_num,
- HNS_ROCE_CMD_CREATE_SRQ,
- HNS_ROCE_CMD_TIMEOUT_MSECS);
+ HNS_ROCE_CMD_CREATE_SRQ);
}
static int hns_roce_hw_destroy_srq(struct hns_roce_dev *dev,
@@ -73,8 +72,7 @@ static int hns_roce_hw_destroy_srq(struct hns_roce_dev *dev,
unsigned long srq_num)
{
return hns_roce_cmd_mbox(dev, 0, mailbox ? mailbox->dma : 0, srq_num,
- HNS_ROCE_CMD_DESTROY_SRQ,
- HNS_ROCE_CMD_TIMEOUT_MSECS);
+ HNS_ROCE_CMD_DESTROY_SRQ);
}
static int alloc_srqc(struct hns_roce_dev *hr_dev, struct hns_roce_srq *srq)
--
2.33.0
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH for-next 3/8] RDMA/hns: Remove redundant parameter "mailbox" in the mailbox
2022-02-18 11:05 [PATCH for-next 0/8] RDMA/hns: Clean up and refactor mailbox-related code Wenpeng Liang
2022-02-18 11:05 ` [PATCH for-next 1/8] RDMA/hns: Remove the unused parameter "op_modifier" in mailbox Wenpeng Liang
2022-02-18 11:05 ` [PATCH for-next 2/8] RDMA/hns: Remove fixed parameter “timeout” in the mailbox Wenpeng Liang
@ 2022-02-18 11:05 ` Wenpeng Liang
2022-02-24 13:31 ` Leon Romanovsky
2022-02-18 11:05 ` [PATCH for-next 4/8] RDMA/hns: Fix the wrong type of parameter "op" of " Wenpeng Liang
` (4 subsequent siblings)
7 siblings, 1 reply; 18+ messages in thread
From: Wenpeng Liang @ 2022-02-18 11:05 UTC (permalink / raw)
To: jgg, leon; +Cc: linux-rdma, linuxarm, liangwenpeng
The parameter "out_param" of the mailbox is always null when the context is
destroyed. So remove the function parameter "mailbox".
Signed-off-by: Wenpeng Liang <liangwenpeng@huawei.com>
---
drivers/infiniband/hw/hns/hns_roce_device.h | 1 -
drivers/infiniband/hw/hns/hns_roce_mr.c | 11 +++++------
drivers/infiniband/hw/hns/hns_roce_srq.c | 6 ++----
3 files changed, 7 insertions(+), 11 deletions(-)
diff --git a/drivers/infiniband/hw/hns/hns_roce_device.h b/drivers/infiniband/hw/hns/hns_roce_device.h
index 2657f4c513ee..f21c7aa43324 100644
--- a/drivers/infiniband/hw/hns/hns_roce_device.h
+++ b/drivers/infiniband/hw/hns/hns_roce_device.h
@@ -1145,7 +1145,6 @@ int hns_roce_map_mr_sg(struct ib_mr *ibmr, struct scatterlist *sg, int sg_nents,
unsigned int *sg_offset);
int hns_roce_dereg_mr(struct ib_mr *ibmr, struct ib_udata *udata);
int hns_roce_hw_destroy_mpt(struct hns_roce_dev *hr_dev,
- struct hns_roce_cmd_mailbox *mailbox,
unsigned long mpt_index);
unsigned long key_to_hw_index(u32 key);
diff --git a/drivers/infiniband/hw/hns/hns_roce_mr.c b/drivers/infiniband/hw/hns/hns_roce_mr.c
index bf4ea6bfff84..62a57cae800c 100644
--- a/drivers/infiniband/hw/hns/hns_roce_mr.c
+++ b/drivers/infiniband/hw/hns/hns_roce_mr.c
@@ -56,11 +56,10 @@ static int hns_roce_hw_create_mpt(struct hns_roce_dev *hr_dev,
}
int hns_roce_hw_destroy_mpt(struct hns_roce_dev *hr_dev,
- struct hns_roce_cmd_mailbox *mailbox,
unsigned long mpt_index)
{
- return hns_roce_cmd_mbox(hr_dev, 0, mailbox ? mailbox->dma : 0,
- mpt_index, HNS_ROCE_CMD_DESTROY_MPT);
+ return hns_roce_cmd_mbox(hr_dev, 0, 0, mpt_index,
+ HNS_ROCE_CMD_DESTROY_MPT);
}
static int alloc_mr_key(struct hns_roce_dev *hr_dev, struct hns_roce_mr *mr)
@@ -142,7 +141,7 @@ static void hns_roce_mr_free(struct hns_roce_dev *hr_dev,
int ret;
if (mr->enabled) {
- ret = hns_roce_hw_destroy_mpt(hr_dev, NULL,
+ ret = hns_roce_hw_destroy_mpt(hr_dev,
key_to_hw_index(mr->key) &
(hr_dev->caps.num_mtpts - 1));
if (ret)
@@ -306,7 +305,7 @@ struct ib_mr *hns_roce_rereg_user_mr(struct ib_mr *ibmr, int flags, u64 start,
if (ret)
goto free_cmd_mbox;
- ret = hns_roce_hw_destroy_mpt(hr_dev, NULL, mtpt_idx);
+ ret = hns_roce_hw_destroy_mpt(hr_dev, mtpt_idx);
if (ret)
ibdev_warn(ib_dev, "failed to destroy MPT, ret = %d.\n", ret);
@@ -477,7 +476,7 @@ static void hns_roce_mw_free(struct hns_roce_dev *hr_dev,
int ret;
if (mw->enabled) {
- ret = hns_roce_hw_destroy_mpt(hr_dev, NULL,
+ ret = hns_roce_hw_destroy_mpt(hr_dev,
key_to_hw_index(mw->rkey) &
(hr_dev->caps.num_mtpts - 1));
if (ret)
diff --git a/drivers/infiniband/hw/hns/hns_roce_srq.c b/drivers/infiniband/hw/hns/hns_roce_srq.c
index 5bb8ccea95a6..1fef5d630485 100644
--- a/drivers/infiniband/hw/hns/hns_roce_srq.c
+++ b/drivers/infiniband/hw/hns/hns_roce_srq.c
@@ -68,11 +68,9 @@ static int hns_roce_hw_create_srq(struct hns_roce_dev *dev,
}
static int hns_roce_hw_destroy_srq(struct hns_roce_dev *dev,
- struct hns_roce_cmd_mailbox *mailbox,
unsigned long srq_num)
{
- return hns_roce_cmd_mbox(dev, 0, mailbox ? mailbox->dma : 0, srq_num,
- HNS_ROCE_CMD_DESTROY_SRQ);
+ return hns_roce_cmd_mbox(dev, 0, 0, srq_num, HNS_ROCE_CMD_DESTROY_SRQ);
}
static int alloc_srqc(struct hns_roce_dev *hr_dev, struct hns_roce_srq *srq)
@@ -144,7 +142,7 @@ static void free_srqc(struct hns_roce_dev *hr_dev, struct hns_roce_srq *srq)
struct hns_roce_srq_table *srq_table = &hr_dev->srq_table;
int ret;
- ret = hns_roce_hw_destroy_srq(hr_dev, NULL, srq->srqn);
+ ret = hns_roce_hw_destroy_srq(hr_dev, srq->srqn);
if (ret)
dev_err(hr_dev->dev, "DESTROY_SRQ failed (%d) for SRQN %06lx\n",
ret, srq->srqn);
--
2.33.0
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH for-next 4/8] RDMA/hns: Fix the wrong type of parameter "op" of the mailbox
2022-02-18 11:05 [PATCH for-next 0/8] RDMA/hns: Clean up and refactor mailbox-related code Wenpeng Liang
` (2 preceding siblings ...)
2022-02-18 11:05 ` [PATCH for-next 3/8] RDMA/hns: Remove redundant parameter "mailbox" " Wenpeng Liang
@ 2022-02-18 11:05 ` Wenpeng Liang
2022-02-24 13:31 ` Leon Romanovsky
2022-02-18 11:05 ` [PATCH for-next 5/8] RDMA/hns: Refactor mailbox functions Wenpeng Liang
` (3 subsequent siblings)
7 siblings, 1 reply; 18+ messages in thread
From: Wenpeng Liang @ 2022-02-18 11:05 UTC (permalink / raw)
To: jgg, leon; +Cc: linux-rdma, linuxarm, liangwenpeng
The "op" field of the mailbox occupies 8 bits, so the parameter "op"
should be of type u8.
Signed-off-by: Wenpeng Liang <liangwenpeng@huawei.com>
---
drivers/infiniband/hw/hns/hns_roce_cmd.c | 12 ++++----
drivers/infiniband/hw/hns/hns_roce_cmd.h | 2 +-
drivers/infiniband/hw/hns/hns_roce_device.h | 6 ++--
drivers/infiniband/hw/hns/hns_roce_hem.c | 4 +--
drivers/infiniband/hw/hns/hns_roce_hw_v2.c | 33 ++++++++++-----------
5 files changed, 28 insertions(+), 29 deletions(-)
diff --git a/drivers/infiniband/hw/hns/hns_roce_cmd.c b/drivers/infiniband/hw/hns/hns_roce_cmd.c
index 3642e9282b42..df11acd8030e 100644
--- a/drivers/infiniband/hw/hns/hns_roce_cmd.c
+++ b/drivers/infiniband/hw/hns/hns_roce_cmd.c
@@ -39,7 +39,7 @@
#define CMD_MAX_NUM 32
static int hns_roce_cmd_mbox_post_hw(struct hns_roce_dev *hr_dev, u64 in_param,
- u64 out_param, u32 in_modifier, u16 op,
+ u64 out_param, u32 in_modifier, u8 op,
u16 token, int event)
{
return hr_dev->hw->post_mbox(hr_dev, in_param, out_param, in_modifier,
@@ -49,7 +49,7 @@ static int hns_roce_cmd_mbox_post_hw(struct hns_roce_dev *hr_dev, u64 in_param,
/* this should be called with "poll_sem" */
static int __hns_roce_cmd_mbox_poll(struct hns_roce_dev *hr_dev, u64 in_param,
u64 out_param, unsigned long in_modifier,
- u16 op)
+ u8 op)
{
int ret;
@@ -67,7 +67,7 @@ static int __hns_roce_cmd_mbox_poll(struct hns_roce_dev *hr_dev, u64 in_param,
static int hns_roce_cmd_mbox_poll(struct hns_roce_dev *hr_dev, u64 in_param,
u64 out_param, unsigned long in_modifier,
- u16 op)
+ u8 op)
{
int ret;
@@ -99,7 +99,7 @@ void hns_roce_cmd_event(struct hns_roce_dev *hr_dev, u16 token, u8 status,
static int __hns_roce_cmd_mbox_wait(struct hns_roce_dev *hr_dev, u64 in_param,
u64 out_param, unsigned long in_modifier,
- u16 op)
+ u8 op)
{
struct hns_roce_cmdq *cmd = &hr_dev->cmd;
struct hns_roce_cmd_context *context;
@@ -149,7 +149,7 @@ static int __hns_roce_cmd_mbox_wait(struct hns_roce_dev *hr_dev, u64 in_param,
static int hns_roce_cmd_mbox_wait(struct hns_roce_dev *hr_dev, u64 in_param,
u64 out_param, unsigned long in_modifier,
- u16 op)
+ u8 op)
{
int ret;
@@ -162,7 +162,7 @@ static int hns_roce_cmd_mbox_wait(struct hns_roce_dev *hr_dev, u64 in_param,
}
int hns_roce_cmd_mbox(struct hns_roce_dev *hr_dev, u64 in_param, u64 out_param,
- unsigned long in_modifier, u16 op)
+ unsigned long in_modifier, u8 op)
{
bool is_busy;
diff --git a/drivers/infiniband/hw/hns/hns_roce_cmd.h b/drivers/infiniband/hw/hns/hns_roce_cmd.h
index 23937b106aa5..7928790061b8 100644
--- a/drivers/infiniband/hw/hns/hns_roce_cmd.h
+++ b/drivers/infiniband/hw/hns/hns_roce_cmd.h
@@ -140,7 +140,7 @@ enum {
};
int hns_roce_cmd_mbox(struct hns_roce_dev *hr_dev, u64 in_param, u64 out_param,
- unsigned long in_modifier, u16 op);
+ unsigned long in_modifier, u8 op);
struct hns_roce_cmd_mailbox *
hns_roce_alloc_cmd_mailbox(struct hns_roce_dev *hr_dev);
diff --git a/drivers/infiniband/hw/hns/hns_roce_device.h b/drivers/infiniband/hw/hns/hns_roce_device.h
index f21c7aa43324..8dd7919f8698 100644
--- a/drivers/infiniband/hw/hns/hns_roce_device.h
+++ b/drivers/infiniband/hw/hns/hns_roce_device.h
@@ -852,7 +852,7 @@ struct hns_roce_hw {
int (*hw_init)(struct hns_roce_dev *hr_dev);
void (*hw_exit)(struct hns_roce_dev *hr_dev);
int (*post_mbox)(struct hns_roce_dev *hr_dev, u64 in_param,
- u64 out_param, u32 in_modifier, u16 op,
+ u64 out_param, u32 in_modifier, u8 op,
u16 token, int event);
int (*poll_mbox_done)(struct hns_roce_dev *hr_dev);
bool (*chk_mbox_avail)(struct hns_roce_dev *hr_dev, bool *is_busy);
@@ -872,10 +872,10 @@ struct hns_roce_hw {
struct hns_roce_cq *hr_cq, void *mb_buf, u64 *mtts,
dma_addr_t dma_handle);
int (*set_hem)(struct hns_roce_dev *hr_dev,
- struct hns_roce_hem_table *table, int obj, int step_idx);
+ struct hns_roce_hem_table *table, int obj, u32 step_idx);
int (*clear_hem)(struct hns_roce_dev *hr_dev,
struct hns_roce_hem_table *table, int obj,
- int step_idx);
+ u32 step_idx);
int (*modify_qp)(struct ib_qp *ibqp, const struct ib_qp_attr *attr,
int attr_mask, enum ib_qp_state cur_state,
enum ib_qp_state new_state);
diff --git a/drivers/infiniband/hw/hns/hns_roce_hem.c b/drivers/infiniband/hw/hns/hns_roce_hem.c
index 8917365cc6b8..ce1a0d2792a3 100644
--- a/drivers/infiniband/hw/hns/hns_roce_hem.c
+++ b/drivers/infiniband/hw/hns/hns_roce_hem.c
@@ -488,7 +488,7 @@ static int set_mhop_hem(struct hns_roce_dev *hr_dev,
struct hns_roce_hem_index *index)
{
struct ib_device *ibdev = &hr_dev->ib_dev;
- int step_idx;
+ u32 step_idx;
int ret = 0;
if (index->inited & HEM_INDEX_L0) {
@@ -618,7 +618,7 @@ static void clear_mhop_hem(struct hns_roce_dev *hr_dev,
struct ib_device *ibdev = &hr_dev->ib_dev;
u32 hop_num = mhop->hop_num;
u32 chunk_ba_num;
- int step_idx;
+ u32 step_idx;
index->inited = HEM_INDEX_BUF;
chunk_ba_num = mhop->bt_chunk_size / BA_BYTE_LEN;
diff --git a/drivers/infiniband/hw/hns/hns_roce_hw_v2.c b/drivers/infiniband/hw/hns/hns_roce_hw_v2.c
index a79ca9d3c62f..63571abfc019 100644
--- a/drivers/infiniband/hw/hns/hns_roce_hw_v2.c
+++ b/drivers/infiniband/hw/hns/hns_roce_hw_v2.c
@@ -1345,7 +1345,7 @@ static int hns_roce_cmq_send(struct hns_roce_dev *hr_dev,
}
static int config_hem_ba_to_hw(struct hns_roce_dev *hr_dev, unsigned long obj,
- dma_addr_t base_addr, u16 op)
+ dma_addr_t base_addr, u8 op)
{
struct hns_roce_cmd_mailbox *mbox = hns_roce_alloc_cmd_mailbox(hr_dev);
int ret;
@@ -2781,7 +2781,7 @@ static void hns_roce_v2_exit(struct hns_roce_dev *hr_dev)
static int hns_roce_mbox_post(struct hns_roce_dev *hr_dev, u64 in_param,
u64 out_param, u32 in_modifier,
- u16 op, u16 token, int event)
+ u8 op, u16 token, int event)
{
struct hns_roce_cmq_desc desc;
struct hns_roce_post_mbox *mb = (struct hns_roce_post_mbox *)desc.data;
@@ -2848,7 +2848,7 @@ static int v2_wait_mbox_complete(struct hns_roce_dev *hr_dev, u32 timeout,
static int v2_post_mbox(struct hns_roce_dev *hr_dev, u64 in_param,
u64 out_param, u32 in_modifier,
- u16 op, u16 token, int event)
+ u8 op, u16 token, int event)
{
u8 status = 0;
int ret;
@@ -3818,9 +3818,9 @@ static int hns_roce_v2_poll_cq(struct ib_cq *ibcq, int num_entries,
}
static int get_op_for_set_hem(struct hns_roce_dev *hr_dev, u32 type,
- int step_idx, u16 *mbox_op)
+ u32 step_idx, u8 *mbox_op)
{
- u16 op;
+ u8 op;
switch (type) {
case HEM_TYPE_QPC:
@@ -3872,10 +3872,10 @@ static int config_gmv_ba_to_hw(struct hns_roce_dev *hr_dev, unsigned long obj,
}
static int set_hem_to_hw(struct hns_roce_dev *hr_dev, int obj,
- dma_addr_t base_addr, u32 hem_type, int step_idx)
+ dma_addr_t base_addr, u32 hem_type, u32 step_idx)
{
int ret;
- u16 op;
+ u8 op;
if (unlikely(hem_type == HEM_TYPE_GMV))
return config_gmv_ba_to_hw(hr_dev, obj, base_addr);
@@ -3892,7 +3892,7 @@ static int set_hem_to_hw(struct hns_roce_dev *hr_dev, int obj,
static int hns_roce_v2_set_hem(struct hns_roce_dev *hr_dev,
struct hns_roce_hem_table *table, int obj,
- int step_idx)
+ u32 step_idx)
{
struct hns_roce_hem_iter iter;
struct hns_roce_hem_mhop mhop;
@@ -3951,12 +3951,12 @@ static int hns_roce_v2_set_hem(struct hns_roce_dev *hr_dev,
static int hns_roce_v2_clear_hem(struct hns_roce_dev *hr_dev,
struct hns_roce_hem_table *table, int obj,
- int step_idx)
+ u32 step_idx)
{
- struct device *dev = hr_dev->dev;
struct hns_roce_cmd_mailbox *mailbox;
+ struct device *dev = hr_dev->dev;
+ u8 op = 0xff;
int ret;
- u16 op = 0xff;
if (!hns_roce_check_whether_mhop(hr_dev, table->type))
return 0;
@@ -5975,8 +5975,7 @@ static int alloc_eq_buf(struct hns_roce_dev *hr_dev, struct hns_roce_eq *eq)
}
static int hns_roce_v2_create_eq(struct hns_roce_dev *hr_dev,
- struct hns_roce_eq *eq,
- unsigned int eq_cmd)
+ struct hns_roce_eq *eq, u8 eq_cmd)
{
struct hns_roce_cmd_mailbox *mailbox;
int ret;
@@ -6105,14 +6104,14 @@ static int hns_roce_v2_init_eq_table(struct hns_roce_dev *hr_dev)
struct hns_roce_eq_table *eq_table = &hr_dev->eq_table;
struct device *dev = hr_dev->dev;
struct hns_roce_eq *eq;
- unsigned int eq_cmd;
- int irq_num;
- int eq_num;
int other_num;
int comp_num;
int aeq_num;
- int i;
+ int irq_num;
+ int eq_num;
+ u8 eq_cmd;
int ret;
+ int i;
other_num = hr_dev->caps.num_other_vectors;
comp_num = hr_dev->caps.num_comp_vectors;
--
2.33.0
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH for-next 5/8] RDMA/hns: Refactor mailbox functions
2022-02-18 11:05 [PATCH for-next 0/8] RDMA/hns: Clean up and refactor mailbox-related code Wenpeng Liang
` (3 preceding siblings ...)
2022-02-18 11:05 ` [PATCH for-next 4/8] RDMA/hns: Fix the wrong type of parameter "op" of " Wenpeng Liang
@ 2022-02-18 11:05 ` Wenpeng Liang
2022-02-24 13:30 ` Leon Romanovsky
2022-02-18 11:05 ` [PATCH for-next 6/8] RDMA/hns: Remove similar code that configures the hardware contexts Wenpeng Liang
` (2 subsequent siblings)
7 siblings, 1 reply; 18+ messages in thread
From: Wenpeng Liang @ 2022-02-18 11:05 UTC (permalink / raw)
To: jgg, leon; +Cc: linux-rdma, linuxarm, liangwenpeng
From: Chengchang Tang <tangchengchang@huawei.com>
The current mailbox functions have too many parameters, making the code
difficult to maintain. So construct a new structure mbox_msg to pass the
information needed by mailbox.
Signed-off-by: Chengchang Tang <tangchengchang@huawei.com>
Signed-off-by: Wenpeng Liang <liangwenpeng@huawei.com>
---
drivers/infiniband/hw/hns/hns_roce_cmd.c | 84 +++++++------
drivers/infiniband/hw/hns/hns_roce_cmd.h | 2 +-
drivers/infiniband/hw/hns/hns_roce_cq.c | 9 +-
drivers/infiniband/hw/hns/hns_roce_device.h | 14 ++-
drivers/infiniband/hw/hns/hns_roce_hw_v2.c | 111 +++++++++---------
.../infiniband/hw/hns/hns_roce_hw_v2_dfx.c | 4 +-
drivers/infiniband/hw/hns/hns_roce_mr.c | 13 +-
drivers/infiniband/hw/hns/hns_roce_srq.c | 6 +-
8 files changed, 133 insertions(+), 110 deletions(-)
diff --git a/drivers/infiniband/hw/hns/hns_roce_cmd.c b/drivers/infiniband/hw/hns/hns_roce_cmd.c
index df11acd8030e..0d4766cf6e24 100644
--- a/drivers/infiniband/hw/hns/hns_roce_cmd.c
+++ b/drivers/infiniband/hw/hns/hns_roce_cmd.c
@@ -38,42 +38,60 @@
#define CMD_POLL_TOKEN 0xffff
#define CMD_MAX_NUM 32
-static int hns_roce_cmd_mbox_post_hw(struct hns_roce_dev *hr_dev, u64 in_param,
- u64 out_param, u32 in_modifier, u8 op,
- u16 token, int event)
+static int hns_roce_cmd_mbox_post_hw(struct hns_roce_dev *hr_dev,
+ struct hns_roce_mbox_msg *mbox_msg)
{
- return hr_dev->hw->post_mbox(hr_dev, in_param, out_param, in_modifier,
- op, token, event);
+ return hr_dev->hw->post_mbox(hr_dev, mbox_msg);
+}
+
+static void hns_roce_set_basic_mbox_msg(struct hns_roce_mbox_msg *mbox_msg,
+ u64 in_param, u64 out_param, u8 cmd,
+ unsigned long tag)
+{
+ mbox_msg->in_param = in_param;
+ mbox_msg->out_param = out_param;
+ mbox_msg->cmd = cmd;
+ mbox_msg->tag = tag;
+}
+
+static void hns_roce_set_poll_mbox_msg(struct hns_roce_mbox_msg *mbox_msg)
+{
+ mbox_msg->event_en = 0;
+ mbox_msg->token = CMD_POLL_TOKEN;
+}
+
+static void hns_roce_set_event_mbox_msg(struct hns_roce_mbox_msg *mbox_msg,
+ struct hns_roce_cmd_context *context)
+{
+ mbox_msg->event_en = 1;
+ mbox_msg->token = context->token;
}
/* this should be called with "poll_sem" */
-static int __hns_roce_cmd_mbox_poll(struct hns_roce_dev *hr_dev, u64 in_param,
- u64 out_param, unsigned long in_modifier,
- u8 op)
+static int __hns_roce_cmd_mbox_poll(struct hns_roce_dev *hr_dev,
+ struct hns_roce_mbox_msg *mbox_msg)
{
int ret;
- ret = hns_roce_cmd_mbox_post_hw(hr_dev, in_param, out_param,
- in_modifier, op, CMD_POLL_TOKEN, 0);
+ hns_roce_set_poll_mbox_msg(mbox_msg);
+ ret = hns_roce_cmd_mbox_post_hw(hr_dev, mbox_msg);
if (ret) {
dev_err_ratelimited(hr_dev->dev,
"failed to post mailbox 0x%x in poll mode, ret = %d.\n",
- op, ret);
+ mbox_msg->cmd, ret);
return ret;
}
return hr_dev->hw->poll_mbox_done(hr_dev);
}
-static int hns_roce_cmd_mbox_poll(struct hns_roce_dev *hr_dev, u64 in_param,
- u64 out_param, unsigned long in_modifier,
- u8 op)
+static int hns_roce_cmd_mbox_poll(struct hns_roce_dev *hr_dev,
+ struct hns_roce_mbox_msg *mbox_msg)
{
int ret;
down(&hr_dev->cmd.poll_sem);
- ret = __hns_roce_cmd_mbox_poll(hr_dev, in_param, out_param, in_modifier,
- op);
+ ret = __hns_roce_cmd_mbox_poll(hr_dev, mbox_msg);
up(&hr_dev->cmd.poll_sem);
return ret;
@@ -97,9 +115,8 @@ void hns_roce_cmd_event(struct hns_roce_dev *hr_dev, u16 token, u8 status,
complete(&context->done);
}
-static int __hns_roce_cmd_mbox_wait(struct hns_roce_dev *hr_dev, u64 in_param,
- u64 out_param, unsigned long in_modifier,
- u8 op)
+static int __hns_roce_cmd_mbox_wait(struct hns_roce_dev *hr_dev,
+ struct hns_roce_mbox_msg *mbox_msg)
{
struct hns_roce_cmdq *cmd = &hr_dev->cmd;
struct hns_roce_cmd_context *context;
@@ -120,19 +137,19 @@ static int __hns_roce_cmd_mbox_wait(struct hns_roce_dev *hr_dev, u64 in_param,
reinit_completion(&context->done);
- ret = hns_roce_cmd_mbox_post_hw(hr_dev, in_param, out_param,
- in_modifier, op, context->token, 1);
+ hns_roce_set_event_mbox_msg(mbox_msg, context);
+ ret = hns_roce_cmd_mbox_post_hw(hr_dev, mbox_msg);
if (ret) {
dev_err_ratelimited(dev,
"failed to post mailbox 0x%x in event mode, ret = %d.\n",
- op, ret);
+ mbox_msg->cmd, ret);
goto out;
}
if (!wait_for_completion_timeout(&context->done,
msecs_to_jiffies(HNS_ROCE_CMD_TIMEOUT_MSECS))) {
dev_err_ratelimited(dev, "[cmd] token 0x%x mailbox 0x%x timeout.\n",
- context->token, op);
+ context->token, mbox_msg->cmd);
ret = -EBUSY;
goto out;
}
@@ -140,42 +157,41 @@ static int __hns_roce_cmd_mbox_wait(struct hns_roce_dev *hr_dev, u64 in_param,
ret = context->result;
if (ret)
dev_err_ratelimited(dev, "[cmd] token 0x%x mailbox 0x%x error %d.\n",
- context->token, op, ret);
+ context->token, mbox_msg->cmd, ret);
out:
context->busy = 0;
return ret;
}
-static int hns_roce_cmd_mbox_wait(struct hns_roce_dev *hr_dev, u64 in_param,
- u64 out_param, unsigned long in_modifier,
- u8 op)
+static int hns_roce_cmd_mbox_wait(struct hns_roce_dev *hr_dev,
+ struct hns_roce_mbox_msg *mbox_msg)
{
int ret;
down(&hr_dev->cmd.event_sem);
- ret = __hns_roce_cmd_mbox_wait(hr_dev, in_param, out_param, in_modifier,
- op);
+ ret = __hns_roce_cmd_mbox_wait(hr_dev, mbox_msg);
up(&hr_dev->cmd.event_sem);
return ret;
}
int hns_roce_cmd_mbox(struct hns_roce_dev *hr_dev, u64 in_param, u64 out_param,
- unsigned long in_modifier, u8 op)
+ u8 cmd, unsigned long tag)
{
+ struct hns_roce_mbox_msg mbox_msg = {};
bool is_busy;
if (hr_dev->hw->chk_mbox_avail)
if (!hr_dev->hw->chk_mbox_avail(hr_dev, &is_busy))
return is_busy ? -EBUSY : 0;
+ hns_roce_set_basic_mbox_msg(&mbox_msg, in_param, out_param, cmd, tag);
+
if (hr_dev->cmd.use_events)
- return hns_roce_cmd_mbox_wait(hr_dev, in_param, out_param,
- in_modifier, op);
+ return hns_roce_cmd_mbox_wait(hr_dev, &mbox_msg);
else
- return hns_roce_cmd_mbox_poll(hr_dev, in_param, out_param,
- in_modifier, op);
+ return hns_roce_cmd_mbox_poll(hr_dev, &mbox_msg);
}
int hns_roce_cmd_init(struct hns_roce_dev *hr_dev)
diff --git a/drivers/infiniband/hw/hns/hns_roce_cmd.h b/drivers/infiniband/hw/hns/hns_roce_cmd.h
index 7928790061b8..759da8981c71 100644
--- a/drivers/infiniband/hw/hns/hns_roce_cmd.h
+++ b/drivers/infiniband/hw/hns/hns_roce_cmd.h
@@ -140,7 +140,7 @@ enum {
};
int hns_roce_cmd_mbox(struct hns_roce_dev *hr_dev, u64 in_param, u64 out_param,
- unsigned long in_modifier, u8 op);
+ u8 cmd, unsigned long tag);
struct hns_roce_cmd_mailbox *
hns_roce_alloc_cmd_mailbox(struct hns_roce_dev *hr_dev);
diff --git a/drivers/infiniband/hw/hns/hns_roce_cq.c b/drivers/infiniband/hw/hns/hns_roce_cq.c
index 22bd9e066a38..a335fa8481a5 100644
--- a/drivers/infiniband/hw/hns/hns_roce_cq.c
+++ b/drivers/infiniband/hw/hns/hns_roce_cq.c
@@ -139,9 +139,8 @@ static int alloc_cqc(struct hns_roce_dev *hr_dev, struct hns_roce_cq *hr_cq)
hr_dev->hw->write_cqc(hr_dev, hr_cq, mailbox->buf, mtts, dma_handle);
- /* Send mailbox to hw */
- ret = hns_roce_cmd_mbox(hr_dev, mailbox->dma, 0, hr_cq->cqn,
- HNS_ROCE_CMD_CREATE_CQC);
+ ret = hns_roce_cmd_mbox(hr_dev, mailbox->dma, 0,
+ HNS_ROCE_CMD_CREATE_CQC, hr_cq->cqn);
hns_roce_free_cmd_mailbox(hr_dev, mailbox);
if (ret) {
ibdev_err(ibdev,
@@ -174,8 +173,8 @@ static void free_cqc(struct hns_roce_dev *hr_dev, struct hns_roce_cq *hr_cq)
struct device *dev = hr_dev->dev;
int ret;
- ret = hns_roce_cmd_mbox(hr_dev, 0, 0, hr_cq->cqn,
- HNS_ROCE_CMD_DESTROY_CQC);
+ ret = hns_roce_cmd_mbox(hr_dev, 0, 0, HNS_ROCE_CMD_DESTROY_CQC,
+ hr_cq->cqn);
if (ret)
dev_err(dev, "DESTROY_CQ failed (%d) for CQN %06lx\n", ret,
hr_cq->cqn);
diff --git a/drivers/infiniband/hw/hns/hns_roce_device.h b/drivers/infiniband/hw/hns/hns_roce_device.h
index 8dd7919f8698..5e4a3536c41b 100644
--- a/drivers/infiniband/hw/hns/hns_roce_device.h
+++ b/drivers/infiniband/hw/hns/hns_roce_device.h
@@ -561,6 +561,15 @@ struct hns_roce_cmd_mailbox {
dma_addr_t dma;
};
+struct hns_roce_mbox_msg {
+ u64 in_param;
+ u64 out_param;
+ u8 cmd;
+ u32 tag;
+ u16 token;
+ u8 event_en;
+};
+
struct hns_roce_dev;
struct hns_roce_rinl_sge {
@@ -851,9 +860,8 @@ struct hns_roce_hw {
int (*hw_profile)(struct hns_roce_dev *hr_dev);
int (*hw_init)(struct hns_roce_dev *hr_dev);
void (*hw_exit)(struct hns_roce_dev *hr_dev);
- int (*post_mbox)(struct hns_roce_dev *hr_dev, u64 in_param,
- u64 out_param, u32 in_modifier, u8 op,
- u16 token, int event);
+ int (*post_mbox)(struct hns_roce_dev *hr_dev,
+ struct hns_roce_mbox_msg *mbox_msg);
int (*poll_mbox_done)(struct hns_roce_dev *hr_dev);
bool (*chk_mbox_avail)(struct hns_roce_dev *hr_dev, bool *is_busy);
int (*set_gid)(struct hns_roce_dev *hr_dev, int gid_index,
diff --git a/drivers/infiniband/hw/hns/hns_roce_hw_v2.c b/drivers/infiniband/hw/hns/hns_roce_hw_v2.c
index 63571abfc019..55c49d358f76 100644
--- a/drivers/infiniband/hw/hns/hns_roce_hw_v2.c
+++ b/drivers/infiniband/hw/hns/hns_roce_hw_v2.c
@@ -1344,16 +1344,17 @@ static int hns_roce_cmq_send(struct hns_roce_dev *hr_dev,
return ret;
}
-static int config_hem_ba_to_hw(struct hns_roce_dev *hr_dev, unsigned long obj,
- dma_addr_t base_addr, u8 op)
+static int config_hem_ba_to_hw(struct hns_roce_dev *hr_dev,
+ dma_addr_t base_addr, u8 cmd, unsigned long tag)
{
- struct hns_roce_cmd_mailbox *mbox = hns_roce_alloc_cmd_mailbox(hr_dev);
+ struct hns_roce_cmd_mailbox *mbox;
int ret;
+ mbox = hns_roce_alloc_cmd_mailbox(hr_dev);
if (IS_ERR(mbox))
return PTR_ERR(mbox);
- ret = hns_roce_cmd_mbox(hr_dev, base_addr, mbox->dma, obj, op);
+ ret = hns_roce_cmd_mbox(hr_dev, base_addr, mbox->dma, cmd, tag);
hns_roce_free_cmd_mailbox(hr_dev, mbox);
return ret;
}
@@ -2779,21 +2780,21 @@ static void hns_roce_v2_exit(struct hns_roce_dev *hr_dev)
free_dip_list(hr_dev);
}
-static int hns_roce_mbox_post(struct hns_roce_dev *hr_dev, u64 in_param,
- u64 out_param, u32 in_modifier,
- u8 op, u16 token, int event)
+static int hns_roce_mbox_post(struct hns_roce_dev *hr_dev,
+ struct hns_roce_mbox_msg *mbox_msg)
{
struct hns_roce_cmq_desc desc;
struct hns_roce_post_mbox *mb = (struct hns_roce_post_mbox *)desc.data;
hns_roce_cmq_setup_basic_desc(&desc, HNS_ROCE_OPC_POST_MB, false);
- mb->in_param_l = cpu_to_le32(in_param);
- mb->in_param_h = cpu_to_le32(in_param >> 32);
- mb->out_param_l = cpu_to_le32(out_param);
- mb->out_param_h = cpu_to_le32(out_param >> 32);
- mb->cmd_tag = cpu_to_le32(in_modifier << 8 | op);
- mb->token_event_en = cpu_to_le32(event << 16 | token);
+ mb->in_param_l = cpu_to_le32(mbox_msg->in_param);
+ mb->in_param_h = cpu_to_le32(mbox_msg->in_param >> 32);
+ mb->out_param_l = cpu_to_le32(mbox_msg->out_param);
+ mb->out_param_h = cpu_to_le32(mbox_msg->out_param >> 32);
+ mb->cmd_tag = cpu_to_le32(mbox_msg->tag << 8 | mbox_msg->cmd);
+ mb->token_event_en = cpu_to_le32(mbox_msg->event_en << 16 |
+ mbox_msg->token);
return hns_roce_cmq_send(hr_dev, &desc, 1);
}
@@ -2846,9 +2847,8 @@ static int v2_wait_mbox_complete(struct hns_roce_dev *hr_dev, u32 timeout,
return ret;
}
-static int v2_post_mbox(struct hns_roce_dev *hr_dev, u64 in_param,
- u64 out_param, u32 in_modifier,
- u8 op, u16 token, int event)
+static int v2_post_mbox(struct hns_roce_dev *hr_dev,
+ struct hns_roce_mbox_msg *mbox_msg)
{
u8 status = 0;
int ret;
@@ -2864,8 +2864,7 @@ static int v2_post_mbox(struct hns_roce_dev *hr_dev, u64 in_param,
}
/* Post new message to mbox */
- ret = hns_roce_mbox_post(hr_dev, in_param, out_param, in_modifier,
- op, token, event);
+ ret = hns_roce_mbox_post(hr_dev, mbox_msg);
if (ret)
dev_err_ratelimited(hr_dev->dev,
"failed to post mailbox, ret = %d.\n", ret);
@@ -3818,38 +3817,38 @@ static int hns_roce_v2_poll_cq(struct ib_cq *ibcq, int num_entries,
}
static int get_op_for_set_hem(struct hns_roce_dev *hr_dev, u32 type,
- u32 step_idx, u8 *mbox_op)
+ u32 step_idx, u8 *mbox_cmd)
{
- u8 op;
+ u8 cmd;
switch (type) {
case HEM_TYPE_QPC:
- op = HNS_ROCE_CMD_WRITE_QPC_BT0;
+ cmd = HNS_ROCE_CMD_WRITE_QPC_BT0;
break;
case HEM_TYPE_MTPT:
- op = HNS_ROCE_CMD_WRITE_MPT_BT0;
+ cmd = HNS_ROCE_CMD_WRITE_MPT_BT0;
break;
case HEM_TYPE_CQC:
- op = HNS_ROCE_CMD_WRITE_CQC_BT0;
+ cmd = HNS_ROCE_CMD_WRITE_CQC_BT0;
break;
case HEM_TYPE_SRQC:
- op = HNS_ROCE_CMD_WRITE_SRQC_BT0;
+ cmd = HNS_ROCE_CMD_WRITE_SRQC_BT0;
break;
case HEM_TYPE_SCCC:
- op = HNS_ROCE_CMD_WRITE_SCCC_BT0;
+ cmd = HNS_ROCE_CMD_WRITE_SCCC_BT0;
break;
case HEM_TYPE_QPC_TIMER:
- op = HNS_ROCE_CMD_WRITE_QPC_TIMER_BT0;
+ cmd = HNS_ROCE_CMD_WRITE_QPC_TIMER_BT0;
break;
case HEM_TYPE_CQC_TIMER:
- op = HNS_ROCE_CMD_WRITE_CQC_TIMER_BT0;
+ cmd = HNS_ROCE_CMD_WRITE_CQC_TIMER_BT0;
break;
default:
dev_warn(hr_dev->dev, "failed to check hem type %u.\n", type);
return -EINVAL;
}
- *mbox_op = op + step_idx;
+ *mbox_cmd = cmd + step_idx;
return 0;
}
@@ -3875,7 +3874,7 @@ static int set_hem_to_hw(struct hns_roce_dev *hr_dev, int obj,
dma_addr_t base_addr, u32 hem_type, u32 step_idx)
{
int ret;
- u8 op;
+ u8 cmd;
if (unlikely(hem_type == HEM_TYPE_GMV))
return config_gmv_ba_to_hw(hr_dev, obj, base_addr);
@@ -3883,11 +3882,11 @@ static int set_hem_to_hw(struct hns_roce_dev *hr_dev, int obj,
if (unlikely(hem_type == HEM_TYPE_SCCC && step_idx))
return 0;
- ret = get_op_for_set_hem(hr_dev, hem_type, step_idx, &op);
+ ret = get_op_for_set_hem(hr_dev, hem_type, step_idx, &cmd);
if (ret < 0)
return ret;
- return config_hem_ba_to_hw(hr_dev, obj, base_addr, op);
+ return config_hem_ba_to_hw(hr_dev, base_addr, cmd, obj);
}
static int hns_roce_v2_set_hem(struct hns_roce_dev *hr_dev,
@@ -3950,12 +3949,12 @@ static int hns_roce_v2_set_hem(struct hns_roce_dev *hr_dev,
}
static int hns_roce_v2_clear_hem(struct hns_roce_dev *hr_dev,
- struct hns_roce_hem_table *table, int obj,
- u32 step_idx)
+ struct hns_roce_hem_table *table,
+ int tag, u32 step_idx)
{
struct hns_roce_cmd_mailbox *mailbox;
struct device *dev = hr_dev->dev;
- u8 op = 0xff;
+ u8 cmd = 0xff;
int ret;
if (!hns_roce_check_whether_mhop(hr_dev, table->type))
@@ -3963,16 +3962,16 @@ static int hns_roce_v2_clear_hem(struct hns_roce_dev *hr_dev,
switch (table->type) {
case HEM_TYPE_QPC:
- op = HNS_ROCE_CMD_DESTROY_QPC_BT0;
+ cmd = HNS_ROCE_CMD_DESTROY_QPC_BT0;
break;
case HEM_TYPE_MTPT:
- op = HNS_ROCE_CMD_DESTROY_MPT_BT0;
+ cmd = HNS_ROCE_CMD_DESTROY_MPT_BT0;
break;
case HEM_TYPE_CQC:
- op = HNS_ROCE_CMD_DESTROY_CQC_BT0;
+ cmd = HNS_ROCE_CMD_DESTROY_CQC_BT0;
break;
case HEM_TYPE_SRQC:
- op = HNS_ROCE_CMD_DESTROY_SRQC_BT0;
+ cmd = HNS_ROCE_CMD_DESTROY_SRQC_BT0;
break;
case HEM_TYPE_SCCC:
case HEM_TYPE_QPC_TIMER:
@@ -3985,14 +3984,13 @@ static int hns_roce_v2_clear_hem(struct hns_roce_dev *hr_dev,
return 0;
}
- op += step_idx;
+ cmd += step_idx;
mailbox = hns_roce_alloc_cmd_mailbox(hr_dev);
if (IS_ERR(mailbox))
return PTR_ERR(mailbox);
- /* configure the tag and op */
- ret = hns_roce_cmd_mbox(hr_dev, 0, mailbox->dma, obj, op);
+ ret = hns_roce_cmd_mbox(hr_dev, 0, mailbox->dma, cmd, tag);
hns_roce_free_cmd_mailbox(hr_dev, mailbox);
return ret;
@@ -4016,8 +4014,8 @@ static int hns_roce_v2_qp_modify(struct hns_roce_dev *hr_dev,
memcpy(mailbox->buf, context, qpc_size);
memcpy(mailbox->buf + qpc_size, qpc_mask, qpc_size);
- ret = hns_roce_cmd_mbox(hr_dev, mailbox->dma, 0, hr_qp->qpn,
- HNS_ROCE_CMD_MODIFY_QPC);
+ ret = hns_roce_cmd_mbox(hr_dev, mailbox->dma, 0,
+ HNS_ROCE_CMD_MODIFY_QPC, hr_qp->qpn);
hns_roce_free_cmd_mailbox(hr_dev, mailbox);
@@ -5090,8 +5088,8 @@ static int hns_roce_v2_query_qpc(struct hns_roce_dev *hr_dev,
if (IS_ERR(mailbox))
return PTR_ERR(mailbox);
- ret = hns_roce_cmd_mbox(hr_dev, 0, mailbox->dma, hr_qp->qpn,
- HNS_ROCE_CMD_QUERY_QPC);
+ ret = hns_roce_cmd_mbox(hr_dev, 0, mailbox->dma, HNS_ROCE_CMD_QUERY_QPC,
+ hr_qp->qpn);
if (ret)
goto out;
@@ -5457,8 +5455,8 @@ static int hns_roce_v2_modify_srq(struct ib_srq *ibsrq,
hr_reg_write(srq_context, SRQC_LIMIT_WL, srq_attr->srq_limit);
hr_reg_clear(srqc_mask, SRQC_LIMIT_WL);
- ret = hns_roce_cmd_mbox(hr_dev, mailbox->dma, 0, srq->srqn,
- HNS_ROCE_CMD_MODIFY_SRQC);
+ ret = hns_roce_cmd_mbox(hr_dev, mailbox->dma, 0,
+ HNS_ROCE_CMD_MODIFY_SRQC, srq->srqn);
hns_roce_free_cmd_mailbox(hr_dev, mailbox);
if (ret) {
ibdev_err(&hr_dev->ib_dev,
@@ -5484,8 +5482,8 @@ static int hns_roce_v2_query_srq(struct ib_srq *ibsrq, struct ib_srq_attr *attr)
return PTR_ERR(mailbox);
srq_context = mailbox->buf;
- ret = hns_roce_cmd_mbox(hr_dev, 0, mailbox->dma, srq->srqn,
- HNS_ROCE_CMD_QUERY_SRQC);
+ ret = hns_roce_cmd_mbox(hr_dev, 0, mailbox->dma,
+ HNS_ROCE_CMD_QUERY_SRQC, srq->srqn);
if (ret) {
ibdev_err(&hr_dev->ib_dev,
"failed to process cmd of querying SRQ, ret = %d.\n",
@@ -5535,8 +5533,8 @@ static int hns_roce_v2_modify_cq(struct ib_cq *cq, u16 cq_count, u16 cq_period)
hr_reg_write(cq_context, CQC_CQ_PERIOD, cq_period);
hr_reg_clear(cqc_mask, CQC_CQ_PERIOD);
- ret = hns_roce_cmd_mbox(hr_dev, mailbox->dma, 0, hr_cq->cqn,
- HNS_ROCE_CMD_MODIFY_CQC);
+ ret = hns_roce_cmd_mbox(hr_dev, mailbox->dma, 0,
+ HNS_ROCE_CMD_MODIFY_CQC, hr_cq->cqn);
hns_roce_free_cmd_mailbox(hr_dev, mailbox);
if (ret)
ibdev_err(&hr_dev->ib_dev,
@@ -5863,13 +5861,14 @@ static void hns_roce_v2_destroy_eqc(struct hns_roce_dev *hr_dev, u32 eqn)
{
struct device *dev = hr_dev->dev;
int ret;
+ u8 cmd;
if (eqn < hr_dev->caps.num_comp_vectors)
- ret = hns_roce_cmd_mbox(hr_dev, 0, 0, eqn & HNS_ROCE_V2_EQN_M,
- HNS_ROCE_CMD_DESTROY_CEQC);
+ cmd = HNS_ROCE_CMD_DESTROY_CEQC;
else
- ret = hns_roce_cmd_mbox(hr_dev, 0, 0, eqn & HNS_ROCE_V2_EQN_M,
- HNS_ROCE_CMD_DESTROY_AEQC);
+ cmd = HNS_ROCE_CMD_DESTROY_AEQC;
+
+ ret = hns_roce_cmd_mbox(hr_dev, 0, 0, cmd, eqn & HNS_ROCE_V2_EQN_M);
if (ret)
dev_err(dev, "[mailbox cmd] destroy eqc(%u) failed.\n", eqn);
}
@@ -5993,7 +5992,7 @@ static int hns_roce_v2_create_eq(struct hns_roce_dev *hr_dev,
if (ret)
goto err_cmd_mbox;
- ret = hns_roce_cmd_mbox(hr_dev, mailbox->dma, 0, eq->eqn, eq_cmd);
+ ret = hns_roce_cmd_mbox(hr_dev, mailbox->dma, 0, eq_cmd, eq->eqn);
if (ret) {
dev_err(hr_dev->dev, "[mailbox cmd] create eqc failed.\n");
goto err_cmd_mbox;
diff --git a/drivers/infiniband/hw/hns/hns_roce_hw_v2_dfx.c b/drivers/infiniband/hw/hns/hns_roce_hw_v2_dfx.c
index 107288150e3f..f7a75a7cda74 100644
--- a/drivers/infiniband/hw/hns/hns_roce_hw_v2_dfx.c
+++ b/drivers/infiniband/hw/hns/hns_roce_hw_v2_dfx.c
@@ -18,8 +18,8 @@ int hns_roce_v2_query_cqc_info(struct hns_roce_dev *hr_dev, u32 cqn,
return PTR_ERR(mailbox);
cq_context = mailbox->buf;
- ret = hns_roce_cmd_mbox(hr_dev, 0, mailbox->dma, cqn,
- HNS_ROCE_CMD_QUERY_CQC);
+ ret = hns_roce_cmd_mbox(hr_dev, 0, mailbox->dma, HNS_ROCE_CMD_QUERY_CQC,
+ cqn);
if (ret) {
dev_err(hr_dev->dev, "QUERY cqc cmd process error\n");
goto err_mailbox;
diff --git a/drivers/infiniband/hw/hns/hns_roce_mr.c b/drivers/infiniband/hw/hns/hns_roce_mr.c
index 62a57cae800c..22ff78a5a1a7 100644
--- a/drivers/infiniband/hw/hns/hns_roce_mr.c
+++ b/drivers/infiniband/hw/hns/hns_roce_mr.c
@@ -51,15 +51,15 @@ static int hns_roce_hw_create_mpt(struct hns_roce_dev *hr_dev,
struct hns_roce_cmd_mailbox *mailbox,
unsigned long mpt_index)
{
- return hns_roce_cmd_mbox(hr_dev, mailbox->dma, 0, mpt_index,
- HNS_ROCE_CMD_CREATE_MPT);
+ return hns_roce_cmd_mbox(hr_dev, mailbox->dma, 0,
+ HNS_ROCE_CMD_CREATE_MPT, mpt_index);
}
int hns_roce_hw_destroy_mpt(struct hns_roce_dev *hr_dev,
unsigned long mpt_index)
{
- return hns_roce_cmd_mbox(hr_dev, 0, 0, mpt_index,
- HNS_ROCE_CMD_DESTROY_MPT);
+ return hns_roce_cmd_mbox(hr_dev, 0, 0, HNS_ROCE_CMD_DESTROY_MPT,
+ mpt_index);
}
static int alloc_mr_key(struct hns_roce_dev *hr_dev, struct hns_roce_mr *mr)
@@ -300,8 +300,9 @@ struct ib_mr *hns_roce_rereg_user_mr(struct ib_mr *ibmr, int flags, u64 start,
return ERR_CAST(mailbox);
mtpt_idx = key_to_hw_index(mr->key) & (hr_dev->caps.num_mtpts - 1);
- ret = hns_roce_cmd_mbox(hr_dev, 0, mailbox->dma, mtpt_idx,
- HNS_ROCE_CMD_QUERY_MPT);
+
+ ret = hns_roce_cmd_mbox(hr_dev, 0, mailbox->dma, HNS_ROCE_CMD_QUERY_MPT,
+ mtpt_idx);
if (ret)
goto free_cmd_mbox;
diff --git a/drivers/infiniband/hw/hns/hns_roce_srq.c b/drivers/infiniband/hw/hns/hns_roce_srq.c
index 1fef5d630485..f270563aca97 100644
--- a/drivers/infiniband/hw/hns/hns_roce_srq.c
+++ b/drivers/infiniband/hw/hns/hns_roce_srq.c
@@ -63,14 +63,14 @@ static int hns_roce_hw_create_srq(struct hns_roce_dev *dev,
struct hns_roce_cmd_mailbox *mailbox,
unsigned long srq_num)
{
- return hns_roce_cmd_mbox(dev, mailbox->dma, 0, srq_num,
- HNS_ROCE_CMD_CREATE_SRQ);
+ return hns_roce_cmd_mbox(dev, mailbox->dma, 0, HNS_ROCE_CMD_CREATE_SRQ,
+ srq_num);
}
static int hns_roce_hw_destroy_srq(struct hns_roce_dev *dev,
unsigned long srq_num)
{
- return hns_roce_cmd_mbox(dev, 0, 0, srq_num, HNS_ROCE_CMD_DESTROY_SRQ);
+ return hns_roce_cmd_mbox(dev, 0, 0, HNS_ROCE_CMD_DESTROY_SRQ, srq_num);
}
static int alloc_srqc(struct hns_roce_dev *hr_dev, struct hns_roce_srq *srq)
--
2.33.0
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH for-next 6/8] RDMA/hns: Remove similar code that configures the hardware contexts
2022-02-18 11:05 [PATCH for-next 0/8] RDMA/hns: Clean up and refactor mailbox-related code Wenpeng Liang
` (4 preceding siblings ...)
2022-02-18 11:05 ` [PATCH for-next 5/8] RDMA/hns: Refactor mailbox functions Wenpeng Liang
@ 2022-02-18 11:05 ` Wenpeng Liang
2022-02-24 13:32 ` Leon Romanovsky
2022-02-18 11:05 ` [PATCH for-next 7/8] RDMA/hns: Refactor the alloc_srqc() Wenpeng Liang
2022-02-18 11:05 ` [PATCH for-next 8/8] RDMA/hns: Refactor the alloc_cqc() Wenpeng Liang
7 siblings, 1 reply; 18+ messages in thread
From: Wenpeng Liang @ 2022-02-18 11:05 UTC (permalink / raw)
To: jgg, leon; +Cc: linux-rdma, linuxarm, liangwenpeng
From: Chengchang Tang <tangchengchang@huawei.com>
Remove duplicate code for creating and destroying hardware contexts via
mailbox.
Signed-off-by: Chengchang Tang <tangchengchang@huawei.com>
Signed-off-by: Wenpeng Liang <liangwenpeng@huawei.com>
---
drivers/infiniband/hw/hns/hns_roce_cmd.c | 12 +++++++++
drivers/infiniband/hw/hns/hns_roce_cmd.h | 5 ++++
drivers/infiniband/hw/hns/hns_roce_cq.c | 8 +++---
drivers/infiniband/hw/hns/hns_roce_device.h | 2 --
drivers/infiniband/hw/hns/hns_roce_hw_v2.c | 4 +--
drivers/infiniband/hw/hns/hns_roce_mr.c | 29 ++++++---------------
drivers/infiniband/hw/hns/hns_roce_srq.c | 20 +++-----------
7 files changed, 35 insertions(+), 45 deletions(-)
diff --git a/drivers/infiniband/hw/hns/hns_roce_cmd.c b/drivers/infiniband/hw/hns/hns_roce_cmd.c
index 0d4766cf6e24..78f66eb379ab 100644
--- a/drivers/infiniband/hw/hns/hns_roce_cmd.c
+++ b/drivers/infiniband/hw/hns/hns_roce_cmd.c
@@ -277,3 +277,15 @@ void hns_roce_free_cmd_mailbox(struct hns_roce_dev *hr_dev,
dma_pool_free(hr_dev->cmd.pool, mailbox->buf, mailbox->dma);
kfree(mailbox);
}
+
+int hns_roce_create_hw_ctx(struct hns_roce_dev *dev,
+ struct hns_roce_cmd_mailbox *mailbox,
+ u8 cmd, unsigned long idx)
+{
+ return hns_roce_cmd_mbox(dev, mailbox->dma, 0, cmd, idx);
+}
+
+int hns_roce_destroy_hw_ctx(struct hns_roce_dev *dev, u8 cmd, unsigned long idx)
+{
+ return hns_roce_cmd_mbox(dev, 0, 0, cmd, idx);
+}
diff --git a/drivers/infiniband/hw/hns/hns_roce_cmd.h b/drivers/infiniband/hw/hns/hns_roce_cmd.h
index 759da8981c71..052a3d60905a 100644
--- a/drivers/infiniband/hw/hns/hns_roce_cmd.h
+++ b/drivers/infiniband/hw/hns/hns_roce_cmd.h
@@ -146,5 +146,10 @@ struct hns_roce_cmd_mailbox *
hns_roce_alloc_cmd_mailbox(struct hns_roce_dev *hr_dev);
void hns_roce_free_cmd_mailbox(struct hns_roce_dev *hr_dev,
struct hns_roce_cmd_mailbox *mailbox);
+int hns_roce_create_hw_ctx(struct hns_roce_dev *dev,
+ struct hns_roce_cmd_mailbox *mailbox,
+ u8 cmd, unsigned long idx);
+int hns_roce_destroy_hw_ctx(struct hns_roce_dev *dev, u8 cmd,
+ unsigned long idx);
#endif /* _HNS_ROCE_CMD_H */
diff --git a/drivers/infiniband/hw/hns/hns_roce_cq.c b/drivers/infiniband/hw/hns/hns_roce_cq.c
index a335fa8481a5..3d10300cab85 100644
--- a/drivers/infiniband/hw/hns/hns_roce_cq.c
+++ b/drivers/infiniband/hw/hns/hns_roce_cq.c
@@ -139,8 +139,8 @@ static int alloc_cqc(struct hns_roce_dev *hr_dev, struct hns_roce_cq *hr_cq)
hr_dev->hw->write_cqc(hr_dev, hr_cq, mailbox->buf, mtts, dma_handle);
- ret = hns_roce_cmd_mbox(hr_dev, mailbox->dma, 0,
- HNS_ROCE_CMD_CREATE_CQC, hr_cq->cqn);
+ ret = hns_roce_create_hw_ctx(hr_dev, mailbox, HNS_ROCE_CMD_CREATE_CQC,
+ hr_cq->cqn);
hns_roce_free_cmd_mailbox(hr_dev, mailbox);
if (ret) {
ibdev_err(ibdev,
@@ -173,8 +173,8 @@ static void free_cqc(struct hns_roce_dev *hr_dev, struct hns_roce_cq *hr_cq)
struct device *dev = hr_dev->dev;
int ret;
- ret = hns_roce_cmd_mbox(hr_dev, 0, 0, HNS_ROCE_CMD_DESTROY_CQC,
- hr_cq->cqn);
+ ret = hns_roce_destroy_hw_ctx(hr_dev, HNS_ROCE_CMD_DESTROY_CQC,
+ hr_cq->cqn);
if (ret)
dev_err(dev, "DESTROY_CQ failed (%d) for CQN %06lx\n", ret,
hr_cq->cqn);
diff --git a/drivers/infiniband/hw/hns/hns_roce_device.h b/drivers/infiniband/hw/hns/hns_roce_device.h
index 5e4a3536c41b..21182ec56f18 100644
--- a/drivers/infiniband/hw/hns/hns_roce_device.h
+++ b/drivers/infiniband/hw/hns/hns_roce_device.h
@@ -1152,8 +1152,6 @@ struct ib_mr *hns_roce_alloc_mr(struct ib_pd *pd, enum ib_mr_type mr_type,
int hns_roce_map_mr_sg(struct ib_mr *ibmr, struct scatterlist *sg, int sg_nents,
unsigned int *sg_offset);
int hns_roce_dereg_mr(struct ib_mr *ibmr, struct ib_udata *udata);
-int hns_roce_hw_destroy_mpt(struct hns_roce_dev *hr_dev,
- unsigned long mpt_index);
unsigned long key_to_hw_index(u32 key);
int hns_roce_alloc_mw(struct ib_mw *mw, struct ib_udata *udata);
diff --git a/drivers/infiniband/hw/hns/hns_roce_hw_v2.c b/drivers/infiniband/hw/hns/hns_roce_hw_v2.c
index 55c49d358f76..631f6e233492 100644
--- a/drivers/infiniband/hw/hns/hns_roce_hw_v2.c
+++ b/drivers/infiniband/hw/hns/hns_roce_hw_v2.c
@@ -5868,7 +5868,7 @@ static void hns_roce_v2_destroy_eqc(struct hns_roce_dev *hr_dev, u32 eqn)
else
cmd = HNS_ROCE_CMD_DESTROY_AEQC;
- ret = hns_roce_cmd_mbox(hr_dev, 0, 0, cmd, eqn & HNS_ROCE_V2_EQN_M);
+ ret = hns_roce_destroy_hw_ctx(hr_dev, cmd, eqn & HNS_ROCE_V2_EQN_M);
if (ret)
dev_err(dev, "[mailbox cmd] destroy eqc(%u) failed.\n", eqn);
}
@@ -5992,7 +5992,7 @@ static int hns_roce_v2_create_eq(struct hns_roce_dev *hr_dev,
if (ret)
goto err_cmd_mbox;
- ret = hns_roce_cmd_mbox(hr_dev, mailbox->dma, 0, eq_cmd, eq->eqn);
+ ret = hns_roce_create_hw_ctx(hr_dev, mailbox, eq_cmd, eq->eqn);
if (ret) {
dev_err(hr_dev->dev, "[mailbox cmd] create eqc failed.\n");
goto err_cmd_mbox;
diff --git a/drivers/infiniband/hw/hns/hns_roce_mr.c b/drivers/infiniband/hw/hns/hns_roce_mr.c
index 22ff78a5a1a7..39de862666d7 100644
--- a/drivers/infiniband/hw/hns/hns_roce_mr.c
+++ b/drivers/infiniband/hw/hns/hns_roce_mr.c
@@ -47,21 +47,6 @@ unsigned long key_to_hw_index(u32 key)
return (key << 24) | (key >> 8);
}
-static int hns_roce_hw_create_mpt(struct hns_roce_dev *hr_dev,
- struct hns_roce_cmd_mailbox *mailbox,
- unsigned long mpt_index)
-{
- return hns_roce_cmd_mbox(hr_dev, mailbox->dma, 0,
- HNS_ROCE_CMD_CREATE_MPT, mpt_index);
-}
-
-int hns_roce_hw_destroy_mpt(struct hns_roce_dev *hr_dev,
- unsigned long mpt_index)
-{
- return hns_roce_cmd_mbox(hr_dev, 0, 0, HNS_ROCE_CMD_DESTROY_MPT,
- mpt_index);
-}
-
static int alloc_mr_key(struct hns_roce_dev *hr_dev, struct hns_roce_mr *mr)
{
struct hns_roce_ida *mtpt_ida = &hr_dev->mr_table.mtpt_ida;
@@ -141,7 +126,7 @@ static void hns_roce_mr_free(struct hns_roce_dev *hr_dev,
int ret;
if (mr->enabled) {
- ret = hns_roce_hw_destroy_mpt(hr_dev,
+ ret = hns_roce_destroy_hw_ctx(hr_dev, HNS_ROCE_CMD_DESTROY_MPT,
key_to_hw_index(mr->key) &
(hr_dev->caps.num_mtpts - 1));
if (ret)
@@ -177,7 +162,7 @@ static int hns_roce_mr_enable(struct hns_roce_dev *hr_dev,
goto err_page;
}
- ret = hns_roce_hw_create_mpt(hr_dev, mailbox,
+ ret = hns_roce_create_hw_ctx(hr_dev, mailbox, HNS_ROCE_CMD_CREATE_MPT,
mtpt_idx & (hr_dev->caps.num_mtpts - 1));
if (ret) {
dev_err(dev, "failed to create mpt, ret = %d.\n", ret);
@@ -306,7 +291,8 @@ struct ib_mr *hns_roce_rereg_user_mr(struct ib_mr *ibmr, int flags, u64 start,
if (ret)
goto free_cmd_mbox;
- ret = hns_roce_hw_destroy_mpt(hr_dev, mtpt_idx);
+ ret = hns_roce_destroy_hw_ctx(hr_dev, HNS_ROCE_CMD_DESTROY_MPT,
+ mtpt_idx);
if (ret)
ibdev_warn(ib_dev, "failed to destroy MPT, ret = %d.\n", ret);
@@ -336,7 +322,8 @@ struct ib_mr *hns_roce_rereg_user_mr(struct ib_mr *ibmr, int flags, u64 start,
goto free_cmd_mbox;
}
- ret = hns_roce_hw_create_mpt(hr_dev, mailbox, mtpt_idx);
+ ret = hns_roce_create_hw_ctx(hr_dev, mailbox, HNS_ROCE_CMD_CREATE_MPT,
+ mtpt_idx);
if (ret) {
ibdev_err(ib_dev, "failed to create MPT, ret = %d.\n", ret);
goto free_cmd_mbox;
@@ -477,7 +464,7 @@ static void hns_roce_mw_free(struct hns_roce_dev *hr_dev,
int ret;
if (mw->enabled) {
- ret = hns_roce_hw_destroy_mpt(hr_dev,
+ ret = hns_roce_destroy_hw_ctx(hr_dev, HNS_ROCE_CMD_DESTROY_MPT,
key_to_hw_index(mw->rkey) &
(hr_dev->caps.num_mtpts - 1));
if (ret)
@@ -517,7 +504,7 @@ static int hns_roce_mw_enable(struct hns_roce_dev *hr_dev,
goto err_page;
}
- ret = hns_roce_hw_create_mpt(hr_dev, mailbox,
+ ret = hns_roce_create_hw_ctx(hr_dev, mailbox, HNS_ROCE_CMD_CREATE_MPT,
mtpt_idx & (hr_dev->caps.num_mtpts - 1));
if (ret) {
dev_err(dev, "MW CREATE_MPT failed (%d)\n", ret);
diff --git a/drivers/infiniband/hw/hns/hns_roce_srq.c b/drivers/infiniband/hw/hns/hns_roce_srq.c
index f270563aca97..e316276e18c2 100644
--- a/drivers/infiniband/hw/hns/hns_roce_srq.c
+++ b/drivers/infiniband/hw/hns/hns_roce_srq.c
@@ -59,20 +59,6 @@ static void hns_roce_ib_srq_event(struct hns_roce_srq *srq,
}
}
-static int hns_roce_hw_create_srq(struct hns_roce_dev *dev,
- struct hns_roce_cmd_mailbox *mailbox,
- unsigned long srq_num)
-{
- return hns_roce_cmd_mbox(dev, mailbox->dma, 0, HNS_ROCE_CMD_CREATE_SRQ,
- srq_num);
-}
-
-static int hns_roce_hw_destroy_srq(struct hns_roce_dev *dev,
- unsigned long srq_num)
-{
- return hns_roce_cmd_mbox(dev, 0, 0, HNS_ROCE_CMD_DESTROY_SRQ, srq_num);
-}
-
static int alloc_srqc(struct hns_roce_dev *hr_dev, struct hns_roce_srq *srq)
{
struct hns_roce_srq_table *srq_table = &hr_dev->srq_table;
@@ -115,7 +101,8 @@ static int alloc_srqc(struct hns_roce_dev *hr_dev, struct hns_roce_srq *srq)
goto err_mbox;
}
- ret = hns_roce_hw_create_srq(hr_dev, mailbox, srq->srqn);
+ ret = hns_roce_create_hw_ctx(hr_dev, mailbox, HNS_ROCE_CMD_CREATE_SRQ,
+ srq->srqn);
if (ret) {
ibdev_err(ibdev, "failed to config SRQC, ret = %d.\n", ret);
goto err_mbox;
@@ -142,7 +129,8 @@ static void free_srqc(struct hns_roce_dev *hr_dev, struct hns_roce_srq *srq)
struct hns_roce_srq_table *srq_table = &hr_dev->srq_table;
int ret;
- ret = hns_roce_hw_destroy_srq(hr_dev, srq->srqn);
+ ret = hns_roce_destroy_hw_ctx(hr_dev, HNS_ROCE_CMD_DESTROY_SRQ,
+ srq->srqn);
if (ret)
dev_err(hr_dev->dev, "DESTROY_SRQ failed (%d) for SRQN %06lx\n",
ret, srq->srqn);
--
2.33.0
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH for-next 7/8] RDMA/hns: Refactor the alloc_srqc()
2022-02-18 11:05 [PATCH for-next 0/8] RDMA/hns: Clean up and refactor mailbox-related code Wenpeng Liang
` (5 preceding siblings ...)
2022-02-18 11:05 ` [PATCH for-next 6/8] RDMA/hns: Remove similar code that configures the hardware contexts Wenpeng Liang
@ 2022-02-18 11:05 ` Wenpeng Liang
2022-02-24 13:35 ` Leon Romanovsky
2022-02-18 11:05 ` [PATCH for-next 8/8] RDMA/hns: Refactor the alloc_cqc() Wenpeng Liang
7 siblings, 1 reply; 18+ messages in thread
From: Wenpeng Liang @ 2022-02-18 11:05 UTC (permalink / raw)
To: jgg, leon; +Cc: linux-rdma, linuxarm, liangwenpeng
From: Chengchang Tang <tangchengchang@huawei.com>
Abstract the alloc_srqc() into several parts and separate the alloc_srqn()
from the alloc_srqc().
Signed-off-by: Chengchang Tang <tangchengchang@huawei.com>
Signed-off-by: Wenpeng Liang <liangwenpeng@huawei.com>
---
drivers/infiniband/hw/hns/hns_roce_srq.c | 80 +++++++++++++++---------
1 file changed, 52 insertions(+), 28 deletions(-)
diff --git a/drivers/infiniband/hw/hns/hns_roce_srq.c b/drivers/infiniband/hw/hns/hns_roce_srq.c
index e316276e18c2..2613889a02ef 100644
--- a/drivers/infiniband/hw/hns/hns_roce_srq.c
+++ b/drivers/infiniband/hw/hns/hns_roce_srq.c
@@ -59,40 +59,39 @@ static void hns_roce_ib_srq_event(struct hns_roce_srq *srq,
}
}
-static int alloc_srqc(struct hns_roce_dev *hr_dev, struct hns_roce_srq *srq)
+static int alloc_srqn(struct hns_roce_dev *hr_dev, struct hns_roce_srq *srq)
{
- struct hns_roce_srq_table *srq_table = &hr_dev->srq_table;
struct hns_roce_ida *srq_ida = &hr_dev->srq_table.srq_ida;
- struct ib_device *ibdev = &hr_dev->ib_dev;
- struct hns_roce_cmd_mailbox *mailbox;
- int ret;
int id;
id = ida_alloc_range(&srq_ida->ida, srq_ida->min, srq_ida->max,
GFP_KERNEL);
if (id < 0) {
- ibdev_err(ibdev, "failed to alloc srq(%d).\n", id);
+ ibdev_err(&hr_dev->ib_dev, "failed to alloc srq(%d).\n", id);
return -ENOMEM;
}
- srq->srqn = (unsigned long)id;
- ret = hns_roce_table_get(hr_dev, &srq_table->table, srq->srqn);
- if (ret) {
- ibdev_err(ibdev, "failed to get SRQC table, ret = %d.\n", ret);
- goto err_out;
- }
+ srq->srqn = id;
- ret = xa_err(xa_store(&srq_table->xa, srq->srqn, srq, GFP_KERNEL));
- if (ret) {
- ibdev_err(ibdev, "failed to store SRQC, ret = %d.\n", ret);
- goto err_put;
- }
+ return 0;
+}
+
+static void free_srqn(struct hns_roce_dev *hr_dev, struct hns_roce_srq *srq)
+{
+ ida_free(&hr_dev->srq_table.srq_ida.ida, (int)srq->srqn);
+}
+
+static int hns_roce_create_srqc(struct hns_roce_dev *hr_dev,
+ struct hns_roce_srq *srq)
+{
+ struct ib_device *ibdev = &hr_dev->ib_dev;
+ struct hns_roce_cmd_mailbox *mailbox;
+ int ret;
mailbox = hns_roce_alloc_cmd_mailbox(hr_dev);
if (IS_ERR_OR_NULL(mailbox)) {
ibdev_err(ibdev, "failed to alloc mailbox for SRQC.\n");
- ret = -ENOMEM;
- goto err_xa;
+ return PTR_ERR(mailbox);
}
ret = hr_dev->hw->write_srqc(srq, mailbox->buf);
@@ -103,23 +102,42 @@ static int alloc_srqc(struct hns_roce_dev *hr_dev, struct hns_roce_srq *srq)
ret = hns_roce_create_hw_ctx(hr_dev, mailbox, HNS_ROCE_CMD_CREATE_SRQ,
srq->srqn);
- if (ret) {
+ if (ret)
ibdev_err(ibdev, "failed to config SRQC, ret = %d.\n", ret);
- goto err_mbox;
- }
+err_mbox:
hns_roce_free_cmd_mailbox(hr_dev, mailbox);
+ return ret;
+}
+
+static int alloc_srqc(struct hns_roce_dev *hr_dev, struct hns_roce_srq *srq)
+{
+ struct hns_roce_srq_table *srq_table = &hr_dev->srq_table;
+ struct ib_device *ibdev = &hr_dev->ib_dev;
+ int ret;
+
+ ret = hns_roce_table_get(hr_dev, &srq_table->table, srq->srqn);
+ if (ret) {
+ ibdev_err(ibdev, "failed to get SRQC table, ret = %d.\n", ret);
+ return ret;
+ }
+
+ ret = xa_err(xa_store(&srq_table->xa, srq->srqn, srq, GFP_KERNEL));
+ if (ret) {
+ ibdev_err(ibdev, "failed to store SRQC, ret = %d.\n", ret);
+ goto err_put;
+ }
+
+ ret = hns_roce_create_srqc(hr_dev, srq);
+ if (ret)
+ goto err_xa;
return 0;
-err_mbox:
- hns_roce_free_cmd_mailbox(hr_dev, mailbox);
err_xa:
xa_erase(&srq_table->xa, srq->srqn);
err_put:
hns_roce_table_put(hr_dev, &srq_table->table, srq->srqn);
-err_out:
- ida_free(&srq_ida->ida, id);
return ret;
}
@@ -142,7 +160,6 @@ static void free_srqc(struct hns_roce_dev *hr_dev, struct hns_roce_srq *srq)
wait_for_completion(&srq->free);
hns_roce_table_put(hr_dev, &srq_table->table, srq->srqn);
- ida_free(&srq_table->srq_ida.ida, (int)srq->srqn);
}
static int alloc_srq_idx(struct hns_roce_dev *hr_dev, struct hns_roce_srq *srq,
@@ -390,10 +407,14 @@ int hns_roce_create_srq(struct ib_srq *ib_srq,
if (ret)
return ret;
- ret = alloc_srqc(hr_dev, srq);
+ ret = alloc_srqn(hr_dev, srq);
if (ret)
goto err_srq_buf;
+ ret = alloc_srqc(hr_dev, srq);
+ if (ret)
+ goto err_srqn;
+
if (udata) {
resp.srqn = srq->srqn;
if (ib_copy_to_udata(udata, &resp,
@@ -412,6 +433,8 @@ int hns_roce_create_srq(struct ib_srq *ib_srq,
err_srqc:
free_srqc(hr_dev, srq);
+err_srqn:
+ free_srqn(hr_dev, srq);
err_srq_buf:
free_srq_buf(hr_dev, srq);
@@ -424,6 +447,7 @@ int hns_roce_destroy_srq(struct ib_srq *ibsrq, struct ib_udata *udata)
struct hns_roce_srq *srq = to_hr_srq(ibsrq);
free_srqc(hr_dev, srq);
+ free_srqn(hr_dev, srq);
free_srq_buf(hr_dev, srq);
return 0;
}
--
2.33.0
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH for-next 8/8] RDMA/hns: Refactor the alloc_cqc()
2022-02-18 11:05 [PATCH for-next 0/8] RDMA/hns: Clean up and refactor mailbox-related code Wenpeng Liang
` (6 preceding siblings ...)
2022-02-18 11:05 ` [PATCH for-next 7/8] RDMA/hns: Refactor the alloc_srqc() Wenpeng Liang
@ 2022-02-18 11:05 ` Wenpeng Liang
7 siblings, 0 replies; 18+ messages in thread
From: Wenpeng Liang @ 2022-02-18 11:05 UTC (permalink / raw)
To: jgg, leon; +Cc: linux-rdma, linuxarm, liangwenpeng
Abstract the alloc_cqc() into several parts and separate the process
unrelated to allocating CQC.
Signed-off-by: Wenpeng Liang <liangwenpeng@huawei.com>
---
drivers/infiniband/hw/hns/hns_roce_cq.c | 65 ++++++++++++++-----------
1 file changed, 37 insertions(+), 28 deletions(-)
diff --git a/drivers/infiniband/hw/hns/hns_roce_cq.c b/drivers/infiniband/hw/hns/hns_roce_cq.c
index 3d10300cab85..8acd599ffac1 100644
--- a/drivers/infiniband/hw/hns/hns_roce_cq.c
+++ b/drivers/infiniband/hw/hns/hns_roce_cq.c
@@ -100,12 +100,39 @@ static void free_cqn(struct hns_roce_dev *hr_dev, unsigned long cqn)
mutex_unlock(&cq_table->bank_mutex);
}
+static int hns_roce_create_cqc(struct hns_roce_dev *hr_dev,
+ struct hns_roce_cq *hr_cq,
+ u64 *mtts, dma_addr_t dma_handle)
+{
+ struct ib_device *ibdev = &hr_dev->ib_dev;
+ struct hns_roce_cmd_mailbox *mailbox;
+ int ret;
+
+ mailbox = hns_roce_alloc_cmd_mailbox(hr_dev);
+ if (IS_ERR(mailbox)) {
+ ibdev_err(ibdev, "failed to alloc mailbox for CQC.\n");
+ return PTR_ERR(mailbox);
+ }
+
+ hr_dev->hw->write_cqc(hr_dev, hr_cq, mailbox->buf, mtts, dma_handle);
+
+ ret = hns_roce_create_hw_ctx(hr_dev, mailbox, HNS_ROCE_CMD_CREATE_CQC,
+ hr_cq->cqn);
+ if (ret)
+ ibdev_err(ibdev,
+ "failed to send create cmd for CQ(0x%lx), ret = %d.\n",
+ hr_cq->cqn, ret);
+
+ hns_roce_free_cmd_mailbox(hr_dev, mailbox);
+
+ return ret;
+}
+
static int alloc_cqc(struct hns_roce_dev *hr_dev, struct hns_roce_cq *hr_cq)
{
struct hns_roce_cq_table *cq_table = &hr_dev->cq_table;
struct ib_device *ibdev = &hr_dev->ib_dev;
- struct hns_roce_cmd_mailbox *mailbox;
- u64 mtts[MTT_MIN_COUNT] = { 0 };
+ u64 mtts[MTT_MIN_COUNT] = {};
dma_addr_t dma_handle;
int ret;
@@ -121,7 +148,7 @@ static int alloc_cqc(struct hns_roce_dev *hr_dev, struct hns_roce_cq *hr_cq)
if (ret) {
ibdev_err(ibdev, "failed to get CQ(0x%lx) context, ret = %d.\n",
hr_cq->cqn, ret);
- goto err_out;
+ return ret;
}
ret = xa_err(xa_store(&cq_table->array, hr_cq->cqn, hr_cq, GFP_KERNEL));
@@ -130,40 +157,17 @@ static int alloc_cqc(struct hns_roce_dev *hr_dev, struct hns_roce_cq *hr_cq)
goto err_put;
}
- /* Allocate mailbox memory */
- mailbox = hns_roce_alloc_cmd_mailbox(hr_dev);
- if (IS_ERR(mailbox)) {
- ret = PTR_ERR(mailbox);
- goto err_xa;
- }
-
- hr_dev->hw->write_cqc(hr_dev, hr_cq, mailbox->buf, mtts, dma_handle);
-
- ret = hns_roce_create_hw_ctx(hr_dev, mailbox, HNS_ROCE_CMD_CREATE_CQC,
- hr_cq->cqn);
- hns_roce_free_cmd_mailbox(hr_dev, mailbox);
- if (ret) {
- ibdev_err(ibdev,
- "failed to send create cmd for CQ(0x%lx), ret = %d.\n",
- hr_cq->cqn, ret);
+ ret = hns_roce_create_cqc(hr_dev, hr_cq, mtts, dma_handle);
+ if (ret)
goto err_xa;
- }
-
- hr_cq->cons_index = 0;
- hr_cq->arm_sn = 1;
-
- refcount_set(&hr_cq->refcount, 1);
- init_completion(&hr_cq->free);
return 0;
err_xa:
xa_erase(&cq_table->array, hr_cq->cqn);
-
err_put:
hns_roce_table_put(hr_dev, &cq_table->table, hr_cq->cqn);
-err_out:
return ret;
}
@@ -411,6 +415,11 @@ int hns_roce_create_cq(struct ib_cq *ib_cq, const struct ib_cq_init_attr *attr,
goto err_cqc;
}
+ hr_cq->cons_index = 0;
+ hr_cq->arm_sn = 1;
+ refcount_set(&hr_cq->refcount, 1);
+ init_completion(&hr_cq->free);
+
return 0;
err_cqc:
--
2.33.0
^ permalink raw reply related [flat|nested] 18+ messages in thread
* Re: [PATCH for-next 5/8] RDMA/hns: Refactor mailbox functions
2022-02-18 11:05 ` [PATCH for-next 5/8] RDMA/hns: Refactor mailbox functions Wenpeng Liang
@ 2022-02-24 13:30 ` Leon Romanovsky
2022-02-25 10:50 ` Wenpeng Liang
0 siblings, 1 reply; 18+ messages in thread
From: Leon Romanovsky @ 2022-02-24 13:30 UTC (permalink / raw)
To: Wenpeng Liang; +Cc: jgg, linux-rdma, linuxarm
On Fri, Feb 18, 2022 at 07:05:16PM +0800, Wenpeng Liang wrote:
> From: Chengchang Tang <tangchengchang@huawei.com>
>
> The current mailbox functions have too many parameters, making the code
> difficult to maintain. So construct a new structure mbox_msg to pass the
> information needed by mailbox.
>
> Signed-off-by: Chengchang Tang <tangchengchang@huawei.com>
> Signed-off-by: Wenpeng Liang <liangwenpeng@huawei.com>
> ---
> drivers/infiniband/hw/hns/hns_roce_cmd.c | 84 +++++++------
> drivers/infiniband/hw/hns/hns_roce_cmd.h | 2 +-
> drivers/infiniband/hw/hns/hns_roce_cq.c | 9 +-
> drivers/infiniband/hw/hns/hns_roce_device.h | 14 ++-
> drivers/infiniband/hw/hns/hns_roce_hw_v2.c | 111 +++++++++---------
> .../infiniband/hw/hns/hns_roce_hw_v2_dfx.c | 4 +-
> drivers/infiniband/hw/hns/hns_roce_mr.c | 13 +-
> drivers/infiniband/hw/hns/hns_roce_srq.c | 6 +-
> 8 files changed, 133 insertions(+), 110 deletions(-)
>
> diff --git a/drivers/infiniband/hw/hns/hns_roce_cmd.c b/drivers/infiniband/hw/hns/hns_roce_cmd.c
> index df11acd8030e..0d4766cf6e24 100644
> --- a/drivers/infiniband/hw/hns/hns_roce_cmd.c
> +++ b/drivers/infiniband/hw/hns/hns_roce_cmd.c
> @@ -38,42 +38,60 @@
> #define CMD_POLL_TOKEN 0xffff
> #define CMD_MAX_NUM 32
>
> -static int hns_roce_cmd_mbox_post_hw(struct hns_roce_dev *hr_dev, u64 in_param,
> - u64 out_param, u32 in_modifier, u8 op,
> - u16 token, int event)
> +static int hns_roce_cmd_mbox_post_hw(struct hns_roce_dev *hr_dev,
> + struct hns_roce_mbox_msg *mbox_msg)
> {
> - return hr_dev->hw->post_mbox(hr_dev, in_param, out_param, in_modifier,
> - op, token, event);
> + return hr_dev->hw->post_mbox(hr_dev, mbox_msg);
> +}
> +
> +static void hns_roce_set_basic_mbox_msg(struct hns_roce_mbox_msg *mbox_msg,
> + u64 in_param, u64 out_param, u8 cmd,
> + unsigned long tag)
> +{
> + mbox_msg->in_param = in_param;
> + mbox_msg->out_param = out_param;
> + mbox_msg->cmd = cmd;
> + mbox_msg->tag = tag;
> +}
> +
> +static void hns_roce_set_poll_mbox_msg(struct hns_roce_mbox_msg *mbox_msg)
> +{
> + mbox_msg->event_en = 0;
> + mbox_msg->token = CMD_POLL_TOKEN;
> +}
> +
> +static void hns_roce_set_event_mbox_msg(struct hns_roce_mbox_msg *mbox_msg,
> + struct hns_roce_cmd_context *context)
> +{
> + mbox_msg->event_en = 1;
> + mbox_msg->token = context->token;
> }
I don't see too much value in three functions above. They are called exactly once.
Thanks
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH for-next 1/8] RDMA/hns: Remove the unused parameter "op_modifier" in mailbox
2022-02-18 11:05 ` [PATCH for-next 1/8] RDMA/hns: Remove the unused parameter "op_modifier" in mailbox Wenpeng Liang
@ 2022-02-24 13:30 ` Leon Romanovsky
0 siblings, 0 replies; 18+ messages in thread
From: Leon Romanovsky @ 2022-02-24 13:30 UTC (permalink / raw)
To: Wenpeng Liang; +Cc: jgg, linux-rdma, linuxarm
On Fri, Feb 18, 2022 at 07:05:12PM +0800, Wenpeng Liang wrote:
> From: Chengchang Tang <tangchengchang@huawei.com>
>
> The parameter "op_modifier" is only used for HIP06. It is useless for HIP08
> and later versions. After removing HIP06, this parameter is no longer used,
> so remove it.
>
> Signed-off-by: Chengchang Tang <tangchengchang@huawei.com>
> Signed-off-by: Haoyue Xu <xuhaoyue1@hisilicon.com>
> Signed-off-by: Wenpeng Liang <liangwenpeng@huawei.com>
> ---
> drivers/infiniband/hw/hns/hns_roce_cmd.c | 36 ++++++++-----------
> drivers/infiniband/hw/hns/hns_roce_cmd.h | 3 +-
> drivers/infiniband/hw/hns/hns_roce_cq.c | 4 +--
> drivers/infiniband/hw/hns/hns_roce_device.h | 2 +-
> drivers/infiniband/hw/hns/hns_roce_hw_v2.c | 26 +++++++-------
> .../infiniband/hw/hns/hns_roce_hw_v2_dfx.c | 2 +-
> drivers/infiniband/hw/hns/hns_roce_mr.c | 6 ++--
> drivers/infiniband/hw/hns/hns_roce_srq.c | 4 +--
> 8 files changed, 37 insertions(+), 46 deletions(-)
>
Thanks,
Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH for-next 2/8] RDMA/hns: Remove fixed parameter “timeout” in the mailbox
2022-02-18 11:05 ` [PATCH for-next 2/8] RDMA/hns: Remove fixed parameter “timeout” in the mailbox Wenpeng Liang
@ 2022-02-24 13:31 ` Leon Romanovsky
0 siblings, 0 replies; 18+ messages in thread
From: Leon Romanovsky @ 2022-02-24 13:31 UTC (permalink / raw)
To: Wenpeng Liang; +Cc: jgg, linux-rdma, linuxarm
On Fri, Feb 18, 2022 at 07:05:13PM +0800, Wenpeng Liang wrote:
> From: Chengchang Tang <tangchengchang@huawei.com>
>
> The value of the function parameter “timeout” is unique. Therefore,
> it is unnecessary to specify the parameter “timeout” value each time.
> So remove it.
>
> Signed-off-by: Chengchang Tang <tangchengchang@huawei.com>
> Signed-off-by: Haoyue Xu <xuhaoyue1@hisilicon.com>
> Signed-off-by: Wenpeng Liang <liangwenpeng@huawei.com>
> ---
> drivers/infiniband/hw/hns/hns_roce_cmd.c | 22 ++++++------
> drivers/infiniband/hw/hns/hns_roce_cmd.h | 2 +-
> drivers/infiniband/hw/hns/hns_roce_cq.c | 5 ++-
> drivers/infiniband/hw/hns/hns_roce_device.h | 3 +-
> drivers/infiniband/hw/hns/hns_roce_hw_v2.c | 35 +++++++------------
> .../infiniband/hw/hns/hns_roce_hw_v2_dfx.c | 3 +-
> drivers/infiniband/hw/hns/hns_roce_mr.c | 9 ++---
> drivers/infiniband/hw/hns/hns_roce_srq.c | 6 ++--
> 8 files changed, 34 insertions(+), 51 deletions(-)
>
Thanks,
Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH for-next 3/8] RDMA/hns: Remove redundant parameter "mailbox" in the mailbox
2022-02-18 11:05 ` [PATCH for-next 3/8] RDMA/hns: Remove redundant parameter "mailbox" " Wenpeng Liang
@ 2022-02-24 13:31 ` Leon Romanovsky
0 siblings, 0 replies; 18+ messages in thread
From: Leon Romanovsky @ 2022-02-24 13:31 UTC (permalink / raw)
To: Wenpeng Liang; +Cc: jgg, linux-rdma, linuxarm
On Fri, Feb 18, 2022 at 07:05:14PM +0800, Wenpeng Liang wrote:
> The parameter "out_param" of the mailbox is always null when the context is
> destroyed. So remove the function parameter "mailbox".
>
> Signed-off-by: Wenpeng Liang <liangwenpeng@huawei.com>
> ---
> drivers/infiniband/hw/hns/hns_roce_device.h | 1 -
> drivers/infiniband/hw/hns/hns_roce_mr.c | 11 +++++------
> drivers/infiniband/hw/hns/hns_roce_srq.c | 6 ++----
> 3 files changed, 7 insertions(+), 11 deletions(-)
>
Thanks,
Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH for-next 4/8] RDMA/hns: Fix the wrong type of parameter "op" of the mailbox
2022-02-18 11:05 ` [PATCH for-next 4/8] RDMA/hns: Fix the wrong type of parameter "op" of " Wenpeng Liang
@ 2022-02-24 13:31 ` Leon Romanovsky
0 siblings, 0 replies; 18+ messages in thread
From: Leon Romanovsky @ 2022-02-24 13:31 UTC (permalink / raw)
To: Wenpeng Liang; +Cc: jgg, linux-rdma, linuxarm
On Fri, Feb 18, 2022 at 07:05:15PM +0800, Wenpeng Liang wrote:
> The "op" field of the mailbox occupies 8 bits, so the parameter "op"
> should be of type u8.
>
> Signed-off-by: Wenpeng Liang <liangwenpeng@huawei.com>
> ---
> drivers/infiniband/hw/hns/hns_roce_cmd.c | 12 ++++----
> drivers/infiniband/hw/hns/hns_roce_cmd.h | 2 +-
> drivers/infiniband/hw/hns/hns_roce_device.h | 6 ++--
> drivers/infiniband/hw/hns/hns_roce_hem.c | 4 +--
> drivers/infiniband/hw/hns/hns_roce_hw_v2.c | 33 ++++++++++-----------
> 5 files changed, 28 insertions(+), 29 deletions(-)
>
Thanks,
Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH for-next 6/8] RDMA/hns: Remove similar code that configures the hardware contexts
2022-02-18 11:05 ` [PATCH for-next 6/8] RDMA/hns: Remove similar code that configures the hardware contexts Wenpeng Liang
@ 2022-02-24 13:32 ` Leon Romanovsky
0 siblings, 0 replies; 18+ messages in thread
From: Leon Romanovsky @ 2022-02-24 13:32 UTC (permalink / raw)
To: Wenpeng Liang; +Cc: jgg, linux-rdma, linuxarm
On Fri, Feb 18, 2022 at 07:05:17PM +0800, Wenpeng Liang wrote:
> From: Chengchang Tang <tangchengchang@huawei.com>
>
> Remove duplicate code for creating and destroying hardware contexts via
> mailbox.
>
> Signed-off-by: Chengchang Tang <tangchengchang@huawei.com>
> Signed-off-by: Wenpeng Liang <liangwenpeng@huawei.com>
> ---
> drivers/infiniband/hw/hns/hns_roce_cmd.c | 12 +++++++++
> drivers/infiniband/hw/hns/hns_roce_cmd.h | 5 ++++
> drivers/infiniband/hw/hns/hns_roce_cq.c | 8 +++---
> drivers/infiniband/hw/hns/hns_roce_device.h | 2 --
> drivers/infiniband/hw/hns/hns_roce_hw_v2.c | 4 +--
> drivers/infiniband/hw/hns/hns_roce_mr.c | 29 ++++++---------------
> drivers/infiniband/hw/hns/hns_roce_srq.c | 20 +++-----------
> 7 files changed, 35 insertions(+), 45 deletions(-)
>
Thanks,
Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH for-next 7/8] RDMA/hns: Refactor the alloc_srqc()
2022-02-18 11:05 ` [PATCH for-next 7/8] RDMA/hns: Refactor the alloc_srqc() Wenpeng Liang
@ 2022-02-24 13:35 ` Leon Romanovsky
2022-02-25 10:53 ` Wenpeng Liang
0 siblings, 1 reply; 18+ messages in thread
From: Leon Romanovsky @ 2022-02-24 13:35 UTC (permalink / raw)
To: Wenpeng Liang; +Cc: jgg, linux-rdma, linuxarm
On Fri, Feb 18, 2022 at 07:05:18PM +0800, Wenpeng Liang wrote:
> From: Chengchang Tang <tangchengchang@huawei.com>
>
> Abstract the alloc_srqc() into several parts and separate the alloc_srqn()
> from the alloc_srqc().
>
> Signed-off-by: Chengchang Tang <tangchengchang@huawei.com>
> Signed-off-by: Wenpeng Liang <liangwenpeng@huawei.com>
> ---
> drivers/infiniband/hw/hns/hns_roce_srq.c | 80 +++++++++++++++---------
> 1 file changed, 52 insertions(+), 28 deletions(-)
>
> diff --git a/drivers/infiniband/hw/hns/hns_roce_srq.c b/drivers/infiniband/hw/hns/hns_roce_srq.c
> index e316276e18c2..2613889a02ef 100644
> --- a/drivers/infiniband/hw/hns/hns_roce_srq.c
> +++ b/drivers/infiniband/hw/hns/hns_roce_srq.c
> @@ -59,40 +59,39 @@ static void hns_roce_ib_srq_event(struct hns_roce_srq *srq,
> }
> }
>
> -static int alloc_srqc(struct hns_roce_dev *hr_dev, struct hns_roce_srq *srq)
> +static int alloc_srqn(struct hns_roce_dev *hr_dev, struct hns_roce_srq *srq)
> {
> - struct hns_roce_srq_table *srq_table = &hr_dev->srq_table;
> struct hns_roce_ida *srq_ida = &hr_dev->srq_table.srq_ida;
> - struct ib_device *ibdev = &hr_dev->ib_dev;
> - struct hns_roce_cmd_mailbox *mailbox;
> - int ret;
> int id;
>
> id = ida_alloc_range(&srq_ida->ida, srq_ida->min, srq_ida->max,
> GFP_KERNEL);
> if (id < 0) {
> - ibdev_err(ibdev, "failed to alloc srq(%d).\n", id);
> + ibdev_err(&hr_dev->ib_dev, "failed to alloc srq(%d).\n", id);
> return -ENOMEM;
> }
> - srq->srqn = (unsigned long)id;
>
> - ret = hns_roce_table_get(hr_dev, &srq_table->table, srq->srqn);
> - if (ret) {
> - ibdev_err(ibdev, "failed to get SRQC table, ret = %d.\n", ret);
> - goto err_out;
> - }
> + srq->srqn = id;
>
> - ret = xa_err(xa_store(&srq_table->xa, srq->srqn, srq, GFP_KERNEL));
> - if (ret) {
> - ibdev_err(ibdev, "failed to store SRQC, ret = %d.\n", ret);
> - goto err_put;
> - }
> + return 0;
> +}
> +
> +static void free_srqn(struct hns_roce_dev *hr_dev, struct hns_roce_srq *srq)
> +{
> + ida_free(&hr_dev->srq_table.srq_ida.ida, (int)srq->srqn);
> +}
> +
> +static int hns_roce_create_srqc(struct hns_roce_dev *hr_dev,
> + struct hns_roce_srq *srq)
> +{
> + struct ib_device *ibdev = &hr_dev->ib_dev;
> + struct hns_roce_cmd_mailbox *mailbox;
> + int ret;
>
> mailbox = hns_roce_alloc_cmd_mailbox(hr_dev);
> if (IS_ERR_OR_NULL(mailbox)) {
hns_roce_alloc_cmd_mailbox() never returns NULL, so the check should be IS_ERR()
Thanks
> ibdev_err(ibdev, "failed to alloc mailbox for SRQC.\n");
> - ret = -ENOMEM;
> - goto err_xa;
> + return PTR_ERR(mailbox);
> }
>
> ret = hr_dev->hw->write_srqc(srq, mailbox->buf);
> @@ -103,23 +102,42 @@ static int alloc_srqc(struct hns_roce_dev *hr_dev, struct hns_roce_srq *srq)
>
> ret = hns_roce_create_hw_ctx(hr_dev, mailbox, HNS_ROCE_CMD_CREATE_SRQ,
> srq->srqn);
> - if (ret) {
> + if (ret)
> ibdev_err(ibdev, "failed to config SRQC, ret = %d.\n", ret);
> - goto err_mbox;
> - }
>
> +err_mbox:
> hns_roce_free_cmd_mailbox(hr_dev, mailbox);
> + return ret;
> +}
> +
> +static int alloc_srqc(struct hns_roce_dev *hr_dev, struct hns_roce_srq *srq)
> +{
> + struct hns_roce_srq_table *srq_table = &hr_dev->srq_table;
> + struct ib_device *ibdev = &hr_dev->ib_dev;
> + int ret;
> +
> + ret = hns_roce_table_get(hr_dev, &srq_table->table, srq->srqn);
> + if (ret) {
> + ibdev_err(ibdev, "failed to get SRQC table, ret = %d.\n", ret);
> + return ret;
> + }
> +
> + ret = xa_err(xa_store(&srq_table->xa, srq->srqn, srq, GFP_KERNEL));
> + if (ret) {
> + ibdev_err(ibdev, "failed to store SRQC, ret = %d.\n", ret);
> + goto err_put;
> + }
> +
> + ret = hns_roce_create_srqc(hr_dev, srq);
> + if (ret)
> + goto err_xa;
>
> return 0;
>
> -err_mbox:
> - hns_roce_free_cmd_mailbox(hr_dev, mailbox);
> err_xa:
> xa_erase(&srq_table->xa, srq->srqn);
> err_put:
> hns_roce_table_put(hr_dev, &srq_table->table, srq->srqn);
> -err_out:
> - ida_free(&srq_ida->ida, id);
>
> return ret;
> }
> @@ -142,7 +160,6 @@ static void free_srqc(struct hns_roce_dev *hr_dev, struct hns_roce_srq *srq)
> wait_for_completion(&srq->free);
>
> hns_roce_table_put(hr_dev, &srq_table->table, srq->srqn);
> - ida_free(&srq_table->srq_ida.ida, (int)srq->srqn);
> }
>
> static int alloc_srq_idx(struct hns_roce_dev *hr_dev, struct hns_roce_srq *srq,
> @@ -390,10 +407,14 @@ int hns_roce_create_srq(struct ib_srq *ib_srq,
> if (ret)
> return ret;
>
> - ret = alloc_srqc(hr_dev, srq);
> + ret = alloc_srqn(hr_dev, srq);
> if (ret)
> goto err_srq_buf;
>
> + ret = alloc_srqc(hr_dev, srq);
> + if (ret)
> + goto err_srqn;
> +
> if (udata) {
> resp.srqn = srq->srqn;
> if (ib_copy_to_udata(udata, &resp,
> @@ -412,6 +433,8 @@ int hns_roce_create_srq(struct ib_srq *ib_srq,
>
> err_srqc:
> free_srqc(hr_dev, srq);
> +err_srqn:
> + free_srqn(hr_dev, srq);
> err_srq_buf:
> free_srq_buf(hr_dev, srq);
>
> @@ -424,6 +447,7 @@ int hns_roce_destroy_srq(struct ib_srq *ibsrq, struct ib_udata *udata)
> struct hns_roce_srq *srq = to_hr_srq(ibsrq);
>
> free_srqc(hr_dev, srq);
> + free_srqn(hr_dev, srq);
> free_srq_buf(hr_dev, srq);
> return 0;
> }
> --
> 2.33.0
>
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH for-next 5/8] RDMA/hns: Refactor mailbox functions
2022-02-24 13:30 ` Leon Romanovsky
@ 2022-02-25 10:50 ` Wenpeng Liang
0 siblings, 0 replies; 18+ messages in thread
From: Wenpeng Liang @ 2022-02-25 10:50 UTC (permalink / raw)
To: Leon Romanovsky; +Cc: jgg, linux-rdma, linuxarm
On 2022/2/24 21:30, Leon Romanovsky wrote:
>> #define CMD_POLL_TOKEN 0xffff
>> #define CMD_MAX_NUM 32
>>
>> -static int hns_roce_cmd_mbox_post_hw(struct hns_roce_dev *hr_dev, u64 in_param,
>> - u64 out_param, u32 in_modifier, u8 op,
>> - u16 token, int event)
>> +static int hns_roce_cmd_mbox_post_hw(struct hns_roce_dev *hr_dev,
>> + struct hns_roce_mbox_msg *mbox_msg)
>> {
>> - return hr_dev->hw->post_mbox(hr_dev, in_param, out_param, in_modifier,
>> - op, token, event);
>> + return hr_dev->hw->post_mbox(hr_dev, mbox_msg);
>> +}
>> +
>> +static void hns_roce_set_basic_mbox_msg(struct hns_roce_mbox_msg *mbox_msg,
>> + u64 in_param, u64 out_param, u8 cmd,
>> + unsigned long tag)
>> +{
>> + mbox_msg->in_param = in_param;
>> + mbox_msg->out_param = out_param;
>> + mbox_msg->cmd = cmd;
>> + mbox_msg->tag = tag;
>> +}
>> +
>> +static void hns_roce_set_poll_mbox_msg(struct hns_roce_mbox_msg *mbox_msg)
>> +{
>> + mbox_msg->event_en = 0;
>> + mbox_msg->token = CMD_POLL_TOKEN;
>> +}
>> +
>> +static void hns_roce_set_event_mbox_msg(struct hns_roce_mbox_msg *mbox_msg,
>> + struct hns_roce_cmd_context *context)
>> +{
>> + mbox_msg->event_en = 1;
>> + mbox_msg->token = context->token;
>> }
> I don't see too much value in three functions above. They are called exactly once.
>
> Thanks
> .
>
Yes, these assignment statements should not constitute a standalone function.
Fix it in v2.
Thanks,
Wenpeng
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH for-next 7/8] RDMA/hns: Refactor the alloc_srqc()
2022-02-24 13:35 ` Leon Romanovsky
@ 2022-02-25 10:53 ` Wenpeng Liang
0 siblings, 0 replies; 18+ messages in thread
From: Wenpeng Liang @ 2022-02-25 10:53 UTC (permalink / raw)
To: Leon Romanovsky; +Cc: jgg, linux-rdma, linuxarm
On 2022/2/24 21:35, Leon Romanovsky wrote:
>> +static int hns_roce_create_srqc(struct hns_roce_dev *hr_dev,
>> + struct hns_roce_srq *srq)
>> +{
>> + struct ib_device *ibdev = &hr_dev->ib_dev;
>> + struct hns_roce_cmd_mailbox *mailbox;
>> + int ret;
>>
>> mailbox = hns_roce_alloc_cmd_mailbox(hr_dev);
>> if (IS_ERR_OR_NULL(mailbox)) {
> hns_roce_alloc_cmd_mailbox() never returns NULL, so the check should be IS_ERR()
>
> Thanks
>
There are a few more hns_roce_alloc_cmd_mailbox() return values to deal with.
I will add a new patch in v2.
Thanks,
Wenpeng
>> ibdev_err(ibdev, "failed to alloc mailbox for SRQC.\n");
>> - ret = -ENOMEM;
>> - goto err_xa;
>> + return PTR_ERR(mailbox);
>> }
^ permalink raw reply [flat|nested] 18+ messages in thread
end of thread, other threads:[~2022-02-25 10:53 UTC | newest]
Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-02-18 11:05 [PATCH for-next 0/8] RDMA/hns: Clean up and refactor mailbox-related code Wenpeng Liang
2022-02-18 11:05 ` [PATCH for-next 1/8] RDMA/hns: Remove the unused parameter "op_modifier" in mailbox Wenpeng Liang
2022-02-24 13:30 ` Leon Romanovsky
2022-02-18 11:05 ` [PATCH for-next 2/8] RDMA/hns: Remove fixed parameter “timeout” in the mailbox Wenpeng Liang
2022-02-24 13:31 ` Leon Romanovsky
2022-02-18 11:05 ` [PATCH for-next 3/8] RDMA/hns: Remove redundant parameter "mailbox" " Wenpeng Liang
2022-02-24 13:31 ` Leon Romanovsky
2022-02-18 11:05 ` [PATCH for-next 4/8] RDMA/hns: Fix the wrong type of parameter "op" of " Wenpeng Liang
2022-02-24 13:31 ` Leon Romanovsky
2022-02-18 11:05 ` [PATCH for-next 5/8] RDMA/hns: Refactor mailbox functions Wenpeng Liang
2022-02-24 13:30 ` Leon Romanovsky
2022-02-25 10:50 ` Wenpeng Liang
2022-02-18 11:05 ` [PATCH for-next 6/8] RDMA/hns: Remove similar code that configures the hardware contexts Wenpeng Liang
2022-02-24 13:32 ` Leon Romanovsky
2022-02-18 11:05 ` [PATCH for-next 7/8] RDMA/hns: Refactor the alloc_srqc() Wenpeng Liang
2022-02-24 13:35 ` Leon Romanovsky
2022-02-25 10:53 ` Wenpeng Liang
2022-02-18 11:05 ` [PATCH for-next 8/8] RDMA/hns: Refactor the alloc_cqc() Wenpeng Liang
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).