odp               765 drivers/infiniband/hw/mlx5/mr.c 		struct ib_umem_odp *odp;
odp               767 drivers/infiniband/hw/mlx5/mr.c 		odp = ib_umem_odp_get(udata, start, length, access_flags);
odp               768 drivers/infiniband/hw/mlx5/mr.c 		if (IS_ERR(odp)) {
odp               770 drivers/infiniband/hw/mlx5/mr.c 				    PTR_ERR(odp));
odp               771 drivers/infiniband/hw/mlx5/mr.c 			return PTR_ERR(odp);
odp               774 drivers/infiniband/hw/mlx5/mr.c 		u = &odp->umem;
odp               776 drivers/infiniband/hw/mlx5/mr.c 		*page_shift = odp->page_shift;
odp               777 drivers/infiniband/hw/mlx5/mr.c 		*ncont = ib_umem_odp_num_pages(odp);
odp                96 drivers/infiniband/hw/mlx5/odp.c static int check_parent(struct ib_umem_odp *odp,
odp                99 drivers/infiniband/hw/mlx5/odp.c 	struct mlx5_ib_mr *mr = odp->private;
odp               101 drivers/infiniband/hw/mlx5/odp.c 	return mr && mr->parent == parent && !odp->dying;
odp               112 drivers/infiniband/hw/mlx5/odp.c static struct ib_umem_odp *odp_next(struct ib_umem_odp *odp)
odp               114 drivers/infiniband/hw/mlx5/odp.c 	struct mlx5_ib_mr *mr = odp->private, *parent = mr->parent;
odp               115 drivers/infiniband/hw/mlx5/odp.c 	struct ib_ucontext_per_mm *per_mm = odp->per_mm;
odp               120 drivers/infiniband/hw/mlx5/odp.c 		rb = rb_next(&odp->interval_tree.rb);
odp               123 drivers/infiniband/hw/mlx5/odp.c 		odp = rb_entry(rb, struct ib_umem_odp, interval_tree.rb);
odp               124 drivers/infiniband/hw/mlx5/odp.c 		if (check_parent(odp, parent))
odp               128 drivers/infiniband/hw/mlx5/odp.c 	odp = NULL;
odp               131 drivers/infiniband/hw/mlx5/odp.c 	return odp;
odp               138 drivers/infiniband/hw/mlx5/odp.c 	struct ib_umem_odp *odp;
odp               142 drivers/infiniband/hw/mlx5/odp.c 	odp = rbt_ib_umem_lookup(&per_mm->umem_tree, start, length);
odp               143 drivers/infiniband/hw/mlx5/odp.c 	if (!odp)
odp               147 drivers/infiniband/hw/mlx5/odp.c 		if (check_parent(odp, parent))
odp               149 drivers/infiniband/hw/mlx5/odp.c 		rb = rb_next(&odp->interval_tree.rb);
odp               152 drivers/infiniband/hw/mlx5/odp.c 		odp = rb_entry(rb, struct ib_umem_odp, interval_tree.rb);
odp               153 drivers/infiniband/hw/mlx5/odp.c 		if (ib_umem_start(odp) > start + length)
odp               157 drivers/infiniband/hw/mlx5/odp.c 	odp = NULL;
odp               160 drivers/infiniband/hw/mlx5/odp.c 	return odp;
odp               168 drivers/infiniband/hw/mlx5/odp.c 	struct ib_umem_odp *odp;
odp               204 drivers/infiniband/hw/mlx5/odp.c 	odp = odp_lookup(offset * MLX5_IMR_MTT_SIZE,
odp               210 drivers/infiniband/hw/mlx5/odp.c 		if (odp && ib_umem_start(odp) == va) {
odp               211 drivers/infiniband/hw/mlx5/odp.c 			struct mlx5_ib_mr *mtt = odp->private;
odp               214 drivers/infiniband/hw/mlx5/odp.c 			odp = odp_next(odp);
odp               225 drivers/infiniband/hw/mlx5/odp.c 	struct ib_umem_odp *odp = container_of(work, struct ib_umem_odp, work);
odp               226 drivers/infiniband/hw/mlx5/odp.c 	int idx = ib_umem_start(odp) >> MLX5_IMR_MTT_SHIFT;
odp               227 drivers/infiniband/hw/mlx5/odp.c 	struct mlx5_ib_mr *mr = odp->private, *imr = mr->parent;
odp               243 drivers/infiniband/hw/mlx5/odp.c 	ib_umem_odp_release(odp);
odp               479 drivers/infiniband/hw/mlx5/odp.c 	struct ib_umem_odp *odp, *result = NULL;
odp               486 drivers/infiniband/hw/mlx5/odp.c 	odp = odp_lookup(addr, 1, mr);
odp               489 drivers/infiniband/hw/mlx5/odp.c 		    io_virt, bcnt, addr, odp);
odp               492 drivers/infiniband/hw/mlx5/odp.c 	if (likely(odp)) {
odp               496 drivers/infiniband/hw/mlx5/odp.c 		odp = ib_umem_odp_alloc_child(odp_mr, addr, MLX5_IMR_MTT_SIZE);
odp               497 drivers/infiniband/hw/mlx5/odp.c 		if (IS_ERR(odp)) {
odp               499 drivers/infiniband/hw/mlx5/odp.c 			return ERR_CAST(odp);
odp               502 drivers/infiniband/hw/mlx5/odp.c 		mtt = implicit_mr_alloc(mr->ibmr.pd, odp, 0,
odp               506 drivers/infiniband/hw/mlx5/odp.c 			ib_umem_odp_release(odp);
odp               510 drivers/infiniband/hw/mlx5/odp.c 		odp->private = mtt;
odp               511 drivers/infiniband/hw/mlx5/odp.c 		mtt->umem = &odp->umem;
odp               514 drivers/infiniband/hw/mlx5/odp.c 		INIT_WORK(&odp->work, mr_leaf_free_action);
odp               525 drivers/infiniband/hw/mlx5/odp.c 		result = odp;
odp               529 drivers/infiniband/hw/mlx5/odp.c 		odp = odp_next(odp);
odp               530 drivers/infiniband/hw/mlx5/odp.c 		if (odp && ib_umem_start(odp) != addr)
odp               531 drivers/infiniband/hw/mlx5/odp.c 			odp = NULL;
odp               621 drivers/infiniband/hw/mlx5/odp.c 	struct ib_umem_odp *odp;
odp               625 drivers/infiniband/hw/mlx5/odp.c 		odp = implicit_mr_get_data(mr, io_virt, bcnt);
odp               627 drivers/infiniband/hw/mlx5/odp.c 		if (IS_ERR(odp))
odp               628 drivers/infiniband/hw/mlx5/odp.c 			return PTR_ERR(odp);
odp               629 drivers/infiniband/hw/mlx5/odp.c 		mr = odp->private;
odp               631 drivers/infiniband/hw/mlx5/odp.c 		odp = odp_mr;
odp               635 drivers/infiniband/hw/mlx5/odp.c 	size = min_t(size_t, bcnt, ib_umem_end(odp) - io_virt);
odp               637 drivers/infiniband/hw/mlx5/odp.c 	page_shift = odp->page_shift;
odp               642 drivers/infiniband/hw/mlx5/odp.c 	if (prefetch && !downgrade && !odp->umem.writable) {
odp               650 drivers/infiniband/hw/mlx5/odp.c 	if (odp->umem.writable && !downgrade)
odp               653 drivers/infiniband/hw/mlx5/odp.c 	current_seq = READ_ONCE(odp->notifiers_seq);
odp               660 drivers/infiniband/hw/mlx5/odp.c 	ret = ib_umem_odp_map_dma_pages(odp, io_virt, size, access_mask,
odp               668 drivers/infiniband/hw/mlx5/odp.c 	mutex_lock(&odp->umem_mutex);
odp               669 drivers/infiniband/hw/mlx5/odp.c 	if (!ib_umem_mmu_notifier_retry(odp, current_seq)) {
odp               680 drivers/infiniband/hw/mlx5/odp.c 	mutex_unlock(&odp->umem_mutex);
odp               701 drivers/infiniband/hw/mlx5/odp.c 		next = odp_next(odp);
odp               707 drivers/infiniband/hw/mlx5/odp.c 		odp = next;
odp               708 drivers/infiniband/hw/mlx5/odp.c 		mr = odp->private;
odp               718 drivers/infiniband/hw/mlx5/odp.c 		if (!wait_for_completion_timeout(&odp->notifier_completion,
odp               723 drivers/infiniband/hw/mlx5/odp.c 				current_seq, odp->notifiers_seq,
odp               724 drivers/infiniband/hw/mlx5/odp.c 				odp->notifiers_count);