Lines Matching refs:uuari

434 static int num_med_uuar(struct mlx5_uuar_info *uuari)  in num_med_uuar()  argument
438 n = uuari->num_uars * MLX5_NON_FP_BF_REGS_PER_PAGE - in num_med_uuar()
439 uuari->num_low_latency_uuars - 1; in num_med_uuar()
444 static int max_uuari(struct mlx5_uuar_info *uuari) in max_uuari() argument
446 return uuari->num_uars * 4; in max_uuari()
449 static int first_hi_uuar(struct mlx5_uuar_info *uuari) in first_hi_uuar() argument
455 med = num_med_uuar(uuari); in first_hi_uuar()
465 static int alloc_high_class_uuar(struct mlx5_uuar_info *uuari) in alloc_high_class_uuar() argument
469 for (i = first_hi_uuar(uuari); i < max_uuari(uuari); i = next_uuar(i)) { in alloc_high_class_uuar()
470 if (!test_bit(i, uuari->bitmap)) { in alloc_high_class_uuar()
471 set_bit(i, uuari->bitmap); in alloc_high_class_uuar()
472 uuari->count[i]++; in alloc_high_class_uuar()
480 static int alloc_med_class_uuar(struct mlx5_uuar_info *uuari) in alloc_med_class_uuar() argument
485 for (i = first_med_uuar(); i < first_hi_uuar(uuari); i = next_uuar(i)) { in alloc_med_class_uuar()
486 if (uuari->count[i] < uuari->count[minidx]) in alloc_med_class_uuar()
490 uuari->count[minidx]++; in alloc_med_class_uuar()
494 static int alloc_uuar(struct mlx5_uuar_info *uuari, in alloc_uuar() argument
499 mutex_lock(&uuari->lock); in alloc_uuar()
503 uuari->count[uuarn]++; in alloc_uuar()
507 if (uuari->ver < 2) in alloc_uuar()
510 uuarn = alloc_med_class_uuar(uuari); in alloc_uuar()
514 if (uuari->ver < 2) in alloc_uuar()
517 uuarn = alloc_high_class_uuar(uuari); in alloc_uuar()
524 mutex_unlock(&uuari->lock); in alloc_uuar()
529 static void free_med_class_uuar(struct mlx5_uuar_info *uuari, int uuarn) in free_med_class_uuar() argument
531 clear_bit(uuarn, uuari->bitmap); in free_med_class_uuar()
532 --uuari->count[uuarn]; in free_med_class_uuar()
535 static void free_high_class_uuar(struct mlx5_uuar_info *uuari, int uuarn) in free_high_class_uuar() argument
537 clear_bit(uuarn, uuari->bitmap); in free_high_class_uuar()
538 --uuari->count[uuarn]; in free_high_class_uuar()
541 static void free_uuar(struct mlx5_uuar_info *uuari, int uuarn) in free_uuar() argument
543 int nuuars = uuari->num_uars * MLX5_BF_REGS_PER_PAGE; in free_uuar()
544 int high_uuar = nuuars - uuari->num_low_latency_uuars; in free_uuar()
546 mutex_lock(&uuari->lock); in free_uuar()
548 --uuari->count[uuarn]; in free_uuar()
553 free_med_class_uuar(uuari, uuarn); in free_uuar()
557 free_high_class_uuar(uuari, uuarn); in free_uuar()
560 mutex_unlock(&uuari->lock); in free_uuar()
596 static int uuarn_to_uar_index(struct mlx5_uuar_info *uuari, int uuarn) in uuarn_to_uar_index() argument
598 return uuari->uars[uuarn / MLX5_BF_REGS_PER_PAGE].index; in uuarn_to_uar_index()
626 uuarn = alloc_uuar(&context->uuari, MLX5_IB_LATENCY_CLASS_HIGH); in create_user_qp()
630 uuarn = alloc_uuar(&context->uuari, MLX5_IB_LATENCY_CLASS_MEDIUM); in create_user_qp()
634 uuarn = alloc_uuar(&context->uuari, MLX5_IB_LATENCY_CLASS_LOW); in create_user_qp()
642 uar_index = uuarn_to_uar_index(&context->uuari, uuarn); in create_user_qp()
719 free_uuar(&context->uuari, uuarn); in create_user_qp()
731 free_uuar(&context->uuari, qp->uuarn); in destroy_qp_user()
740 struct mlx5_uuar_info *uuari; in create_kernel_qp() local
745 uuari = &dev->mdev->priv.uuari; in create_kernel_qp()
752 uuarn = alloc_uuar(uuari, lc); in create_kernel_qp()
758 qp->bf = &uuari->bfs[uuarn]; in create_kernel_qp()
829 free_uuar(&dev->mdev->priv.uuari, uuarn); in create_kernel_qp()
842 free_uuar(&dev->mdev->priv.uuari, qp->bf->uuarn); in destroy_qp_kernel()