Lines Matching refs:rwq

779 			    struct mlx5_ib_rwq *rwq, struct ib_udata *udata)  in destroy_user_rq()  argument
787 if (rwq->create_flags & MLX5_IB_WQ_FLAGS_DELAY_DROP) in destroy_user_rq()
790 mlx5_ib_db_unmap_user(context, &rwq->db); in destroy_user_rq()
791 ib_umem_release(rwq->umem); in destroy_user_rq()
795 struct ib_udata *udata, struct mlx5_ib_rwq *rwq, in create_user_rq() argument
809 rwq->umem = ib_umem_get(udata, ucmd->buf_addr, rwq->buf_size, 0, 0); in create_user_rq()
810 if (IS_ERR(rwq->umem)) { in create_user_rq()
812 err = PTR_ERR(rwq->umem); in create_user_rq()
816 mlx5_ib_cont_pages(rwq->umem, ucmd->buf_addr, 0, &npages, &page_shift, in create_user_rq()
819 &rwq->rq_page_offset); in create_user_rq()
825 rwq->rq_num_pas = ncont; in create_user_rq()
826 rwq->page_shift = page_shift; in create_user_rq()
827 rwq->log_page_size = page_shift - MLX5_ADAPTER_PAGE_SHIFT; in create_user_rq()
828 rwq->wq_sig = !!(ucmd->flags & MLX5_WQ_FLAG_SIGNATURE); in create_user_rq()
831 (unsigned long long)ucmd->buf_addr, rwq->buf_size, in create_user_rq()
834 err = mlx5_ib_db_map_user(ucontext, udata, ucmd->db_addr, &rwq->db); in create_user_rq()
840 rwq->create_type = MLX5_WQ_USER; in create_user_rq()
844 ib_umem_release(rwq->umem); in create_user_rq()
5877 struct mlx5_ib_rwq *rwq = to_mibrwq(core_qp); in mlx5_ib_wq_event() local
5878 struct mlx5_ib_dev *dev = to_mdev(rwq->ibwq.device); in mlx5_ib_wq_event()
5881 if (rwq->ibwq.event_handler) { in mlx5_ib_wq_event()
5882 event.device = rwq->ibwq.device; in mlx5_ib_wq_event()
5883 event.element.wq = &rwq->ibwq; in mlx5_ib_wq_event()
5893 rwq->ibwq.event_handler(&event, rwq->ibwq.wq_context); in mlx5_ib_wq_event()
5918 static int create_rq(struct mlx5_ib_rwq *rwq, struct ib_pd *pd, in create_rq() argument
5932 inlen = MLX5_ST_SZ_BYTES(create_rq_in) + sizeof(u64) * rwq->rq_num_pas; in create_rq()
5941 MLX5_SET(rqc, rqc, user_index, rwq->user_index); in create_rq()
5947 rwq->create_flags & MLX5_IB_WQ_FLAGS_STRIDING_RQ ? in create_rq()
5958 MLX5_SET(wq, wq, log_wq_stride, rwq->log_rq_stride); in create_rq()
5959 if (rwq->create_flags & MLX5_IB_WQ_FLAGS_STRIDING_RQ) { in create_rq()
5960 MLX5_SET(wq, wq, two_byte_shift_en, rwq->two_byte_shift_en); in create_rq()
5962 rwq->single_stride_log_num_of_bytes - in create_rq()
5964 MLX5_SET(wq, wq, log_wqe_num_of_strides, rwq->log_num_strides - in create_rq()
5967 MLX5_SET(wq, wq, log_wq_sz, rwq->log_rq_size); in create_rq()
5969 MLX5_SET(wq, wq, page_offset, rwq->rq_page_offset); in create_rq()
5970 MLX5_SET(wq, wq, log_wq_pg_sz, rwq->log_page_size); in create_rq()
5971 MLX5_SET(wq, wq, wq_signature, rwq->wq_sig); in create_rq()
5972 MLX5_SET64(wq, wq, dbr_addr, rwq->db.dma); in create_rq()
6001 mlx5_ib_populate_pas(dev, rwq->umem, rwq->page_shift, rq_pas0, 0); in create_rq()
6002 err = mlx5_core_create_rq_tracked(dev->mdev, in, inlen, &rwq->core_qp); in create_rq()
6008 mlx5_core_destroy_rq_tracked(dev->mdev, &rwq->core_qp); in create_rq()
6010 rwq->create_flags |= MLX5_IB_WQ_FLAGS_DELAY_DROP; in create_rq()
6021 struct mlx5_ib_rwq *rwq) in set_user_rq_size() argument
6030 rwq->wqe_count = ucmd->rq_wqe_count; in set_user_rq_size()
6031 rwq->wqe_shift = ucmd->rq_wqe_shift; in set_user_rq_size()
6032 if (check_shl_overflow(rwq->wqe_count, rwq->wqe_shift, &rwq->buf_size)) in set_user_rq_size()
6035 rwq->log_rq_stride = rwq->wqe_shift; in set_user_rq_size()
6036 rwq->log_rq_size = ilog2(rwq->wqe_count); in set_user_rq_size()
6043 struct mlx5_ib_rwq *rwq) in prepare_user_rq() argument
6097 rwq->single_stride_log_num_of_bytes = in prepare_user_rq()
6099 rwq->log_num_strides = ucmd.single_wqe_log_num_of_strides; in prepare_user_rq()
6100 rwq->two_byte_shift_en = !!ucmd.two_byte_shift_en; in prepare_user_rq()
6101 rwq->create_flags |= MLX5_IB_WQ_FLAGS_STRIDING_RQ; in prepare_user_rq()
6104 err = set_user_rq_size(dev, init_attr, &ucmd, rwq); in prepare_user_rq()
6110 err = create_user_rq(dev, pd, udata, rwq, &ucmd); in prepare_user_rq()
6116 rwq->user_index = ucmd.user_index; in prepare_user_rq()
6125 struct mlx5_ib_rwq *rwq; in mlx5_ib_create_wq() local
6140 rwq = kzalloc(sizeof(*rwq), GFP_KERNEL); in mlx5_ib_create_wq()
6141 if (!rwq) in mlx5_ib_create_wq()
6143 err = prepare_user_rq(pd, init_attr, udata, rwq); in mlx5_ib_create_wq()
6146 err = create_rq(rwq, pd, init_attr); in mlx5_ib_create_wq()
6156 rwq->ibwq.wq_num = rwq->core_qp.qpn; in mlx5_ib_create_wq()
6157 rwq->ibwq.state = IB_WQS_RESET; in mlx5_ib_create_wq()
6166 rwq->core_qp.event = mlx5_ib_wq_event; in mlx5_ib_create_wq()
6167 rwq->ibwq.event_handler = init_attr->event_handler; in mlx5_ib_create_wq()
6168 return &rwq->ibwq; in mlx5_ib_create_wq()
6171 mlx5_core_destroy_rq_tracked(dev->mdev, &rwq->core_qp); in mlx5_ib_create_wq()
6173 destroy_user_rq(dev, pd, rwq, udata); in mlx5_ib_create_wq()
6175 kfree(rwq); in mlx5_ib_create_wq()
6182 struct mlx5_ib_rwq *rwq = to_mrwq(wq); in mlx5_ib_destroy_wq() local
6184 mlx5_core_destroy_rq_tracked(dev->mdev, &rwq->core_qp); in mlx5_ib_destroy_wq()
6185 destroy_user_rq(dev, wq->pd, rwq, udata); in mlx5_ib_destroy_wq()
6186 kfree(rwq); in mlx5_ib_destroy_wq()
6282 struct mlx5_ib_rwq *rwq = to_mrwq(wq); in mlx5_ib_modify_wq() local
6362 err = mlx5_core_modify_rq(dev->mdev, rwq->core_qp.qpn, in, inlen); in mlx5_ib_modify_wq()
6364 rwq->ibwq.state = (wq_state == MLX5_RQC_STATE_ERR) ? IB_WQS_ERR : wq_state; in mlx5_ib_modify_wq()