Lines Matching refs:mr

56 static int clean_mr(struct mlx5_ib_mr *mr);
58 static int destroy_mkey(struct mlx5_ib_dev *dev, struct mlx5_ib_mr *mr) in destroy_mkey() argument
60 int err = mlx5_core_destroy_mkey(dev->mdev, &mr->mmr); in destroy_mkey()
82 struct mlx5_ib_mr *mr = context; in reg_mr_callback() local
83 struct mlx5_ib_dev *dev = mr->dev; in reg_mr_callback()
85 int c = order2idx(dev, mr->order); in reg_mr_callback()
97 kfree(mr); in reg_mr_callback()
103 if (mr->out.hdr.status) { in reg_mr_callback()
105 mr->out.hdr.status, in reg_mr_callback()
106 be32_to_cpu(mr->out.hdr.syndrome)); in reg_mr_callback()
107 kfree(mr); in reg_mr_callback()
116 mr->mmr.key = mlx5_idx_to_mkey(be32_to_cpu(mr->out.mkey) & 0xffffff) | key; in reg_mr_callback()
121 list_add_tail(&mr->list, &ent->head); in reg_mr_callback()
127 err = radix_tree_insert(&table->tree, mlx5_base_mkey(mr->mmr.key), in reg_mr_callback()
128 &mr->mmr); in reg_mr_callback()
139 struct mlx5_ib_mr *mr; in add_keys() local
154 mr = kzalloc(sizeof(*mr), GFP_KERNEL); in add_keys()
155 if (!mr) { in add_keys()
159 mr->order = ent->order; in add_keys()
160 mr->umred = 1; in add_keys()
161 mr->dev = dev; in add_keys()
171 err = mlx5_core_create_mkey(dev->mdev, &mr->mmr, in, in add_keys()
173 mr, &mr->out); in add_keys()
179 kfree(mr); in add_keys()
192 struct mlx5_ib_mr *mr; in remove_keys() local
202 mr = list_first_entry(&ent->head, struct mlx5_ib_mr, list); in remove_keys()
203 list_del(&mr->list); in remove_keys()
207 err = destroy_mkey(dev, mr); in remove_keys()
211 kfree(mr); in remove_keys()
414 struct mlx5_ib_mr *mr = NULL; in alloc_cached_mr() local
432 mr = list_first_entry(&ent->head, struct mlx5_ib_mr, in alloc_cached_mr()
434 list_del(&mr->list); in alloc_cached_mr()
445 if (mr) in alloc_cached_mr()
449 if (!mr) in alloc_cached_mr()
452 return mr; in alloc_cached_mr()
455 static void free_cached_mr(struct mlx5_ib_dev *dev, struct mlx5_ib_mr *mr) in free_cached_mr() argument
462 c = order2idx(dev, mr->order); in free_cached_mr()
464 mlx5_ib_warn(dev, "order %d, cache index %d\n", mr->order, c); in free_cached_mr()
469 list_add_tail(&mr->list, &ent->head); in free_cached_mr()
483 struct mlx5_ib_mr *mr; in clean_keys() local
493 mr = list_first_entry(&ent->head, struct mlx5_ib_mr, list); in clean_keys()
494 list_del(&mr->list); in clean_keys()
498 err = destroy_mkey(dev, mr); in clean_keys()
502 kfree(mr); in clean_keys()
632 struct mlx5_ib_mr *mr; in mlx5_ib_get_dma_mr() local
635 mr = kzalloc(sizeof(*mr), GFP_KERNEL); in mlx5_ib_get_dma_mr()
636 if (!mr) in mlx5_ib_get_dma_mr()
651 err = mlx5_core_create_mkey(mdev, &mr->mmr, in, sizeof(*in), NULL, NULL, in mlx5_ib_get_dma_mr()
657 mr->ibmr.lkey = mr->mmr.key; in mlx5_ib_get_dma_mr()
658 mr->ibmr.rkey = mr->mmr.key; in mlx5_ib_get_dma_mr()
659 mr->umem = NULL; in mlx5_ib_get_dma_mr()
661 return &mr->ibmr; in mlx5_ib_get_dma_mr()
667 kfree(mr); in mlx5_ib_get_dma_mr()
693 struct ib_mr *mr = dev->umrc.mr; in prep_umr_reg_wqe() local
698 sg->lkey = mr->lkey; in prep_umr_reg_wqe()
760 struct mlx5_ib_mr *mr; in reg_umr() local
770 mr = alloc_cached_mr(dev, order); in reg_umr()
771 if (mr) in reg_umr()
781 if (!mr) in reg_umr()
807 prep_umr_reg_wqe(pd, &wr, &sg, dma, npages, mr->mmr.key, page_shift, in reg_umr()
824 mr->mmr.iova = virt_addr; in reg_umr()
825 mr->mmr.size = len; in reg_umr()
826 mr->mmr.pd = to_mpd(pd)->pdn; in reg_umr()
828 mr->live = 1; in reg_umr()
839 free_cached_mr(dev, mr); in reg_umr()
843 return mr; in reg_umr()
847 int mlx5_ib_update_mtt(struct mlx5_ib_mr *mr, u64 start_page_index, int npages, in mlx5_ib_update_mtt() argument
850 struct mlx5_ib_dev *dev = mr->dev; in mlx5_ib_update_mtt()
854 struct ib_umem *umem = mr->umem; in mlx5_ib_update_mtt()
929 sg.lkey = dev->umrc.mr->lkey; in mlx5_ib_update_mtt()
938 umrwr->mkey = mr->mmr.key; in mlx5_ib_update_mtt()
975 struct mlx5_ib_mr *mr; in reg_create() local
981 mr = kzalloc(sizeof(*mr), GFP_KERNEL); in reg_create()
982 if (!mr) in reg_create()
1008 err = mlx5_core_create_mkey(dev->mdev, &mr->mmr, in, inlen, NULL, in reg_create()
1014 mr->umem = umem; in reg_create()
1015 mr->dev = dev; in reg_create()
1016 mr->live = 1; in reg_create()
1019 mlx5_ib_dbg(dev, "mkey = 0x%x\n", mr->mmr.key); in reg_create()
1021 return mr; in reg_create()
1027 kfree(mr); in reg_create()
1037 struct mlx5_ib_mr *mr = NULL; in mlx5_ib_reg_user_mr() local
1065 mr = reg_umr(pd, umem, virt_addr, length, ncont, page_shift, in mlx5_ib_reg_user_mr()
1067 if (PTR_ERR(mr) == -EAGAIN) { in mlx5_ib_reg_user_mr()
1069 mr = NULL; in mlx5_ib_reg_user_mr()
1077 if (!mr) in mlx5_ib_reg_user_mr()
1078 mr = reg_create(pd, virt_addr, length, umem, ncont, page_shift, in mlx5_ib_reg_user_mr()
1081 if (IS_ERR(mr)) { in mlx5_ib_reg_user_mr()
1082 err = PTR_ERR(mr); in mlx5_ib_reg_user_mr()
1086 mlx5_ib_dbg(dev, "mkey 0x%x\n", mr->mmr.key); in mlx5_ib_reg_user_mr()
1088 mr->umem = umem; in mlx5_ib_reg_user_mr()
1089 mr->npages = npages; in mlx5_ib_reg_user_mr()
1091 mr->ibmr.lkey = mr->mmr.key; in mlx5_ib_reg_user_mr()
1092 mr->ibmr.rkey = mr->mmr.key; in mlx5_ib_reg_user_mr()
1104 mr->umem->odp_data->private = mr; in mlx5_ib_reg_user_mr()
1119 return &mr->ibmr; in mlx5_ib_reg_user_mr()
1126 static int unreg_umr(struct mlx5_ib_dev *dev, struct mlx5_ib_mr *mr) in unreg_umr() argument
1135 prep_umr_unreg_wqe(dev, &wr, mr->mmr.key); in unreg_umr()
1159 static int clean_mr(struct mlx5_ib_mr *mr) in clean_mr() argument
1161 struct mlx5_ib_dev *dev = to_mdev(mr->ibmr.device); in clean_mr()
1162 int umred = mr->umred; in clean_mr()
1166 err = destroy_mkey(dev, mr); in clean_mr()
1169 mr->mmr.key, err); in clean_mr()
1173 err = unreg_umr(dev, mr); in clean_mr()
1178 free_cached_mr(dev, mr); in clean_mr()
1182 kfree(mr); in clean_mr()
1190 struct mlx5_ib_mr *mr = to_mmr(ibmr); in mlx5_ib_dereg_mr() local
1191 int npages = mr->npages; in mlx5_ib_dereg_mr()
1192 struct ib_umem *umem = mr->umem; in mlx5_ib_dereg_mr()
1197 mr->live = 0; in mlx5_ib_dereg_mr()
1216 clean_mr(mr); in mlx5_ib_dereg_mr()
1231 struct mlx5_ib_mr *mr; in mlx5_ib_create_mr() local
1235 mr = kzalloc(sizeof(*mr), GFP_KERNEL); in mlx5_ib_create_mr()
1236 if (!mr) in mlx5_ib_create_mr()
1257 mr->sig = kzalloc(sizeof(*mr->sig), GFP_KERNEL); in mlx5_ib_create_mr()
1258 if (!mr->sig) { in mlx5_ib_create_mr()
1270 mr->sig->psv_memory.psv_idx = psv_index[0]; in mlx5_ib_create_mr()
1271 mr->sig->psv_wire.psv_idx = psv_index[1]; in mlx5_ib_create_mr()
1273 mr->sig->sig_status_checked = true; in mlx5_ib_create_mr()
1274 mr->sig->sig_err_exists = false; in mlx5_ib_create_mr()
1276 ++mr->sig->sigerr_count; in mlx5_ib_create_mr()
1280 err = mlx5_core_create_mkey(dev->mdev, &mr->mmr, in, sizeof(*in), in mlx5_ib_create_mr()
1285 mr->ibmr.lkey = mr->mmr.key; in mlx5_ib_create_mr()
1286 mr->ibmr.rkey = mr->mmr.key; in mlx5_ib_create_mr()
1287 mr->umem = NULL; in mlx5_ib_create_mr()
1290 return &mr->ibmr; in mlx5_ib_create_mr()
1293 if (mr->sig) { in mlx5_ib_create_mr()
1295 mr->sig->psv_memory.psv_idx)) in mlx5_ib_create_mr()
1297 mr->sig->psv_memory.psv_idx); in mlx5_ib_create_mr()
1299 mr->sig->psv_wire.psv_idx)) in mlx5_ib_create_mr()
1301 mr->sig->psv_wire.psv_idx); in mlx5_ib_create_mr()
1304 kfree(mr->sig); in mlx5_ib_create_mr()
1308 kfree(mr); in mlx5_ib_create_mr()
1315 struct mlx5_ib_mr *mr = to_mmr(ibmr); in mlx5_ib_destroy_mr() local
1318 if (mr->sig) { in mlx5_ib_destroy_mr()
1320 mr->sig->psv_memory.psv_idx)) in mlx5_ib_destroy_mr()
1322 mr->sig->psv_memory.psv_idx); in mlx5_ib_destroy_mr()
1324 mr->sig->psv_wire.psv_idx)) in mlx5_ib_destroy_mr()
1326 mr->sig->psv_wire.psv_idx); in mlx5_ib_destroy_mr()
1327 kfree(mr->sig); in mlx5_ib_destroy_mr()
1330 err = destroy_mkey(dev, mr); in mlx5_ib_destroy_mr()
1333 mr->mmr.key, err); in mlx5_ib_destroy_mr()
1337 kfree(mr); in mlx5_ib_destroy_mr()
1347 struct mlx5_ib_mr *mr; in mlx5_ib_alloc_fast_reg_mr() local
1350 mr = kzalloc(sizeof(*mr), GFP_KERNEL); in mlx5_ib_alloc_fast_reg_mr()
1351 if (!mr) in mlx5_ib_alloc_fast_reg_mr()
1369 err = mlx5_core_create_mkey(dev->mdev, &mr->mmr, in, sizeof(*in), NULL, in mlx5_ib_alloc_fast_reg_mr()
1375 mr->ibmr.lkey = mr->mmr.key; in mlx5_ib_alloc_fast_reg_mr()
1376 mr->ibmr.rkey = mr->mmr.key; in mlx5_ib_alloc_fast_reg_mr()
1377 mr->umem = NULL; in mlx5_ib_alloc_fast_reg_mr()
1379 return &mr->ibmr; in mlx5_ib_alloc_fast_reg_mr()
1382 kfree(mr); in mlx5_ib_alloc_fast_reg_mr()