Lines Matching refs:uctx

191 static int ocrdma_add_mmap(struct ocrdma_ucontext *uctx, u64 phy_addr,  in ocrdma_add_mmap()  argument
203 mutex_lock(&uctx->mm_list_lock); in ocrdma_add_mmap()
204 list_add_tail(&mm->entry, &uctx->mm_head); in ocrdma_add_mmap()
205 mutex_unlock(&uctx->mm_list_lock); in ocrdma_add_mmap()
209 static void ocrdma_del_mmap(struct ocrdma_ucontext *uctx, u64 phy_addr, in ocrdma_del_mmap() argument
214 mutex_lock(&uctx->mm_list_lock); in ocrdma_del_mmap()
215 list_for_each_entry_safe(mm, tmp, &uctx->mm_head, entry) { in ocrdma_del_mmap()
223 mutex_unlock(&uctx->mm_list_lock); in ocrdma_del_mmap()
226 static bool ocrdma_search_mmap(struct ocrdma_ucontext *uctx, u64 phy_addr, in ocrdma_search_mmap() argument
232 mutex_lock(&uctx->mm_list_lock); in ocrdma_search_mmap()
233 list_for_each_entry(mm, &uctx->mm_head, entry) { in ocrdma_search_mmap()
240 mutex_unlock(&uctx->mm_list_lock); in ocrdma_search_mmap()
356 struct ocrdma_ucontext *uctx, in _ocrdma_alloc_pd() argument
361 if (udata && uctx && dev->attr.max_dpp_pds) { in _ocrdma_alloc_pd()
386 static inline int is_ucontext_pd(struct ocrdma_ucontext *uctx, in is_ucontext_pd() argument
389 return (uctx->cntxt_pd == pd); in is_ucontext_pd()
402 struct ocrdma_ucontext *uctx, in ocrdma_alloc_ucontext_pd() argument
414 uctx->cntxt_pd = get_ocrdma_pd(pd); in ocrdma_alloc_ucontext_pd()
416 status = _ocrdma_alloc_pd(dev, uctx->cntxt_pd, uctx, udata); in ocrdma_alloc_ucontext_pd()
418 kfree(uctx->cntxt_pd); in ocrdma_alloc_ucontext_pd()
422 uctx->cntxt_pd->uctx = uctx; in ocrdma_alloc_ucontext_pd()
423 uctx->cntxt_pd->ibpd.device = &dev->ibdev; in ocrdma_alloc_ucontext_pd()
428 static void ocrdma_dealloc_ucontext_pd(struct ocrdma_ucontext *uctx) in ocrdma_dealloc_ucontext_pd() argument
430 struct ocrdma_pd *pd = uctx->cntxt_pd; in ocrdma_dealloc_ucontext_pd()
433 if (uctx->pd_in_use) { in ocrdma_dealloc_ucontext_pd()
437 uctx->cntxt_pd = NULL; in ocrdma_dealloc_ucontext_pd()
442 static struct ocrdma_pd *ocrdma_get_ucontext_pd(struct ocrdma_ucontext *uctx) in ocrdma_get_ucontext_pd() argument
446 mutex_lock(&uctx->mm_list_lock); in ocrdma_get_ucontext_pd()
447 if (!uctx->pd_in_use) { in ocrdma_get_ucontext_pd()
448 uctx->pd_in_use = true; in ocrdma_get_ucontext_pd()
449 pd = uctx->cntxt_pd; in ocrdma_get_ucontext_pd()
451 mutex_unlock(&uctx->mm_list_lock); in ocrdma_get_ucontext_pd()
456 static void ocrdma_release_ucontext_pd(struct ocrdma_ucontext *uctx) in ocrdma_release_ucontext_pd() argument
458 mutex_lock(&uctx->mm_list_lock); in ocrdma_release_ucontext_pd()
459 uctx->pd_in_use = false; in ocrdma_release_ucontext_pd()
460 mutex_unlock(&uctx->mm_list_lock); in ocrdma_release_ucontext_pd()
463 int ocrdma_alloc_ucontext(struct ib_ucontext *uctx, struct ib_udata *udata) in ocrdma_alloc_ucontext() argument
465 struct ib_device *ibdev = uctx->device; in ocrdma_alloc_ucontext()
467 struct ocrdma_ucontext *ctx = get_ocrdma_ucontext(uctx); in ocrdma_alloc_ucontext()
521 struct ocrdma_ucontext *uctx = get_ocrdma_ucontext(ibctx); in ocrdma_dealloc_ucontext() local
525 ocrdma_dealloc_ucontext_pd(uctx); in ocrdma_dealloc_ucontext()
527 ocrdma_del_mmap(uctx, uctx->ah_tbl.pa, uctx->ah_tbl.len); in ocrdma_dealloc_ucontext()
528 dma_free_coherent(&pdev->dev, uctx->ah_tbl.len, uctx->ah_tbl.va, in ocrdma_dealloc_ucontext()
529 uctx->ah_tbl.pa); in ocrdma_dealloc_ucontext()
531 list_for_each_entry_safe(mm, tmp, &uctx->mm_head, entry) { in ocrdma_dealloc_ucontext()
588 struct ocrdma_ucontext *uctx = rdma_udata_to_drv_context( in ocrdma_copy_pd_uresp() local
597 status = ocrdma_add_mmap(uctx, db_page_addr, db_page_size); in ocrdma_copy_pd_uresp()
604 status = ocrdma_add_mmap(uctx, dpp_page_addr, in ocrdma_copy_pd_uresp()
616 pd->uctx = uctx; in ocrdma_copy_pd_uresp()
621 ocrdma_del_mmap(pd->uctx, dpp_page_addr, PAGE_SIZE); in ocrdma_copy_pd_uresp()
623 ocrdma_del_mmap(pd->uctx, db_page_addr, db_page_size); in ocrdma_copy_pd_uresp()
634 struct ocrdma_ucontext *uctx = rdma_udata_to_drv_context( in ocrdma_alloc_pd() local
638 pd = ocrdma_get_ucontext_pd(uctx); in ocrdma_alloc_pd()
646 status = _ocrdma_alloc_pd(dev, pd, uctx, udata); in ocrdma_alloc_pd()
660 ocrdma_release_ucontext_pd(uctx); in ocrdma_alloc_pd()
671 struct ocrdma_ucontext *uctx = NULL; in ocrdma_dealloc_pd() local
674 uctx = pd->uctx; in ocrdma_dealloc_pd()
675 if (uctx) { in ocrdma_dealloc_pd()
679 ocrdma_del_mmap(pd->uctx, dpp_db, PAGE_SIZE); in ocrdma_dealloc_pd()
681 ocrdma_del_mmap(pd->uctx, usr_db, dev->nic_info.db_page_size); in ocrdma_dealloc_pd()
683 if (is_ucontext_pd(uctx, pd)) { in ocrdma_dealloc_pd()
684 ocrdma_release_ucontext_pd(uctx); in ocrdma_dealloc_pd()
927 struct ocrdma_ucontext *uctx = rdma_udata_to_drv_context( in ocrdma_copy_cq_uresp() local
941 uresp.db_page_addr = ocrdma_get_db_addr(dev, uctx->cntxt_pd->id); in ocrdma_copy_cq_uresp()
950 status = ocrdma_add_mmap(uctx, uresp.db_page_addr, uresp.db_page_size); in ocrdma_copy_cq_uresp()
953 status = ocrdma_add_mmap(uctx, uresp.page_addr[0], uresp.page_size); in ocrdma_copy_cq_uresp()
955 ocrdma_del_mmap(uctx, uresp.db_page_addr, uresp.db_page_size); in ocrdma_copy_cq_uresp()
958 cq->ucontext = uctx; in ocrdma_copy_cq_uresp()
970 struct ocrdma_ucontext *uctx = rdma_udata_to_drv_context( in ocrdma_create_cq() local
991 pd_id = uctx->cntxt_pd->id; in ocrdma_create_cq()
1210 status = ocrdma_add_mmap(pd->uctx, uresp.sq_page_addr[0], in ocrdma_copy_qp_uresp()
1216 status = ocrdma_add_mmap(pd->uctx, uresp.rq_page_addr[0], in ocrdma_copy_qp_uresp()
1223 ocrdma_del_mmap(pd->uctx, uresp.sq_page_addr[0], uresp.sq_page_size); in ocrdma_copy_qp_uresp()
1710 if (!pd->uctx) { in ocrdma_destroy_qp()
1716 if (pd->uctx) { in ocrdma_destroy_qp()
1717 ocrdma_del_mmap(pd->uctx, (u64) qp->sq.pa, in ocrdma_destroy_qp()
1720 ocrdma_del_mmap(pd->uctx, (u64) qp->rq.pa, in ocrdma_destroy_qp()
1757 status = ocrdma_add_mmap(srq->pd->uctx, uresp.rq_page_addr[0], in ocrdma_copy_srq_uresp()
1864 if (srq->pd->uctx) in ocrdma_destroy_srq()
1865 ocrdma_del_mmap(srq->pd->uctx, (u64) srq->rq.pa, in ocrdma_destroy_srq()