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);