Lines Matching refs:bfregi

499 static int max_bfregs(struct mlx5_ib_dev *dev, struct mlx5_bfreg_info *bfregi)  in max_bfregs()  argument
501 return get_num_static_uars(dev, bfregi) * MLX5_NON_FP_BFREGS_PER_UAR; in max_bfregs()
505 struct mlx5_bfreg_info *bfregi) in num_med_bfreg() argument
509 n = max_bfregs(dev, bfregi) - bfregi->num_low_latency_bfregs - in num_med_bfreg()
516 struct mlx5_bfreg_info *bfregi) in first_med_bfreg() argument
518 return num_med_bfreg(dev, bfregi) ? 1 : -ENOMEM; in first_med_bfreg()
522 struct mlx5_bfreg_info *bfregi) in first_hi_bfreg() argument
526 med = num_med_bfreg(dev, bfregi); in first_hi_bfreg()
531 struct mlx5_bfreg_info *bfregi) in alloc_high_class_bfreg() argument
535 for (i = first_hi_bfreg(dev, bfregi); i < max_bfregs(dev, bfregi); i++) { in alloc_high_class_bfreg()
536 if (!bfregi->count[i]) { in alloc_high_class_bfreg()
537 bfregi->count[i]++; in alloc_high_class_bfreg()
546 struct mlx5_bfreg_info *bfregi) in alloc_med_class_bfreg() argument
548 int minidx = first_med_bfreg(dev, bfregi); in alloc_med_class_bfreg()
554 for (i = minidx; i < first_hi_bfreg(dev, bfregi); i++) { in alloc_med_class_bfreg()
555 if (bfregi->count[i] < bfregi->count[minidx]) in alloc_med_class_bfreg()
557 if (!bfregi->count[minidx]) in alloc_med_class_bfreg()
561 bfregi->count[minidx]++; in alloc_med_class_bfreg()
566 struct mlx5_bfreg_info *bfregi) in alloc_bfreg() argument
570 mutex_lock(&bfregi->lock); in alloc_bfreg()
571 if (bfregi->ver >= 2) { in alloc_bfreg()
572 bfregn = alloc_high_class_bfreg(dev, bfregi); in alloc_bfreg()
574 bfregn = alloc_med_class_bfreg(dev, bfregi); in alloc_bfreg()
580 bfregi->count[bfregn]++; in alloc_bfreg()
582 mutex_unlock(&bfregi->lock); in alloc_bfreg()
587 void mlx5_ib_free_bfreg(struct mlx5_ib_dev *dev, struct mlx5_bfreg_info *bfregi, int bfregn) in mlx5_ib_free_bfreg() argument
589 mutex_lock(&bfregi->lock); in mlx5_ib_free_bfreg()
590 bfregi->count[bfregn]--; in mlx5_ib_free_bfreg()
591 mutex_unlock(&bfregi->lock); in mlx5_ib_free_bfreg()
634 struct mlx5_bfreg_info *bfregi, u32 bfregn, in bfregn_to_uar_index() argument
641 bfregs_per_sys_page = get_uars_per_sys_page(dev, bfregi->lib_uar_4k) * in bfregn_to_uar_index()
646 index_of_sys_page += bfregi->num_static_sys_pages; in bfregn_to_uar_index()
648 if (index_of_sys_page >= bfregi->num_sys_pages) in bfregn_to_uar_index()
651 if (bfregn > bfregi->num_dyn_bfregs || in bfregn_to_uar_index()
652 bfregi->sys_pages[index_of_sys_page] == MLX5_IB_INVALID_UAR_INDEX) { in bfregn_to_uar_index()
659 return bfregi->sys_pages[index_of_sys_page] + offset; in bfregn_to_uar_index()
767 struct mlx5_bfreg_info *bfregi, int bfregn) in adjust_bfregn() argument
801 uar_index = bfregn_to_uar_index(dev, &context->bfregi, in create_user_qp()
815 bfregn = alloc_bfreg(dev, &context->bfregi); in create_user_qp()
822 uar_index = bfregn_to_uar_index(dev, &context->bfregi, bfregn, in create_user_qp()
864 resp->bfreg_index = adjust_bfregn(dev, &context->bfregi, bfregn); in create_user_qp()
896 mlx5_ib_free_bfreg(dev, &context->bfregi, bfregn); in create_user_qp()
915 mlx5_ib_free_bfreg(dev, &context->bfregi, qp->bfregn); in destroy_qp_user()