Lines Matching refs:rwq
815 struct mlx5_ib_rwq *rwq, struct ib_udata *udata) in destroy_user_rq() argument
823 if (rwq->create_flags & MLX5_IB_WQ_FLAGS_DELAY_DROP) in destroy_user_rq()
826 mlx5_ib_db_unmap_user(context, &rwq->db); in destroy_user_rq()
827 ib_umem_release(rwq->umem); in destroy_user_rq()
831 struct ib_udata *udata, struct mlx5_ib_rwq *rwq, in create_user_rq() argument
845 rwq->umem = ib_umem_get(&dev->ib_dev, ucmd->buf_addr, rwq->buf_size, 0); in create_user_rq()
846 if (IS_ERR(rwq->umem)) { in create_user_rq()
848 err = PTR_ERR(rwq->umem); in create_user_rq()
852 mlx5_ib_cont_pages(rwq->umem, ucmd->buf_addr, 0, &npages, &page_shift, in create_user_rq()
855 &rwq->rq_page_offset); in create_user_rq()
861 rwq->rq_num_pas = ncont; in create_user_rq()
862 rwq->page_shift = page_shift; in create_user_rq()
863 rwq->log_page_size = page_shift - MLX5_ADAPTER_PAGE_SHIFT; in create_user_rq()
864 rwq->wq_sig = !!(ucmd->flags & MLX5_WQ_FLAG_SIGNATURE); in create_user_rq()
867 (unsigned long long)ucmd->buf_addr, rwq->buf_size, in create_user_rq()
870 err = mlx5_ib_db_map_user(ucontext, udata, ucmd->db_addr, &rwq->db); in create_user_rq()
879 ib_umem_release(rwq->umem); in create_user_rq()
4778 struct mlx5_ib_rwq *rwq = to_mibrwq(core_qp); in mlx5_ib_wq_event() local
4779 struct mlx5_ib_dev *dev = to_mdev(rwq->ibwq.device); in mlx5_ib_wq_event()
4782 if (rwq->ibwq.event_handler) { in mlx5_ib_wq_event()
4783 event.device = rwq->ibwq.device; in mlx5_ib_wq_event()
4784 event.element.wq = &rwq->ibwq; in mlx5_ib_wq_event()
4794 rwq->ibwq.event_handler(&event, rwq->ibwq.wq_context); in mlx5_ib_wq_event()
4819 static int create_rq(struct mlx5_ib_rwq *rwq, struct ib_pd *pd, in create_rq() argument
4833 inlen = MLX5_ST_SZ_BYTES(create_rq_in) + sizeof(u64) * rwq->rq_num_pas; in create_rq()
4842 MLX5_SET(rqc, rqc, user_index, rwq->user_index); in create_rq()
4848 rwq->create_flags & MLX5_IB_WQ_FLAGS_STRIDING_RQ ? in create_rq()
4859 MLX5_SET(wq, wq, log_wq_stride, rwq->log_rq_stride); in create_rq()
4860 if (rwq->create_flags & MLX5_IB_WQ_FLAGS_STRIDING_RQ) { in create_rq()
4869 MLX5_SET(wq, wq, two_byte_shift_en, rwq->two_byte_shift_en); in create_rq()
4871 rwq->single_stride_log_num_of_bytes - in create_rq()
4874 fw_map[rwq->log_num_strides - in create_rq()
4877 MLX5_SET(wq, wq, log_wq_sz, rwq->log_rq_size); in create_rq()
4879 MLX5_SET(wq, wq, page_offset, rwq->rq_page_offset); in create_rq()
4880 MLX5_SET(wq, wq, log_wq_pg_sz, rwq->log_page_size); in create_rq()
4881 MLX5_SET(wq, wq, wq_signature, rwq->wq_sig); in create_rq()
4882 MLX5_SET64(wq, wq, dbr_addr, rwq->db.dma); in create_rq()
4911 mlx5_ib_populate_pas(dev, rwq->umem, rwq->page_shift, rq_pas0, 0); in create_rq()
4912 err = mlx5_core_create_rq_tracked(dev, in, inlen, &rwq->core_qp); in create_rq()
4918 mlx5_core_destroy_rq_tracked(dev, &rwq->core_qp); in create_rq()
4920 rwq->create_flags |= MLX5_IB_WQ_FLAGS_DELAY_DROP; in create_rq()
4931 struct mlx5_ib_rwq *rwq) in set_user_rq_size() argument
4940 rwq->wqe_count = ucmd->rq_wqe_count; in set_user_rq_size()
4941 rwq->wqe_shift = ucmd->rq_wqe_shift; in set_user_rq_size()
4942 if (check_shl_overflow(rwq->wqe_count, rwq->wqe_shift, &rwq->buf_size)) in set_user_rq_size()
4945 rwq->log_rq_stride = rwq->wqe_shift; in set_user_rq_size()
4946 rwq->log_rq_size = ilog2(rwq->wqe_count); in set_user_rq_size()
4966 struct mlx5_ib_rwq *rwq) in prepare_user_rq() argument
5022 rwq->single_stride_log_num_of_bytes = in prepare_user_rq()
5024 rwq->log_num_strides = ucmd.single_wqe_log_num_of_strides; in prepare_user_rq()
5025 rwq->two_byte_shift_en = !!ucmd.two_byte_shift_en; in prepare_user_rq()
5026 rwq->create_flags |= MLX5_IB_WQ_FLAGS_STRIDING_RQ; in prepare_user_rq()
5029 err = set_user_rq_size(dev, init_attr, &ucmd, rwq); in prepare_user_rq()
5035 err = create_user_rq(dev, pd, udata, rwq, &ucmd); in prepare_user_rq()
5041 rwq->user_index = ucmd.user_index; in prepare_user_rq()
5050 struct mlx5_ib_rwq *rwq; in mlx5_ib_create_wq() local
5069 rwq = kzalloc(sizeof(*rwq), GFP_KERNEL); in mlx5_ib_create_wq()
5070 if (!rwq) in mlx5_ib_create_wq()
5072 err = prepare_user_rq(pd, init_attr, udata, rwq); in mlx5_ib_create_wq()
5075 err = create_rq(rwq, pd, init_attr); in mlx5_ib_create_wq()
5085 rwq->ibwq.wq_num = rwq->core_qp.qpn; in mlx5_ib_create_wq()
5086 rwq->ibwq.state = IB_WQS_RESET; in mlx5_ib_create_wq()
5095 rwq->core_qp.event = mlx5_ib_wq_event; in mlx5_ib_create_wq()
5096 rwq->ibwq.event_handler = init_attr->event_handler; in mlx5_ib_create_wq()
5097 return &rwq->ibwq; in mlx5_ib_create_wq()
5100 mlx5_core_destroy_rq_tracked(dev, &rwq->core_qp); in mlx5_ib_create_wq()
5102 destroy_user_rq(dev, pd, rwq, udata); in mlx5_ib_create_wq()
5104 kfree(rwq); in mlx5_ib_create_wq()
5111 struct mlx5_ib_rwq *rwq = to_mrwq(wq); in mlx5_ib_destroy_wq() local
5114 ret = mlx5_core_destroy_rq_tracked(dev, &rwq->core_qp); in mlx5_ib_destroy_wq()
5117 destroy_user_rq(dev, wq->pd, rwq, udata); in mlx5_ib_destroy_wq()
5118 kfree(rwq); in mlx5_ib_destroy_wq()
5206 struct mlx5_ib_rwq *rwq = to_mrwq(wq); in mlx5_ib_modify_wq() local
5284 err = mlx5_core_modify_rq(dev->mdev, rwq->core_qp.qpn, in); in mlx5_ib_modify_wq()
5286 rwq->ibwq.state = (wq_state == MLX5_RQC_STATE_ERR) ? IB_WQS_ERR : wq_state; in mlx5_ib_modify_wq()