qed: simplify chain allocation with init params struct
To simplify qed_chain_alloc() prototype and call sites, introduce struct qed_chain_init_params to specify chain params, and pass a pointer to filled struct to the actual qed_chain_alloc() instead of a long list of separate arguments. Signed-off-by: Alexander Lobakin <alobakin@marvell.com> Signed-off-by: Igor Russkikh <irusskikh@marvell.com> Signed-off-by: Michal Kalderon <michal.kalderon@marvell.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

zatwierdzone przez
David S. Miller

rodzic
c3a321b06a
commit
b6db3f71c9
@@ -891,6 +891,12 @@ int qedr_create_cq(struct ib_cq *ibcq, const struct ib_cq_init_attr *attr,
|
||||
udata, struct qedr_ucontext, ibucontext);
|
||||
struct qed_rdma_destroy_cq_out_params destroy_oparams;
|
||||
struct qed_rdma_destroy_cq_in_params destroy_iparams;
|
||||
struct qed_chain_init_params chain_params = {
|
||||
.mode = QED_CHAIN_MODE_PBL,
|
||||
.intended_use = QED_CHAIN_USE_TO_CONSUME,
|
||||
.cnt_type = QED_CHAIN_CNT_TYPE_U32,
|
||||
.elem_size = sizeof(union rdma_cqe),
|
||||
};
|
||||
struct qedr_dev *dev = get_qedr_dev(ibdev);
|
||||
struct qed_rdma_create_cq_in_params params;
|
||||
struct qedr_create_cq_ureq ureq = {};
|
||||
@@ -917,6 +923,7 @@ int qedr_create_cq(struct ib_cq *ibcq, const struct ib_cq_init_attr *attr,
|
||||
|
||||
chain_entries = qedr_align_cq_entries(entries);
|
||||
chain_entries = min_t(int, chain_entries, QEDR_MAX_CQES);
|
||||
chain_params.num_elems = chain_entries;
|
||||
|
||||
/* calc db offset. user will add DPI base, kernel will add db addr */
|
||||
db_offset = DB_ADDR_SHIFT(DQ_PWM_OFFSET_UCM_RDMA_CQ_CONS_32BIT);
|
||||
@@ -951,13 +958,8 @@ int qedr_create_cq(struct ib_cq *ibcq, const struct ib_cq_init_attr *attr,
|
||||
} else {
|
||||
cq->cq_type = QEDR_CQ_TYPE_KERNEL;
|
||||
|
||||
rc = dev->ops->common->chain_alloc(dev->cdev,
|
||||
QED_CHAIN_USE_TO_CONSUME,
|
||||
QED_CHAIN_MODE_PBL,
|
||||
QED_CHAIN_CNT_TYPE_U32,
|
||||
chain_entries,
|
||||
sizeof(union rdma_cqe),
|
||||
&cq->pbl, NULL);
|
||||
rc = dev->ops->common->chain_alloc(dev->cdev, &cq->pbl,
|
||||
&chain_params);
|
||||
if (rc)
|
||||
goto err0;
|
||||
|
||||
@@ -1446,6 +1448,12 @@ static int qedr_alloc_srq_kernel_params(struct qedr_srq *srq,
|
||||
struct ib_srq_init_attr *init_attr)
|
||||
{
|
||||
struct qedr_srq_hwq_info *hw_srq = &srq->hw_srq;
|
||||
struct qed_chain_init_params params = {
|
||||
.mode = QED_CHAIN_MODE_PBL,
|
||||
.intended_use = QED_CHAIN_USE_TO_CONSUME_PRODUCE,
|
||||
.cnt_type = QED_CHAIN_CNT_TYPE_U32,
|
||||
.elem_size = QEDR_SRQ_WQE_ELEM_SIZE,
|
||||
};
|
||||
dma_addr_t phy_prod_pair_addr;
|
||||
u32 num_elems;
|
||||
void *va;
|
||||
@@ -1464,13 +1472,9 @@ static int qedr_alloc_srq_kernel_params(struct qedr_srq *srq,
|
||||
hw_srq->virt_prod_pair_addr = va;
|
||||
|
||||
num_elems = init_attr->attr.max_wr * RDMA_MAX_SRQ_WQE_SIZE;
|
||||
rc = dev->ops->common->chain_alloc(dev->cdev,
|
||||
QED_CHAIN_USE_TO_CONSUME_PRODUCE,
|
||||
QED_CHAIN_MODE_PBL,
|
||||
QED_CHAIN_CNT_TYPE_U32,
|
||||
num_elems,
|
||||
QEDR_SRQ_WQE_ELEM_SIZE,
|
||||
&hw_srq->pbl, NULL);
|
||||
params.num_elems = num_elems;
|
||||
|
||||
rc = dev->ops->common->chain_alloc(dev->cdev, &hw_srq->pbl, ¶ms);
|
||||
if (rc)
|
||||
goto err0;
|
||||
|
||||
@@ -1901,29 +1905,28 @@ qedr_roce_create_kernel_qp(struct qedr_dev *dev,
|
||||
u32 n_sq_elems, u32 n_rq_elems)
|
||||
{
|
||||
struct qed_rdma_create_qp_out_params out_params;
|
||||
struct qed_chain_init_params params = {
|
||||
.mode = QED_CHAIN_MODE_PBL,
|
||||
.cnt_type = QED_CHAIN_CNT_TYPE_U32,
|
||||
};
|
||||
int rc;
|
||||
|
||||
rc = dev->ops->common->chain_alloc(dev->cdev,
|
||||
QED_CHAIN_USE_TO_PRODUCE,
|
||||
QED_CHAIN_MODE_PBL,
|
||||
QED_CHAIN_CNT_TYPE_U32,
|
||||
n_sq_elems,
|
||||
QEDR_SQE_ELEMENT_SIZE,
|
||||
&qp->sq.pbl, NULL);
|
||||
params.intended_use = QED_CHAIN_USE_TO_PRODUCE;
|
||||
params.num_elems = n_sq_elems;
|
||||
params.elem_size = QEDR_SQE_ELEMENT_SIZE;
|
||||
|
||||
rc = dev->ops->common->chain_alloc(dev->cdev, &qp->sq.pbl, ¶ms);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
in_params->sq_num_pages = qed_chain_get_page_cnt(&qp->sq.pbl);
|
||||
in_params->sq_pbl_ptr = qed_chain_get_pbl_phys(&qp->sq.pbl);
|
||||
|
||||
rc = dev->ops->common->chain_alloc(dev->cdev,
|
||||
QED_CHAIN_USE_TO_CONSUME_PRODUCE,
|
||||
QED_CHAIN_MODE_PBL,
|
||||
QED_CHAIN_CNT_TYPE_U32,
|
||||
n_rq_elems,
|
||||
QEDR_RQE_ELEMENT_SIZE,
|
||||
&qp->rq.pbl, NULL);
|
||||
params.intended_use = QED_CHAIN_USE_TO_CONSUME_PRODUCE;
|
||||
params.elem_size = n_rq_elems;
|
||||
params.elem_size = QEDR_RQE_ELEMENT_SIZE;
|
||||
|
||||
rc = dev->ops->common->chain_alloc(dev->cdev, &qp->rq.pbl, ¶ms);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
@@ -1949,7 +1952,10 @@ qedr_iwarp_create_kernel_qp(struct qedr_dev *dev,
|
||||
u32 n_sq_elems, u32 n_rq_elems)
|
||||
{
|
||||
struct qed_rdma_create_qp_out_params out_params;
|
||||
struct qed_chain_ext_pbl ext_pbl;
|
||||
struct qed_chain_init_params params = {
|
||||
.mode = QED_CHAIN_MODE_PBL,
|
||||
.cnt_type = QED_CHAIN_CNT_TYPE_U32,
|
||||
};
|
||||
int rc;
|
||||
|
||||
in_params->sq_num_pages = QED_CHAIN_PAGE_CNT(n_sq_elems,
|
||||
@@ -1966,31 +1972,24 @@ qedr_iwarp_create_kernel_qp(struct qedr_dev *dev,
|
||||
return -EINVAL;
|
||||
|
||||
/* Now we allocate the chain */
|
||||
ext_pbl.p_pbl_virt = out_params.sq_pbl_virt;
|
||||
ext_pbl.p_pbl_phys = out_params.sq_pbl_phys;
|
||||
|
||||
rc = dev->ops->common->chain_alloc(dev->cdev,
|
||||
QED_CHAIN_USE_TO_PRODUCE,
|
||||
QED_CHAIN_MODE_PBL,
|
||||
QED_CHAIN_CNT_TYPE_U32,
|
||||
n_sq_elems,
|
||||
QEDR_SQE_ELEMENT_SIZE,
|
||||
&qp->sq.pbl, &ext_pbl);
|
||||
params.intended_use = QED_CHAIN_USE_TO_PRODUCE;
|
||||
params.num_elems = n_sq_elems;
|
||||
params.elem_size = QEDR_SQE_ELEMENT_SIZE;
|
||||
params.ext_pbl_virt = out_params.sq_pbl_virt;
|
||||
params.ext_pbl_phys = out_params.sq_pbl_phys;
|
||||
|
||||
rc = dev->ops->common->chain_alloc(dev->cdev, &qp->sq.pbl, ¶ms);
|
||||
if (rc)
|
||||
goto err;
|
||||
|
||||
ext_pbl.p_pbl_virt = out_params.rq_pbl_virt;
|
||||
ext_pbl.p_pbl_phys = out_params.rq_pbl_phys;
|
||||
|
||||
rc = dev->ops->common->chain_alloc(dev->cdev,
|
||||
QED_CHAIN_USE_TO_CONSUME_PRODUCE,
|
||||
QED_CHAIN_MODE_PBL,
|
||||
QED_CHAIN_CNT_TYPE_U32,
|
||||
n_rq_elems,
|
||||
QEDR_RQE_ELEMENT_SIZE,
|
||||
&qp->rq.pbl, &ext_pbl);
|
||||
params.intended_use = QED_CHAIN_USE_TO_CONSUME_PRODUCE;
|
||||
params.num_elems = n_rq_elems;
|
||||
params.elem_size = QEDR_RQE_ELEMENT_SIZE;
|
||||
params.ext_pbl_virt = out_params.rq_pbl_virt;
|
||||
params.ext_pbl_phys = out_params.rq_pbl_phys;
|
||||
|
||||
rc = dev->ops->common->chain_alloc(dev->cdev, &qp->rq.pbl, ¶ms);
|
||||
if (rc)
|
||||
goto err;
|
||||
|
||||
|
Reference in New Issue
Block a user