diff options
author | Naresh Gottumukkala <bgottumukkala@emulex.com> | 2013-08-07 03:22:33 -0400 |
---|---|---|
committer | Roland Dreier <roland@purestorage.com> | 2013-08-12 13:58:38 -0400 |
commit | 1afc0454b6658ad2d0a87e594e1f06dc19c6977d (patch) | |
tree | 5d57e75ef9a5ba3b42bdc3d68914a5de92793208 /drivers/infiniband/hw/ocrdma | |
parent | f99b1649dbb6342d618307faef1f214fd54928b9 (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.h | 5 | ||||
-rw-r--r-- | drivers/infiniband/hw/ocrdma/ocrdma_ah.c | 10 | ||||
-rw-r--r-- | drivers/infiniband/hw/ocrdma/ocrdma_hw.c | 26 | ||||
-rw-r--r-- | drivers/infiniband/hw/ocrdma/ocrdma_hw.h | 3 | ||||
-rw-r--r-- | drivers/infiniband/hw/ocrdma/ocrdma_verbs.c | 76 |
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 | ||
173 | struct ocrdma_cq { | 173 | struct 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 | ||
215 | struct ocrdma_ah { | 214 | struct 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 | ||
235 | struct ocrdma_srq { | 233 | struct 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 | ||
295 | struct ocrdma_hw_mr { | 292 | struct 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 | ||
322 | struct ocrdma_ucontext { | 318 | struct 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 | ||
38 | static inline int set_av_attr(struct ocrdma_ah *ah, | 38 | static 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: | |||
126 | int ocrdma_destroy_ah(struct ib_ah *ibah) | 124 | int 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 | ||
2329 | int ocrdma_mbx_create_srq(struct ocrdma_srq *srq, | 2334 | int 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 *, | |||
112 | int ocrdma_mbx_query_qp(struct ocrdma_dev *, struct ocrdma_qp *, | 112 | int ocrdma_mbx_query_qp(struct ocrdma_dev *, struct ocrdma_qp *, |
113 | struct ocrdma_qp_params *param); | 113 | struct ocrdma_qp_params *param); |
114 | int ocrdma_mbx_destroy_qp(struct ocrdma_dev *, struct ocrdma_qp *); | 114 | int ocrdma_mbx_destroy_qp(struct ocrdma_dev *, struct ocrdma_qp *); |
115 | 115 | int ocrdma_mbx_create_srq(struct ocrdma_dev *, struct ocrdma_srq *, | |
116 | int 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 *); |
119 | int ocrdma_mbx_modify_srq(struct ocrdma_srq *, struct ib_srq_attr *); | 118 | int 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) | |||
291 | int ocrdma_mmap(struct ib_ucontext *context, struct vm_area_struct *vma) | 291 | int 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 | ||
435 | static int ocrdma_alloc_lkey(struct ocrdma_mr *mr, u32 pdid, int acc, | 435 | static 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 | ||
506 | static int ocrdma_get_pbl_info(struct ocrdma_mr *mr, u32 num_pbes) | 504 | static 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: | |||
670 | int ocrdma_dereg_mr(struct ib_mr *ib_mr) | 668 | int 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 | ||
688 | static int ocrdma_copy_cq_uresp(struct ocrdma_cq *cq, struct ib_udata *udata, | 686 | static 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 | ||
1460 | static int ocrdma_copy_srq_uresp(struct ocrdma_srq *srq, struct ib_udata *udata) | 1458 | static 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, | |||
2435 | int ocrdma_poll_cq(struct ib_cq *ibcq, int num_entries, struct ib_wc *wc) | 2432 | int 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 | ||
2474 | int ocrdma_arm_cq(struct ib_cq *ibcq, enum ib_cq_notify_flags cq_flags) | 2468 | int 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) |