Lines Matching refs:uuari

426 static int num_med_uuar(struct mlx5_uuar_info *uuari)  in num_med_uuar()  argument
430 n = uuari->num_uars * MLX5_NON_FP_BF_REGS_PER_PAGE - in num_med_uuar()
431 uuari->num_low_latency_uuars - 1; in num_med_uuar()
436 static int max_uuari(struct mlx5_uuar_info *uuari) in max_uuari() argument
438 return uuari->num_uars * 4; in max_uuari()
441 static int first_hi_uuar(struct mlx5_uuar_info *uuari) in first_hi_uuar() argument
447 med = num_med_uuar(uuari); in first_hi_uuar()
457 static int alloc_high_class_uuar(struct mlx5_uuar_info *uuari) in alloc_high_class_uuar() argument
461 for (i = first_hi_uuar(uuari); i < max_uuari(uuari); i = next_uuar(i)) { in alloc_high_class_uuar()
462 if (!test_bit(i, uuari->bitmap)) { in alloc_high_class_uuar()
463 set_bit(i, uuari->bitmap); in alloc_high_class_uuar()
464 uuari->count[i]++; in alloc_high_class_uuar()
472 static int alloc_med_class_uuar(struct mlx5_uuar_info *uuari) in alloc_med_class_uuar() argument
477 for (i = first_med_uuar(); i < first_hi_uuar(uuari); i = next_uuar(i)) { in alloc_med_class_uuar()
478 if (uuari->count[i] < uuari->count[minidx]) in alloc_med_class_uuar()
482 uuari->count[minidx]++; in alloc_med_class_uuar()
486 static int alloc_uuar(struct mlx5_uuar_info *uuari, in alloc_uuar() argument
491 mutex_lock(&uuari->lock); in alloc_uuar()
495 uuari->count[uuarn]++; in alloc_uuar()
499 if (uuari->ver < 2) in alloc_uuar()
502 uuarn = alloc_med_class_uuar(uuari); in alloc_uuar()
506 if (uuari->ver < 2) in alloc_uuar()
509 uuarn = alloc_high_class_uuar(uuari); in alloc_uuar()
516 mutex_unlock(&uuari->lock); in alloc_uuar()
521 static void free_med_class_uuar(struct mlx5_uuar_info *uuari, int uuarn) in free_med_class_uuar() argument
523 clear_bit(uuarn, uuari->bitmap); in free_med_class_uuar()
524 --uuari->count[uuarn]; in free_med_class_uuar()
527 static void free_high_class_uuar(struct mlx5_uuar_info *uuari, int uuarn) in free_high_class_uuar() argument
529 clear_bit(uuarn, uuari->bitmap); in free_high_class_uuar()
530 --uuari->count[uuarn]; in free_high_class_uuar()
533 static void free_uuar(struct mlx5_uuar_info *uuari, int uuarn) in free_uuar() argument
535 int nuuars = uuari->num_uars * MLX5_BF_REGS_PER_PAGE; in free_uuar()
536 int high_uuar = nuuars - uuari->num_low_latency_uuars; in free_uuar()
538 mutex_lock(&uuari->lock); in free_uuar()
540 --uuari->count[uuarn]; in free_uuar()
545 free_med_class_uuar(uuari, uuarn); in free_uuar()
549 free_high_class_uuar(uuari, uuarn); in free_uuar()
552 mutex_unlock(&uuari->lock); in free_uuar()
588 static int uuarn_to_uar_index(struct mlx5_uuar_info *uuari, int uuarn) in uuarn_to_uar_index() argument
590 return uuari->uars[uuarn / MLX5_BF_REGS_PER_PAGE].index; in uuarn_to_uar_index()
618 uuarn = alloc_uuar(&context->uuari, MLX5_IB_LATENCY_CLASS_HIGH); in create_user_qp()
622 uuarn = alloc_uuar(&context->uuari, MLX5_IB_LATENCY_CLASS_MEDIUM); in create_user_qp()
626 uuarn = alloc_uuar(&context->uuari, MLX5_IB_LATENCY_CLASS_LOW); in create_user_qp()
634 uar_index = uuarn_to_uar_index(&context->uuari, uuarn); in create_user_qp()
711 free_uuar(&context->uuari, uuarn); in create_user_qp()
723 free_uuar(&context->uuari, qp->uuarn); in destroy_qp_user()
732 struct mlx5_uuar_info *uuari; in create_kernel_qp() local
737 uuari = &dev->mdev->priv.uuari; in create_kernel_qp()
744 uuarn = alloc_uuar(uuari, lc); in create_kernel_qp()
750 qp->bf = &uuari->bfs[uuarn]; in create_kernel_qp()
821 free_uuar(&dev->mdev->priv.uuari, uuarn); in create_kernel_qp()
834 free_uuar(&dev->mdev->priv.uuari, qp->bf->uuarn); in destroy_qp_kernel()