aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/infiniband/hw/ocrdma
diff options
context:
space:
mode:
authorNaresh Gottumukkala <bgottumukkala@emulex.com>2013-08-07 03:22:33 -0400
committerRoland Dreier <roland@purestorage.com>2013-08-12 13:58:38 -0400
commit1afc0454b6658ad2d0a87e594e1f06dc19c6977d (patch)
tree5d57e75ef9a5ba3b42bdc3d68914a5de92793208 /drivers/infiniband/hw/ocrdma
parentf99b1649dbb6342d618307faef1f214fd54928b9 (diff)
RDMA/ocrdma: Remove redundant dev reference
Remove redundant dev reference from structures: 1) ocrdma_cq. 2) ocrdma_ah. 3) ocrdma_hw_mr. 4) ocrdma_mw. 5) ocrdma_srq. Signed-off-by: Naresh Gottumukkala <bgottumukkala@emulex.com> Signed-off-by: Roland Dreier <roland@purestorage.com>
Diffstat (limited to 'drivers/infiniband/hw/ocrdma')
-rw-r--r--drivers/infiniband/hw/ocrdma/ocrdma.h5
-rw-r--r--drivers/infiniband/hw/ocrdma/ocrdma_ah.c10
-rw-r--r--drivers/infiniband/hw/ocrdma/ocrdma_hw.c26
-rw-r--r--drivers/infiniband/hw/ocrdma/ocrdma_hw.h3
-rw-r--r--drivers/infiniband/hw/ocrdma/ocrdma_verbs.c76
5 files changed, 57 insertions, 63 deletions
diff --git a/drivers/infiniband/hw/ocrdma/ocrdma.h b/drivers/infiniband/hw/ocrdma/ocrdma.h
index 5c00600135ed..8d54dc74ca77 100644
--- a/drivers/infiniband/hw/ocrdma/ocrdma.h
+++ b/drivers/infiniband/hw/ocrdma/ocrdma.h
@@ -172,7 +172,6 @@ struct ocrdma_dev {
172 172
173struct ocrdma_cq { 173struct ocrdma_cq {
174 struct ib_cq ibcq; 174 struct ib_cq ibcq;
175 struct ocrdma_dev *dev;
176 struct ocrdma_cqe *va; 175 struct ocrdma_cqe *va;
177 u32 phase; 176 u32 phase;
178 u32 getp; /* pointer to pending wrs to 177 u32 getp; /* pointer to pending wrs to
@@ -214,7 +213,6 @@ struct ocrdma_pd {
214 213
215struct ocrdma_ah { 214struct ocrdma_ah {
216 struct ib_ah ibah; 215 struct ib_ah ibah;
217 struct ocrdma_dev *dev;
218 struct ocrdma_av *av; 216 struct ocrdma_av *av;
219 u16 sgid_index; 217 u16 sgid_index;
220 u32 id; 218 u32 id;
@@ -234,7 +232,6 @@ struct ocrdma_qp_hwq_info {
234 232
235struct ocrdma_srq { 233struct ocrdma_srq {
236 struct ib_srq ibsrq; 234 struct ib_srq ibsrq;
237 struct ocrdma_dev *dev;
238 u8 __iomem *db; 235 u8 __iomem *db;
239 struct ocrdma_qp_hwq_info rq; 236 struct ocrdma_qp_hwq_info rq;
240 u64 *rqe_wr_id_tbl; 237 u64 *rqe_wr_id_tbl;
@@ -293,7 +290,6 @@ struct ocrdma_qp {
293}; 290};
294 291
295struct ocrdma_hw_mr { 292struct ocrdma_hw_mr {
296 struct ocrdma_dev *dev;
297 u32 lkey; 293 u32 lkey;
298 u8 fr_mr; 294 u8 fr_mr;
299 u8 remote_atomic; 295 u8 remote_atomic;
@@ -321,7 +317,6 @@ struct ocrdma_mr {
321 317
322struct ocrdma_ucontext { 318struct ocrdma_ucontext {
323 struct ib_ucontext ibucontext; 319 struct ib_ucontext ibucontext;
324 struct ocrdma_dev *dev;
325 320
326 struct list_head mm_head; 321 struct list_head mm_head;
327 struct mutex mm_list_lock; /* protects list entries of mm type */ 322 struct mutex mm_list_lock; /* protects list entries of mm type */
diff --git a/drivers/infiniband/hw/ocrdma/ocrdma_ah.c b/drivers/infiniband/hw/ocrdma/ocrdma_ah.c
index a6bb3d074d2d..df9e73758afb 100644
--- a/drivers/infiniband/hw/ocrdma/ocrdma_ah.c
+++ b/drivers/infiniband/hw/ocrdma/ocrdma_ah.c
@@ -35,12 +35,11 @@
35#include "ocrdma_ah.h" 35#include "ocrdma_ah.h"
36#include "ocrdma_hw.h" 36#include "ocrdma_hw.h"
37 37
38static inline int set_av_attr(struct ocrdma_ah *ah, 38static inline int set_av_attr(struct ocrdma_dev *dev, struct ocrdma_ah *ah,
39 struct ib_ah_attr *attr, int pdid) 39 struct ib_ah_attr *attr, int pdid)
40{ 40{
41 int status = 0; 41 int status = 0;
42 u16 vlan_tag; bool vlan_enabled = false; 42 u16 vlan_tag; bool vlan_enabled = false;
43 struct ocrdma_dev *dev = ah->dev;
44 struct ocrdma_eth_vlan eth; 43 struct ocrdma_eth_vlan eth;
45 struct ocrdma_grh grh; 44 struct ocrdma_grh grh;
46 int eth_sz; 45 int eth_sz;
@@ -100,12 +99,11 @@ struct ib_ah *ocrdma_create_ah(struct ib_pd *ibpd, struct ib_ah_attr *attr)
100 ah = kzalloc(sizeof *ah, GFP_ATOMIC); 99 ah = kzalloc(sizeof *ah, GFP_ATOMIC);
101 if (!ah) 100 if (!ah)
102 return ERR_PTR(-ENOMEM); 101 return ERR_PTR(-ENOMEM);
103 ah->dev = dev;
104 102
105 status = ocrdma_alloc_av(dev, ah); 103 status = ocrdma_alloc_av(dev, ah);
106 if (status) 104 if (status)
107 goto av_err; 105 goto av_err;
108 status = set_av_attr(ah, attr, pd->id); 106 status = set_av_attr(dev, ah, attr, pd->id);
109 if (status) 107 if (status)
110 goto av_conf_err; 108 goto av_conf_err;
111 109
@@ -126,7 +124,9 @@ av_err:
126int ocrdma_destroy_ah(struct ib_ah *ibah) 124int ocrdma_destroy_ah(struct ib_ah *ibah)
127{ 125{
128 struct ocrdma_ah *ah = get_ocrdma_ah(ibah); 126 struct ocrdma_ah *ah = get_ocrdma_ah(ibah);
129 ocrdma_free_av(ah->dev, ah); 127 struct ocrdma_dev *dev = get_ocrdma_dev(ibah->device);
128
129 ocrdma_free_av(dev, ah);
130 kfree(ah); 130 kfree(ah);
131 return 0; 131 return 0;
132} 132}
diff --git a/drivers/infiniband/hw/ocrdma/ocrdma_hw.c b/drivers/infiniband/hw/ocrdma/ocrdma_hw.c
index eb41a1c9ad69..6bbcc786ef6d 100644
--- a/drivers/infiniband/hw/ocrdma/ocrdma_hw.c
+++ b/drivers/infiniband/hw/ocrdma/ocrdma_hw.c
@@ -523,16 +523,21 @@ static int ocrdma_mbx_mq_cq_create(struct ocrdma_dev *dev,
523 ocrdma_init_mch(&cmd->req, OCRDMA_CMD_CREATE_CQ, 523 ocrdma_init_mch(&cmd->req, OCRDMA_CMD_CREATE_CQ,
524 OCRDMA_SUBSYS_COMMON, sizeof(*cmd)); 524 OCRDMA_SUBSYS_COMMON, sizeof(*cmd));
525 525
526 cmd->pgsz_pgcnt = PAGES_4K_SPANNED(cq->va, cq->size); 526 cmd->req.rsvd_version = OCRDMA_CREATE_CQ_VER2;
527 cmd->pgsz_pgcnt = (cq->size / OCRDMA_MIN_Q_PAGE_SIZE) <<
528 OCRDMA_CREATE_CQ_PAGE_SIZE_SHIFT;
529 cmd->pgsz_pgcnt |= PAGES_4K_SPANNED(cq->va, cq->size);
530
527 cmd->ev_cnt_flags = OCRDMA_CREATE_CQ_DEF_FLAGS; 531 cmd->ev_cnt_flags = OCRDMA_CREATE_CQ_DEF_FLAGS;
528 cmd->eqn = (eq->id << OCRDMA_CREATE_CQ_EQID_SHIFT); 532 cmd->eqn = eq->id;
533 cmd->cqe_count = cq->size / sizeof(struct ocrdma_mcqe);
529 534
530 ocrdma_build_q_pages(&cmd->pa[0], cmd->pgsz_pgcnt, 535 ocrdma_build_q_pages(&cmd->pa[0], cq->size / OCRDMA_MIN_Q_PAGE_SIZE,
531 cq->dma, PAGE_SIZE_4K); 536 cq->dma, PAGE_SIZE_4K);
532 status = be_roce_mcc_cmd(dev->nic_info.netdev, 537 status = be_roce_mcc_cmd(dev->nic_info.netdev,
533 cmd, sizeof(*cmd), NULL, NULL); 538 cmd, sizeof(*cmd), NULL, NULL);
534 if (!status) { 539 if (!status) {
535 cq->id = (rsp->cq_id & OCRDMA_CREATE_CQ_RSP_CQ_ID_MASK); 540 cq->id = (u16) (rsp->cq_id & OCRDMA_CREATE_CQ_RSP_CQ_ID_MASK);
536 cq->created = true; 541 cq->created = true;
537 } 542 }
538 return status; 543 return status;
@@ -2326,7 +2331,7 @@ mbx_err:
2326 return status; 2331 return status;
2327} 2332}
2328 2333
2329int ocrdma_mbx_create_srq(struct ocrdma_srq *srq, 2334int ocrdma_mbx_create_srq(struct ocrdma_dev *dev, struct ocrdma_srq *srq,
2330 struct ib_srq_init_attr *srq_attr, 2335 struct ib_srq_init_attr *srq_attr,
2331 struct ocrdma_pd *pd) 2336 struct ocrdma_pd *pd)
2332{ 2337{
@@ -2336,7 +2341,6 @@ int ocrdma_mbx_create_srq(struct ocrdma_srq *srq,
2336 struct ocrdma_create_srq_rsp *rsp; 2341 struct ocrdma_create_srq_rsp *rsp;
2337 struct ocrdma_create_srq *cmd; 2342 struct ocrdma_create_srq *cmd;
2338 dma_addr_t pa; 2343 dma_addr_t pa;
2339 struct ocrdma_dev *dev = srq->dev;
2340 struct pci_dev *pdev = dev->nic_info.pdev; 2344 struct pci_dev *pdev = dev->nic_info.pdev;
2341 u32 max_rqe_allocated; 2345 u32 max_rqe_allocated;
2342 2346
@@ -2406,13 +2410,15 @@ int ocrdma_mbx_modify_srq(struct ocrdma_srq *srq, struct ib_srq_attr *srq_attr)
2406{ 2410{
2407 int status = -ENOMEM; 2411 int status = -ENOMEM;
2408 struct ocrdma_modify_srq *cmd; 2412 struct ocrdma_modify_srq *cmd;
2413 struct ocrdma_dev *dev = get_ocrdma_dev(srq->ibsrq.device);
2414
2409 cmd = ocrdma_init_emb_mqe(OCRDMA_CMD_CREATE_SRQ, sizeof(*cmd)); 2415 cmd = ocrdma_init_emb_mqe(OCRDMA_CMD_CREATE_SRQ, sizeof(*cmd));
2410 if (!cmd) 2416 if (!cmd)
2411 return status; 2417 return status;
2412 cmd->id = srq->id; 2418 cmd->id = srq->id;
2413 cmd->limit_max_rqe |= srq_attr->srq_limit << 2419 cmd->limit_max_rqe |= srq_attr->srq_limit <<
2414 OCRDMA_MODIFY_SRQ_LIMIT_SHIFT; 2420 OCRDMA_MODIFY_SRQ_LIMIT_SHIFT;
2415 status = ocrdma_mbx_cmd(srq->dev, (struct ocrdma_mqe *)cmd); 2421 status = ocrdma_mbx_cmd(dev, (struct ocrdma_mqe *)cmd);
2416 kfree(cmd); 2422 kfree(cmd);
2417 return status; 2423 return status;
2418} 2424}
@@ -2421,11 +2427,13 @@ int ocrdma_mbx_query_srq(struct ocrdma_srq *srq, struct ib_srq_attr *srq_attr)
2421{ 2427{
2422 int status = -ENOMEM; 2428 int status = -ENOMEM;
2423 struct ocrdma_query_srq *cmd; 2429 struct ocrdma_query_srq *cmd;
2430 struct ocrdma_dev *dev = get_ocrdma_dev(srq->ibsrq.device);
2431
2424 cmd = ocrdma_init_emb_mqe(OCRDMA_CMD_CREATE_SRQ, sizeof(*cmd)); 2432 cmd = ocrdma_init_emb_mqe(OCRDMA_CMD_CREATE_SRQ, sizeof(*cmd));
2425 if (!cmd) 2433 if (!cmd)
2426 return status; 2434 return status;
2427 cmd->id = srq->rq.dbid; 2435 cmd->id = srq->rq.dbid;
2428 status = ocrdma_mbx_cmd(srq->dev, (struct ocrdma_mqe *)cmd); 2436 status = ocrdma_mbx_cmd(dev, (struct ocrdma_mqe *)cmd);
2429 if (status == 0) { 2437 if (status == 0) {
2430 struct ocrdma_query_srq_rsp *rsp = 2438 struct ocrdma_query_srq_rsp *rsp =
2431 (struct ocrdma_query_srq_rsp *)cmd; 2439 (struct ocrdma_query_srq_rsp *)cmd;
@@ -2450,7 +2458,7 @@ int ocrdma_mbx_destroy_srq(struct ocrdma_dev *dev, struct ocrdma_srq *srq)
2450 if (!cmd) 2458 if (!cmd)
2451 return status; 2459 return status;
2452 cmd->id = srq->id; 2460 cmd->id = srq->id;
2453 status = ocrdma_mbx_cmd(srq->dev, (struct ocrdma_mqe *)cmd); 2461 status = ocrdma_mbx_cmd(dev, (struct ocrdma_mqe *)cmd);
2454 if (srq->rq.va) 2462 if (srq->rq.va)
2455 dma_free_coherent(&pdev->dev, srq->rq.len, 2463 dma_free_coherent(&pdev->dev, srq->rq.len,
2456 srq->rq.va, srq->rq.pa); 2464 srq->rq.va, srq->rq.pa);
diff --git a/drivers/infiniband/hw/ocrdma/ocrdma_hw.h b/drivers/infiniband/hw/ocrdma/ocrdma_hw.h
index be5db77404db..5d8e6f518f87 100644
--- a/drivers/infiniband/hw/ocrdma/ocrdma_hw.h
+++ b/drivers/infiniband/hw/ocrdma/ocrdma_hw.h
@@ -112,8 +112,7 @@ int ocrdma_mbx_modify_qp(struct ocrdma_dev *, struct ocrdma_qp *,
112int ocrdma_mbx_query_qp(struct ocrdma_dev *, struct ocrdma_qp *, 112int ocrdma_mbx_query_qp(struct ocrdma_dev *, struct ocrdma_qp *,
113 struct ocrdma_qp_params *param); 113 struct ocrdma_qp_params *param);
114int ocrdma_mbx_destroy_qp(struct ocrdma_dev *, struct ocrdma_qp *); 114int ocrdma_mbx_destroy_qp(struct ocrdma_dev *, struct ocrdma_qp *);
115 115int ocrdma_mbx_create_srq(struct ocrdma_dev *, struct ocrdma_srq *,
116int ocrdma_mbx_create_srq(struct ocrdma_srq *,
117 struct ib_srq_init_attr *, 116 struct ib_srq_init_attr *,
118 struct ocrdma_pd *); 117 struct ocrdma_pd *);
119int ocrdma_mbx_modify_srq(struct ocrdma_srq *, struct ib_srq_attr *); 118int ocrdma_mbx_modify_srq(struct ocrdma_srq *, struct ib_srq_attr *);
diff --git a/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c b/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c
index 77fc50a5cc93..c9ace64fc343 100644
--- a/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c
+++ b/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c
@@ -229,7 +229,6 @@ struct ib_ucontext *ocrdma_alloc_ucontext(struct ib_device *ibdev,
229 ctx = kzalloc(sizeof(*ctx), GFP_KERNEL); 229 ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
230 if (!ctx) 230 if (!ctx)
231 return ERR_PTR(-ENOMEM); 231 return ERR_PTR(-ENOMEM);
232 ctx->dev = dev;
233 INIT_LIST_HEAD(&ctx->mm_head); 232 INIT_LIST_HEAD(&ctx->mm_head);
234 mutex_init(&ctx->mm_list_lock); 233 mutex_init(&ctx->mm_list_lock);
235 234
@@ -274,7 +273,8 @@ int ocrdma_dealloc_ucontext(struct ib_ucontext *ibctx)
274{ 273{
275 struct ocrdma_mm *mm, *tmp; 274 struct ocrdma_mm *mm, *tmp;
276 struct ocrdma_ucontext *uctx = get_ocrdma_ucontext(ibctx); 275 struct ocrdma_ucontext *uctx = get_ocrdma_ucontext(ibctx);
277 struct pci_dev *pdev = uctx->dev->nic_info.pdev; 276 struct ocrdma_dev *dev = get_ocrdma_dev(ibctx->device);
277 struct pci_dev *pdev = dev->nic_info.pdev;
278 278
279 ocrdma_del_mmap(uctx, uctx->ah_tbl.pa, uctx->ah_tbl.len); 279 ocrdma_del_mmap(uctx, uctx->ah_tbl.pa, uctx->ah_tbl.len);
280 dma_free_coherent(&pdev->dev, uctx->ah_tbl.len, uctx->ah_tbl.va, 280 dma_free_coherent(&pdev->dev, uctx->ah_tbl.len, uctx->ah_tbl.va,
@@ -291,7 +291,7 @@ int ocrdma_dealloc_ucontext(struct ib_ucontext *ibctx)
291int ocrdma_mmap(struct ib_ucontext *context, struct vm_area_struct *vma) 291int ocrdma_mmap(struct ib_ucontext *context, struct vm_area_struct *vma)
292{ 292{
293 struct ocrdma_ucontext *ucontext = get_ocrdma_ucontext(context); 293 struct ocrdma_ucontext *ucontext = get_ocrdma_ucontext(context);
294 struct ocrdma_dev *dev = ucontext->dev; 294 struct ocrdma_dev *dev = get_ocrdma_dev(context->device);
295 unsigned long vm_page = vma->vm_pgoff << PAGE_SHIFT; 295 unsigned long vm_page = vma->vm_pgoff << PAGE_SHIFT;
296 u64 unmapped_db = (u64) dev->nic_info.unmapped_db; 296 u64 unmapped_db = (u64) dev->nic_info.unmapped_db;
297 unsigned long len = (vma->vm_end - vma->vm_start); 297 unsigned long len = (vma->vm_end - vma->vm_start);
@@ -432,11 +432,10 @@ int ocrdma_dealloc_pd(struct ib_pd *ibpd)
432 return status; 432 return status;
433} 433}
434 434
435static int ocrdma_alloc_lkey(struct ocrdma_mr *mr, u32 pdid, int acc, 435static int ocrdma_alloc_lkey(struct ocrdma_dev *dev, struct ocrdma_mr *mr,
436 u32 num_pbls, u32 addr_check) 436 u32 pdid, int acc, u32 num_pbls, u32 addr_check)
437{ 437{
438 int status; 438 int status;
439 struct ocrdma_dev *dev = mr->hwmr.dev;
440 439
441 mr->hwmr.fr_mr = 0; 440 mr->hwmr.fr_mr = 0;
442 mr->hwmr.local_rd = 1; 441 mr->hwmr.local_rd = 1;
@@ -473,8 +472,7 @@ struct ib_mr *ocrdma_get_dma_mr(struct ib_pd *ibpd, int acc)
473 if (!mr) 472 if (!mr)
474 return ERR_PTR(-ENOMEM); 473 return ERR_PTR(-ENOMEM);
475 474
476 mr->hwmr.dev = dev; 475 status = ocrdma_alloc_lkey(dev, mr, pd->id, acc, 0,
477 status = ocrdma_alloc_lkey(mr, pd->id, acc, 0,
478 OCRDMA_ADDR_CHECK_DISABLE); 476 OCRDMA_ADDR_CHECK_DISABLE);
479 if (status) { 477 if (status) {
480 kfree(mr); 478 kfree(mr);
@@ -503,7 +501,8 @@ static void ocrdma_free_mr_pbl_tbl(struct ocrdma_dev *dev,
503 } 501 }
504} 502}
505 503
506static int ocrdma_get_pbl_info(struct ocrdma_mr *mr, u32 num_pbes) 504static int ocrdma_get_pbl_info(struct ocrdma_dev *dev, struct ocrdma_mr *mr,
505 u32 num_pbes)
507{ 506{
508 u32 num_pbls = 0; 507 u32 num_pbls = 0;
509 u32 idx = 0; 508 u32 idx = 0;
@@ -519,7 +518,7 @@ static int ocrdma_get_pbl_info(struct ocrdma_mr *mr, u32 num_pbes)
519 num_pbls = roundup(num_pbes, (pbl_size / sizeof(u64))); 518 num_pbls = roundup(num_pbes, (pbl_size / sizeof(u64)));
520 num_pbls = num_pbls / (pbl_size / sizeof(u64)); 519 num_pbls = num_pbls / (pbl_size / sizeof(u64));
521 idx++; 520 idx++;
522 } while (num_pbls >= mr->hwmr.dev->attr.max_num_mr_pbl); 521 } while (num_pbls >= dev->attr.max_num_mr_pbl);
523 522
524 mr->hwmr.num_pbes = num_pbes; 523 mr->hwmr.num_pbes = num_pbes;
525 mr->hwmr.num_pbls = num_pbls; 524 mr->hwmr.num_pbls = num_pbls;
@@ -627,14 +626,13 @@ struct ib_mr *ocrdma_reg_user_mr(struct ib_pd *ibpd, u64 start, u64 len,
627 mr = kzalloc(sizeof(*mr), GFP_KERNEL); 626 mr = kzalloc(sizeof(*mr), GFP_KERNEL);
628 if (!mr) 627 if (!mr)
629 return ERR_PTR(status); 628 return ERR_PTR(status);
630 mr->hwmr.dev = dev;
631 mr->umem = ib_umem_get(ibpd->uobject->context, start, len, acc, 0); 629 mr->umem = ib_umem_get(ibpd->uobject->context, start, len, acc, 0);
632 if (IS_ERR(mr->umem)) { 630 if (IS_ERR(mr->umem)) {
633 status = -EFAULT; 631 status = -EFAULT;
634 goto umem_err; 632 goto umem_err;
635 } 633 }
636 num_pbes = ib_umem_page_count(mr->umem); 634 num_pbes = ib_umem_page_count(mr->umem);
637 status = ocrdma_get_pbl_info(mr, num_pbes); 635 status = ocrdma_get_pbl_info(dev, mr, num_pbes);
638 if (status) 636 if (status)
639 goto umem_err; 637 goto umem_err;
640 638
@@ -670,7 +668,7 @@ umem_err:
670int ocrdma_dereg_mr(struct ib_mr *ib_mr) 668int ocrdma_dereg_mr(struct ib_mr *ib_mr)
671{ 669{
672 struct ocrdma_mr *mr = get_ocrdma_mr(ib_mr); 670 struct ocrdma_mr *mr = get_ocrdma_mr(ib_mr);
673 struct ocrdma_dev *dev = mr->hwmr.dev; 671 struct ocrdma_dev *dev = get_ocrdma_dev(ib_mr->device);
674 int status; 672 int status;
675 673
676 status = ocrdma_mbx_dealloc_lkey(dev, mr->hwmr.fr_mr, mr->hwmr.lkey); 674 status = ocrdma_mbx_dealloc_lkey(dev, mr->hwmr.fr_mr, mr->hwmr.lkey);
@@ -685,7 +683,8 @@ int ocrdma_dereg_mr(struct ib_mr *ib_mr)
685 return status; 683 return status;
686} 684}
687 685
688static int ocrdma_copy_cq_uresp(struct ocrdma_cq *cq, struct ib_udata *udata, 686static int ocrdma_copy_cq_uresp(struct ocrdma_dev *dev, struct ocrdma_cq *cq,
687 struct ib_udata *udata,
689 struct ib_ucontext *ib_ctx) 688 struct ib_ucontext *ib_ctx)
690{ 689{
691 int status; 690 int status;
@@ -698,13 +697,13 @@ static int ocrdma_copy_cq_uresp(struct ocrdma_cq *cq, struct ib_udata *udata,
698 uresp.num_pages = 1; 697 uresp.num_pages = 1;
699 uresp.max_hw_cqe = cq->max_hw_cqe; 698 uresp.max_hw_cqe = cq->max_hw_cqe;
700 uresp.page_addr[0] = cq->pa; 699 uresp.page_addr[0] = cq->pa;
701 uresp.db_page_addr = cq->dev->nic_info.unmapped_db; 700 uresp.db_page_addr = dev->nic_info.unmapped_db;
702 uresp.db_page_size = cq->dev->nic_info.db_page_size; 701 uresp.db_page_size = dev->nic_info.db_page_size;
703 uresp.phase_change = cq->phase_change ? 1 : 0; 702 uresp.phase_change = cq->phase_change ? 1 : 0;
704 status = ib_copy_to_udata(udata, &uresp, sizeof(uresp)); 703 status = ib_copy_to_udata(udata, &uresp, sizeof(uresp));
705 if (status) { 704 if (status) {
706 pr_err("%s(%d) copy error cqid=0x%x.\n", 705 pr_err("%s(%d) copy error cqid=0x%x.\n",
707 __func__, cq->dev->id, cq->id); 706 __func__, dev->id, cq->id);
708 goto err; 707 goto err;
709 } 708 }
710 uctx = get_ocrdma_ucontext(ib_ctx); 709 uctx = get_ocrdma_ucontext(ib_ctx);
@@ -743,7 +742,6 @@ struct ib_cq *ocrdma_create_cq(struct ib_device *ibdev, int entries, int vector,
743 spin_lock_init(&cq->comp_handler_lock); 742 spin_lock_init(&cq->comp_handler_lock);
744 INIT_LIST_HEAD(&cq->sq_head); 743 INIT_LIST_HEAD(&cq->sq_head);
745 INIT_LIST_HEAD(&cq->rq_head); 744 INIT_LIST_HEAD(&cq->rq_head);
746 cq->dev = dev;
747 745
748 status = ocrdma_mbx_create_cq(dev, cq, entries, ureq.dpp_cq); 746 status = ocrdma_mbx_create_cq(dev, cq, entries, ureq.dpp_cq);
749 if (status) { 747 if (status) {
@@ -751,7 +749,7 @@ struct ib_cq *ocrdma_create_cq(struct ib_device *ibdev, int entries, int vector,
751 return ERR_PTR(status); 749 return ERR_PTR(status);
752 } 750 }
753 if (ib_ctx) { 751 if (ib_ctx) {
754 status = ocrdma_copy_cq_uresp(cq, udata, ib_ctx); 752 status = ocrdma_copy_cq_uresp(dev, cq, udata, ib_ctx);
755 if (status) 753 if (status)
756 goto ctx_err; 754 goto ctx_err;
757 } 755 }
@@ -785,7 +783,7 @@ int ocrdma_destroy_cq(struct ib_cq *ibcq)
785{ 783{
786 int status; 784 int status;
787 struct ocrdma_cq *cq = get_ocrdma_cq(ibcq); 785 struct ocrdma_cq *cq = get_ocrdma_cq(ibcq);
788 struct ocrdma_dev *dev = cq->dev; 786 struct ocrdma_dev *dev = get_ocrdma_dev(ibcq->device);
789 787
790 status = ocrdma_mbx_destroy_cq(dev, cq); 788 status = ocrdma_mbx_destroy_cq(dev, cq);
791 789
@@ -1457,7 +1455,8 @@ int ocrdma_destroy_qp(struct ib_qp *ibqp)
1457 return status; 1455 return status;
1458} 1456}
1459 1457
1460static int ocrdma_copy_srq_uresp(struct ocrdma_srq *srq, struct ib_udata *udata) 1458static int ocrdma_copy_srq_uresp(struct ocrdma_dev *dev, struct ocrdma_srq *srq,
1459 struct ib_udata *udata)
1461{ 1460{
1462 int status; 1461 int status;
1463 struct ocrdma_create_srq_uresp uresp; 1462 struct ocrdma_create_srq_uresp uresp;
@@ -1467,11 +1466,11 @@ static int ocrdma_copy_srq_uresp(struct ocrdma_srq *srq, struct ib_udata *udata)
1467 uresp.num_rq_pages = 1; 1466 uresp.num_rq_pages = 1;
1468 uresp.rq_page_addr[0] = srq->rq.pa; 1467 uresp.rq_page_addr[0] = srq->rq.pa;
1469 uresp.rq_page_size = srq->rq.len; 1468 uresp.rq_page_size = srq->rq.len;
1470 uresp.db_page_addr = srq->dev->nic_info.unmapped_db + 1469 uresp.db_page_addr = dev->nic_info.unmapped_db +
1471 (srq->pd->id * srq->dev->nic_info.db_page_size); 1470 (srq->pd->id * dev->nic_info.db_page_size);
1472 uresp.db_page_size = srq->dev->nic_info.db_page_size; 1471 uresp.db_page_size = dev->nic_info.db_page_size;
1473 uresp.num_rqe_allocated = srq->rq.max_cnt; 1472 uresp.num_rqe_allocated = srq->rq.max_cnt;
1474 if (srq->dev->nic_info.dev_family == OCRDMA_GEN2_FAMILY) { 1473 if (dev->nic_info.dev_family == OCRDMA_GEN2_FAMILY) {
1475 uresp.db_rq_offset = OCRDMA_DB_GEN2_RQ1_OFFSET; 1474 uresp.db_rq_offset = OCRDMA_DB_GEN2_RQ1_OFFSET;
1476 uresp.db_shift = 24; 1475 uresp.db_shift = 24;
1477 } else { 1476 } else {
@@ -1508,10 +1507,9 @@ struct ib_srq *ocrdma_create_srq(struct ib_pd *ibpd,
1508 return ERR_PTR(status); 1507 return ERR_PTR(status);
1509 1508
1510 spin_lock_init(&srq->q_lock); 1509 spin_lock_init(&srq->q_lock);
1511 srq->dev = dev;
1512 srq->pd = pd; 1510 srq->pd = pd;
1513 srq->db = dev->nic_info.db + (pd->id * dev->nic_info.db_page_size); 1511 srq->db = dev->nic_info.db + (pd->id * dev->nic_info.db_page_size);
1514 status = ocrdma_mbx_create_srq(srq, init_attr, pd); 1512 status = ocrdma_mbx_create_srq(dev, srq, init_attr, pd);
1515 if (status) 1513 if (status)
1516 goto err; 1514 goto err;
1517 1515
@@ -1538,7 +1536,7 @@ struct ib_srq *ocrdma_create_srq(struct ib_pd *ibpd,
1538 } 1536 }
1539 1537
1540 if (udata) { 1538 if (udata) {
1541 status = ocrdma_copy_srq_uresp(srq, udata); 1539 status = ocrdma_copy_srq_uresp(dev, srq, udata);
1542 if (status) 1540 if (status)
1543 goto arm_err; 1541 goto arm_err;
1544 } 1542 }
@@ -1584,10 +1582,9 @@ int ocrdma_destroy_srq(struct ib_srq *ibsrq)
1584{ 1582{
1585 int status; 1583 int status;
1586 struct ocrdma_srq *srq; 1584 struct ocrdma_srq *srq;
1587 struct ocrdma_dev *dev; 1585 struct ocrdma_dev *dev = get_ocrdma_dev(ibsrq->device);
1588 1586
1589 srq = get_ocrdma_srq(ibsrq); 1587 srq = get_ocrdma_srq(ibsrq);
1590 dev = srq->dev;
1591 1588
1592 status = ocrdma_mbx_destroy_srq(dev, srq); 1589 status = ocrdma_mbx_destroy_srq(dev, srq);
1593 1590
@@ -2354,7 +2351,7 @@ static int ocrdma_poll_hwcq(struct ocrdma_cq *cq, int num_entries,
2354 bool expand = false; 2351 bool expand = false;
2355 int polled_hw_cqes = 0; 2352 int polled_hw_cqes = 0;
2356 struct ocrdma_qp *qp = NULL; 2353 struct ocrdma_qp *qp = NULL;
2357 struct ocrdma_dev *dev = cq->dev; 2354 struct ocrdma_dev *dev = get_ocrdma_dev(cq->ibcq.device);
2358 struct ocrdma_cqe *cqe; 2355 struct ocrdma_cqe *cqe;
2359 u16 cur_getp; bool polled = false; bool stop = false; 2356 u16 cur_getp; bool polled = false; bool stop = false;
2360 2357
@@ -2435,14 +2432,11 @@ static int ocrdma_add_err_cqe(struct ocrdma_cq *cq, int num_entries,
2435int ocrdma_poll_cq(struct ib_cq *ibcq, int num_entries, struct ib_wc *wc) 2432int ocrdma_poll_cq(struct ib_cq *ibcq, int num_entries, struct ib_wc *wc)
2436{ 2433{
2437 int cqes_to_poll = num_entries; 2434 int cqes_to_poll = num_entries;
2438 struct ocrdma_cq *cq = NULL; 2435 struct ocrdma_cq *cq = get_ocrdma_cq(ibcq);
2439 unsigned long flags; 2436 struct ocrdma_dev *dev = get_ocrdma_dev(ibcq->device);
2440 struct ocrdma_dev *dev;
2441 int num_os_cqe = 0, err_cqes = 0; 2437 int num_os_cqe = 0, err_cqes = 0;
2442 struct ocrdma_qp *qp; 2438 struct ocrdma_qp *qp;
2443 2439 unsigned long flags;
2444 cq = get_ocrdma_cq(ibcq);
2445 dev = cq->dev;
2446 2440
2447 /* poll cqes from adapter CQ */ 2441 /* poll cqes from adapter CQ */
2448 spin_lock_irqsave(&cq->cq_lock, flags); 2442 spin_lock_irqsave(&cq->cq_lock, flags);
@@ -2473,16 +2467,14 @@ int ocrdma_poll_cq(struct ib_cq *ibcq, int num_entries, struct ib_wc *wc)
2473 2467
2474int ocrdma_arm_cq(struct ib_cq *ibcq, enum ib_cq_notify_flags cq_flags) 2468int ocrdma_arm_cq(struct ib_cq *ibcq, enum ib_cq_notify_flags cq_flags)
2475{ 2469{
2476 struct ocrdma_cq *cq; 2470 struct ocrdma_cq *cq = get_ocrdma_cq(ibcq);
2477 unsigned long flags; 2471 struct ocrdma_dev *dev = get_ocrdma_dev(ibcq->device);
2478 struct ocrdma_dev *dev;
2479 u16 cq_id; 2472 u16 cq_id;
2480 u16 cur_getp; 2473 u16 cur_getp;
2481 struct ocrdma_cqe *cqe; 2474 struct ocrdma_cqe *cqe;
2475 unsigned long flags;
2482 2476
2483 cq = get_ocrdma_cq(ibcq);
2484 cq_id = cq->id; 2477 cq_id = cq->id;
2485 dev = cq->dev;
2486 2478
2487 spin_lock_irqsave(&cq->cq_lock, flags); 2479 spin_lock_irqsave(&cq->cq_lock, flags);
2488 if (cq_flags & IB_CQ_NEXT_COMP || cq_flags & IB_CQ_SOLICITED) 2480 if (cq_flags & IB_CQ_NEXT_COMP || cq_flags & IB_CQ_SOLICITED)