Lines Matching refs:e_fmr
773 struct ehca_mr *e_fmr; in ehca_alloc_fmr() local
816 e_fmr = ehca_mr_new(); in ehca_alloc_fmr()
817 if (!e_fmr) { in ehca_alloc_fmr()
821 e_fmr->flags |= EHCA_MR_FLAG_FMR; in ehca_alloc_fmr()
830 ret = ehca_reg_mr(shca, e_fmr, NULL, in ehca_alloc_fmr()
840 e_fmr->hwpage_size = hw_pgsize; in ehca_alloc_fmr()
841 e_fmr->fmr_page_size = 1 << fmr_attr->page_shift; in ehca_alloc_fmr()
842 e_fmr->fmr_max_pages = fmr_attr->max_pages; in ehca_alloc_fmr()
843 e_fmr->fmr_max_maps = fmr_attr->max_maps; in ehca_alloc_fmr()
844 e_fmr->fmr_map_cnt = 0; in ehca_alloc_fmr()
845 return &e_fmr->ib.ib_fmr; in ehca_alloc_fmr()
848 ehca_mr_delete(e_fmr); in ehca_alloc_fmr()
863 struct ehca_mr *e_fmr = container_of(fmr, struct ehca_mr, ib.ib_fmr); in ehca_map_phys_fmr() local
868 if (!(e_fmr->flags & EHCA_MR_FLAG_FMR)) { in ehca_map_phys_fmr()
870 e_fmr, e_fmr->flags); in ehca_map_phys_fmr()
874 ret = ehca_fmr_check_page_list(e_fmr, page_list, list_len); in ehca_map_phys_fmr()
877 if (iova % e_fmr->fmr_page_size) { in ehca_map_phys_fmr()
880 iova, e_fmr->fmr_page_size); in ehca_map_phys_fmr()
884 if (e_fmr->fmr_map_cnt >= e_fmr->fmr_max_maps) { in ehca_map_phys_fmr()
888 fmr, e_fmr->fmr_map_cnt, e_fmr->fmr_max_maps); in ehca_map_phys_fmr()
894 pginfo.hwpage_size = e_fmr->hwpage_size; in ehca_map_phys_fmr()
896 list_len * e_fmr->fmr_page_size / pginfo.hwpage_size; in ehca_map_phys_fmr()
899 (iova & (e_fmr->fmr_page_size-1)) / pginfo.hwpage_size; in ehca_map_phys_fmr()
900 pginfo.u.fmr.fmr_pgsize = e_fmr->fmr_page_size; in ehca_map_phys_fmr()
902 ret = ehca_rereg_mr(shca, e_fmr, (u64 *)iova, in ehca_map_phys_fmr()
903 list_len * e_fmr->fmr_page_size, in ehca_map_phys_fmr()
904 e_fmr->acl, e_pd, &pginfo, &tmp_lkey, &tmp_rkey); in ehca_map_phys_fmr()
909 e_fmr->fmr_map_cnt++; in ehca_map_phys_fmr()
910 e_fmr->ib.ib_fmr.lkey = tmp_lkey; in ehca_map_phys_fmr()
911 e_fmr->ib.ib_fmr.rkey = tmp_rkey; in ehca_map_phys_fmr()
929 struct ehca_mr *e_fmr; in ehca_unmap_fmr() local
938 e_fmr = container_of(ib_fmr, struct ehca_mr, ib.ib_fmr); in ehca_unmap_fmr()
942 shca, prev_shca, e_fmr); in ehca_unmap_fmr()
946 if (!(e_fmr->flags & EHCA_MR_FLAG_FMR)) { in ehca_unmap_fmr()
948 "e_fmr->flags=%x", e_fmr, e_fmr->flags); in ehca_unmap_fmr()
958 e_fmr = container_of(ib_fmr, struct ehca_mr, ib.ib_fmr); in ehca_unmap_fmr()
961 ret = ehca_unmap_one_fmr(shca, e_fmr); in ehca_unmap_fmr()
966 "unmap_fmr_cnt=%x lkey=%x", e_fmr, num_fmr, in ehca_unmap_fmr()
967 unmap_fmr_cnt, e_fmr->ib.ib_fmr.lkey); in ehca_unmap_fmr()
987 struct ehca_mr *e_fmr = container_of(fmr, struct ehca_mr, ib.ib_fmr); in ehca_dealloc_fmr() local
989 if (!(e_fmr->flags & EHCA_MR_FLAG_FMR)) { in ehca_dealloc_fmr()
991 e_fmr, e_fmr->flags); in ehca_dealloc_fmr()
996 h_ret = hipz_h_free_resource_mr(shca->ipz_hca_handle, e_fmr); in ehca_dealloc_fmr()
1000 h_ret, e_fmr, shca->ipz_hca_handle.handle, in ehca_dealloc_fmr()
1001 e_fmr->ipz_mr_handle.handle, fmr->lkey); in ehca_dealloc_fmr()
1006 ehca_mr_delete(e_fmr); in ehca_dealloc_fmr()
1384 struct ehca_mr *e_fmr) in ehca_unmap_one_fmr() argument
1389 container_of(e_fmr->ib.ib_fmr.pd, struct ehca_pd, ib_pd); in ehca_unmap_one_fmr()
1396 if (e_fmr->fmr_max_pages <= MAX_RPAGES) { in ehca_unmap_one_fmr()
1401 h_ret = hipz_h_reregister_pmr(shca->ipz_hca_handle, e_fmr, 0, in ehca_unmap_one_fmr()
1405 e_fmr->start = NULL; in ehca_unmap_one_fmr()
1406 e_fmr->size = 0; in ehca_unmap_one_fmr()
1418 h_ret, e_fmr, shca->ipz_hca_handle.handle, in ehca_unmap_one_fmr()
1419 e_fmr->ipz_mr_handle.handle, in ehca_unmap_one_fmr()
1420 e_fmr->ib.ib_fmr.lkey, hipzout.lkey); in ehca_unmap_one_fmr()
1425 h_ret = hipz_h_free_resource_mr(shca->ipz_hca_handle, e_fmr); in ehca_unmap_one_fmr()
1430 h_ret, e_fmr, shca->ipz_hca_handle.handle, in ehca_unmap_one_fmr()
1431 e_fmr->ipz_mr_handle.handle, in ehca_unmap_one_fmr()
1432 e_fmr->ib.ib_fmr.lkey); in ehca_unmap_one_fmr()
1437 save_fmr = *e_fmr; in ehca_unmap_one_fmr()
1438 ehca_mr_deletenew(e_fmr); in ehca_unmap_one_fmr()
1441 e_fmr->flags = save_fmr.flags; in ehca_unmap_one_fmr()
1442 e_fmr->hwpage_size = save_fmr.hwpage_size; in ehca_unmap_one_fmr()
1443 e_fmr->fmr_page_size = save_fmr.fmr_page_size; in ehca_unmap_one_fmr()
1444 e_fmr->fmr_max_pages = save_fmr.fmr_max_pages; in ehca_unmap_one_fmr()
1445 e_fmr->fmr_max_maps = save_fmr.fmr_max_maps; in ehca_unmap_one_fmr()
1446 e_fmr->fmr_map_cnt = save_fmr.fmr_map_cnt; in ehca_unmap_one_fmr()
1447 e_fmr->acl = save_fmr.acl; in ehca_unmap_one_fmr()
1451 ret = ehca_reg_mr(shca, e_fmr, NULL, in ehca_unmap_one_fmr()
1452 (e_fmr->fmr_max_pages * e_fmr->fmr_page_size), in ehca_unmap_one_fmr()
1453 e_fmr->acl, e_pd, &pginfo, &tmp_lkey, in ehca_unmap_one_fmr()
1456 u32 offset = (u64)(&e_fmr->flags) - (u64)e_fmr; in ehca_unmap_one_fmr()
1457 memcpy(&e_fmr->flags, &(save_mr.flags), in ehca_unmap_one_fmr()
1465 ret, tmp_lkey, tmp_rkey, e_fmr->fmr_max_pages); in ehca_unmap_one_fmr()
1821 int ehca_fmr_check_page_list(struct ehca_mr *e_fmr, in ehca_fmr_check_page_list() argument
1828 if ((list_len == 0) || (list_len > e_fmr->fmr_max_pages)) { in ehca_fmr_check_page_list()
1831 list_len, e_fmr->fmr_max_pages, e_fmr); in ehca_fmr_check_page_list()
1838 if (*page % e_fmr->fmr_page_size) { in ehca_fmr_check_page_list()
1840 "fmr_page_size=%x", i, *page, page, e_fmr, in ehca_fmr_check_page_list()
1841 e_fmr->fmr_page_size); in ehca_fmr_check_page_list()