bfregi 766 drivers/infiniband/hw/mlx5/cq.c *index = context->bfregi.sys_pages[0]; bfregi 1015 drivers/infiniband/hw/mlx5/devx.c dev_idx = bfregn_to_uar_index(dev, &c->bfregi, user_idx, true); bfregi 1610 drivers/infiniband/hw/mlx5/main.c struct mlx5_bfreg_info *bfregi) bfregi 1632 drivers/infiniband/hw/mlx5/main.c bfregi->num_static_sys_pages = req->total_num_bfregs / bfregs_per_sys_page; bfregi 1633 drivers/infiniband/hw/mlx5/main.c bfregi->num_dyn_bfregs = ALIGN(calc_dynamic_bfregs(uars_per_sys_page), bfregs_per_sys_page); bfregi 1634 drivers/infiniband/hw/mlx5/main.c bfregi->total_num_bfregs = req->total_num_bfregs + bfregi->num_dyn_bfregs; bfregi 1635 drivers/infiniband/hw/mlx5/main.c bfregi->num_sys_pages = bfregi->total_num_bfregs / bfregs_per_sys_page; bfregi 1640 drivers/infiniband/hw/mlx5/main.c req->total_num_bfregs, bfregi->total_num_bfregs, bfregi 1641 drivers/infiniband/hw/mlx5/main.c bfregi->num_sys_pages); bfregi 1648 drivers/infiniband/hw/mlx5/main.c struct mlx5_bfreg_info *bfregi; bfregi 1652 drivers/infiniband/hw/mlx5/main.c bfregi = &context->bfregi; bfregi 1653 drivers/infiniband/hw/mlx5/main.c for (i = 0; i < bfregi->num_static_sys_pages; i++) { bfregi 1654 drivers/infiniband/hw/mlx5/main.c err = mlx5_cmd_alloc_uar(dev->mdev, &bfregi->sys_pages[i]); bfregi 1658 drivers/infiniband/hw/mlx5/main.c mlx5_ib_dbg(dev, "allocated uar %d\n", bfregi->sys_pages[i]); bfregi 1661 drivers/infiniband/hw/mlx5/main.c for (i = bfregi->num_static_sys_pages; i < bfregi->num_sys_pages; i++) bfregi 1662 drivers/infiniband/hw/mlx5/main.c bfregi->sys_pages[i] = MLX5_IB_INVALID_UAR_INDEX; bfregi 1668 drivers/infiniband/hw/mlx5/main.c if (mlx5_cmd_free_uar(dev->mdev, bfregi->sys_pages[i])) bfregi 1677 drivers/infiniband/hw/mlx5/main.c struct mlx5_bfreg_info *bfregi; bfregi 1680 drivers/infiniband/hw/mlx5/main.c bfregi = &context->bfregi; bfregi 1681 drivers/infiniband/hw/mlx5/main.c for (i = 0; i < bfregi->num_sys_pages; i++) bfregi 1682 drivers/infiniband/hw/mlx5/main.c if (i < bfregi->num_static_sys_pages || bfregi 1683 drivers/infiniband/hw/mlx5/main.c bfregi->sys_pages[i] != MLX5_IB_INVALID_UAR_INDEX) bfregi 1684 drivers/infiniband/hw/mlx5/main.c mlx5_cmd_free_uar(dev->mdev, bfregi->sys_pages[i]); bfregi 1774 drivers/infiniband/hw/mlx5/main.c struct mlx5_bfreg_info *bfregi; bfregi 1839 drivers/infiniband/hw/mlx5/main.c bfregi = &context->bfregi; bfregi 1842 drivers/infiniband/hw/mlx5/main.c err = calc_total_bfregs(dev, lib_uar_4k, &req, bfregi); bfregi 1846 drivers/infiniband/hw/mlx5/main.c mutex_init(&bfregi->lock); bfregi 1847 drivers/infiniband/hw/mlx5/main.c bfregi->lib_uar_4k = lib_uar_4k; bfregi 1848 drivers/infiniband/hw/mlx5/main.c bfregi->count = kcalloc(bfregi->total_num_bfregs, sizeof(*bfregi->count), bfregi 1850 drivers/infiniband/hw/mlx5/main.c if (!bfregi->count) { bfregi 1855 drivers/infiniband/hw/mlx5/main.c bfregi->sys_pages = kcalloc(bfregi->num_sys_pages, bfregi 1856 drivers/infiniband/hw/mlx5/main.c sizeof(*bfregi->sys_pages), bfregi 1858 drivers/infiniband/hw/mlx5/main.c if (!bfregi->sys_pages) { bfregi 1937 drivers/infiniband/hw/mlx5/main.c resp.num_dyn_bfregs = bfregi->num_dyn_bfregs; bfregi 1954 drivers/infiniband/hw/mlx5/main.c bfregi->ver = ver; bfregi 1955 drivers/infiniband/hw/mlx5/main.c bfregi->num_low_latency_bfregs = req.num_low_latency_bfregs; bfregi 1980 drivers/infiniband/hw/mlx5/main.c kfree(bfregi->sys_pages); bfregi 1983 drivers/infiniband/hw/mlx5/main.c kfree(bfregi->count); bfregi 1993 drivers/infiniband/hw/mlx5/main.c struct mlx5_bfreg_info *bfregi; bfregi 1995 drivers/infiniband/hw/mlx5/main.c bfregi = &context->bfregi; bfregi 2002 drivers/infiniband/hw/mlx5/main.c kfree(bfregi->sys_pages); bfregi 2003 drivers/infiniband/hw/mlx5/main.c kfree(bfregi->count); bfregi 2084 drivers/infiniband/hw/mlx5/main.c struct mlx5_bfreg_info *bfregi = &context->bfregi; bfregi 2092 drivers/infiniband/hw/mlx5/main.c int max_valid_idx = dyn_uar ? bfregi->num_sys_pages : bfregi 2093 drivers/infiniband/hw/mlx5/main.c bfregi->num_static_sys_pages; bfregi 2099 drivers/infiniband/hw/mlx5/main.c idx = get_extended_index(vma->vm_pgoff) + bfregi->num_static_sys_pages; bfregi 2134 drivers/infiniband/hw/mlx5/main.c uars_per_page = get_uars_per_sys_page(dev, bfregi->lib_uar_4k); bfregi 2136 drivers/infiniband/hw/mlx5/main.c if (bfreg_dyn_idx >= bfregi->total_num_bfregs) { bfregi 2138 drivers/infiniband/hw/mlx5/main.c bfreg_dyn_idx, bfregi->total_num_bfregs); bfregi 2142 drivers/infiniband/hw/mlx5/main.c mutex_lock(&bfregi->lock); bfregi 2146 drivers/infiniband/hw/mlx5/main.c if (bfregi->count[bfreg_dyn_idx]) { bfregi 2148 drivers/infiniband/hw/mlx5/main.c mutex_unlock(&bfregi->lock); bfregi 2152 drivers/infiniband/hw/mlx5/main.c bfregi->count[bfreg_dyn_idx]++; bfregi 2153 drivers/infiniband/hw/mlx5/main.c mutex_unlock(&bfregi->lock); bfregi 2161 drivers/infiniband/hw/mlx5/main.c uar_index = bfregi->sys_pages[idx]; bfregi 2177 drivers/infiniband/hw/mlx5/main.c bfregi->sys_pages[idx] = uar_index; bfregi 2187 drivers/infiniband/hw/mlx5/main.c mlx5_ib_free_bfreg(dev, bfregi, bfreg_dyn_idx); bfregi 132 drivers/infiniband/hw/mlx5/mlx5_ib.h struct mlx5_bfreg_info bfregi; bfregi 1330 drivers/infiniband/hw/mlx5/mlx5_ib.h void mlx5_ib_free_bfreg(struct mlx5_ib_dev *dev, struct mlx5_bfreg_info *bfregi, bfregi 1467 drivers/infiniband/hw/mlx5/mlx5_ib.h struct mlx5_bfreg_info *bfregi) bfregi 1469 drivers/infiniband/hw/mlx5/mlx5_ib.h return get_uars_per_sys_page(dev, bfregi->lib_uar_4k) * bfregi->num_static_sys_pages; bfregi 1476 drivers/infiniband/hw/mlx5/mlx5_ib.h struct mlx5_bfreg_info *bfregi, u32 bfregn, bfregi 582 drivers/infiniband/hw/mlx5/qp.c static int max_bfregs(struct mlx5_ib_dev *dev, struct mlx5_bfreg_info *bfregi) bfregi 584 drivers/infiniband/hw/mlx5/qp.c return get_num_static_uars(dev, bfregi) * MLX5_NON_FP_BFREGS_PER_UAR; bfregi 588 drivers/infiniband/hw/mlx5/qp.c struct mlx5_bfreg_info *bfregi) bfregi 592 drivers/infiniband/hw/mlx5/qp.c n = max_bfregs(dev, bfregi) - bfregi->num_low_latency_bfregs - bfregi 599 drivers/infiniband/hw/mlx5/qp.c struct mlx5_bfreg_info *bfregi) bfregi 601 drivers/infiniband/hw/mlx5/qp.c return num_med_bfreg(dev, bfregi) ? 1 : -ENOMEM; bfregi 605 drivers/infiniband/hw/mlx5/qp.c struct mlx5_bfreg_info *bfregi) bfregi 609 drivers/infiniband/hw/mlx5/qp.c med = num_med_bfreg(dev, bfregi); bfregi 614 drivers/infiniband/hw/mlx5/qp.c struct mlx5_bfreg_info *bfregi) bfregi 618 drivers/infiniband/hw/mlx5/qp.c for (i = first_hi_bfreg(dev, bfregi); i < max_bfregs(dev, bfregi); i++) { bfregi 619 drivers/infiniband/hw/mlx5/qp.c if (!bfregi->count[i]) { bfregi 620 drivers/infiniband/hw/mlx5/qp.c bfregi->count[i]++; bfregi 629 drivers/infiniband/hw/mlx5/qp.c struct mlx5_bfreg_info *bfregi) bfregi 631 drivers/infiniband/hw/mlx5/qp.c int minidx = first_med_bfreg(dev, bfregi); bfregi 637 drivers/infiniband/hw/mlx5/qp.c for (i = minidx; i < first_hi_bfreg(dev, bfregi); i++) { bfregi 638 drivers/infiniband/hw/mlx5/qp.c if (bfregi->count[i] < bfregi->count[minidx]) bfregi 640 drivers/infiniband/hw/mlx5/qp.c if (!bfregi->count[minidx]) bfregi 644 drivers/infiniband/hw/mlx5/qp.c bfregi->count[minidx]++; bfregi 649 drivers/infiniband/hw/mlx5/qp.c struct mlx5_bfreg_info *bfregi) bfregi 653 drivers/infiniband/hw/mlx5/qp.c mutex_lock(&bfregi->lock); bfregi 654 drivers/infiniband/hw/mlx5/qp.c if (bfregi->ver >= 2) { bfregi 655 drivers/infiniband/hw/mlx5/qp.c bfregn = alloc_high_class_bfreg(dev, bfregi); bfregi 657 drivers/infiniband/hw/mlx5/qp.c bfregn = alloc_med_class_bfreg(dev, bfregi); bfregi 663 drivers/infiniband/hw/mlx5/qp.c bfregi->count[bfregn]++; bfregi 665 drivers/infiniband/hw/mlx5/qp.c mutex_unlock(&bfregi->lock); bfregi 670 drivers/infiniband/hw/mlx5/qp.c void mlx5_ib_free_bfreg(struct mlx5_ib_dev *dev, struct mlx5_bfreg_info *bfregi, int bfregn) bfregi 672 drivers/infiniband/hw/mlx5/qp.c mutex_lock(&bfregi->lock); bfregi 673 drivers/infiniband/hw/mlx5/qp.c bfregi->count[bfregn]--; bfregi 674 drivers/infiniband/hw/mlx5/qp.c mutex_unlock(&bfregi->lock); bfregi 717 drivers/infiniband/hw/mlx5/qp.c struct mlx5_bfreg_info *bfregi, u32 bfregn, bfregi 724 drivers/infiniband/hw/mlx5/qp.c bfregs_per_sys_page = get_uars_per_sys_page(dev, bfregi->lib_uar_4k) * bfregi 729 drivers/infiniband/hw/mlx5/qp.c index_of_sys_page += bfregi->num_static_sys_pages; bfregi 731 drivers/infiniband/hw/mlx5/qp.c if (index_of_sys_page >= bfregi->num_sys_pages) bfregi 734 drivers/infiniband/hw/mlx5/qp.c if (bfregn > bfregi->num_dyn_bfregs || bfregi 735 drivers/infiniband/hw/mlx5/qp.c bfregi->sys_pages[index_of_sys_page] == MLX5_IB_INVALID_UAR_INDEX) { bfregi 742 drivers/infiniband/hw/mlx5/qp.c return bfregi->sys_pages[index_of_sys_page] + offset; bfregi 849 drivers/infiniband/hw/mlx5/qp.c struct mlx5_bfreg_info *bfregi, int bfregn) bfregi 885 drivers/infiniband/hw/mlx5/qp.c uar_index = bfregn_to_uar_index(dev, &context->bfregi, bfregi 899 drivers/infiniband/hw/mlx5/qp.c bfregn = alloc_bfreg(dev, &context->bfregi); bfregi 906 drivers/infiniband/hw/mlx5/qp.c uar_index = bfregn_to_uar_index(dev, &context->bfregi, bfregn, bfregi 950 drivers/infiniband/hw/mlx5/qp.c resp->bfreg_index = adjust_bfregn(dev, &context->bfregi, bfregn); bfregi 981 drivers/infiniband/hw/mlx5/qp.c mlx5_ib_free_bfreg(dev, &context->bfregi, bfregn); bfregi 1003 drivers/infiniband/hw/mlx5/qp.c mlx5_ib_free_bfreg(dev, &context->bfregi, qp->bfregn);