Lines Matching refs:rwq
698 struct mlx5_ib_rwq *rwq) in destroy_user_rq() argument
702 if (rwq->create_flags & MLX5_IB_WQ_FLAGS_DELAY_DROP) in destroy_user_rq()
706 mlx5_ib_db_unmap_user(context, &rwq->db); in destroy_user_rq()
707 if (rwq->umem) in destroy_user_rq()
708 ib_umem_release(rwq->umem); in destroy_user_rq()
712 struct mlx5_ib_rwq *rwq, in create_user_rq() argument
726 rwq->umem = ib_umem_get(pd->uobject->context, ucmd->buf_addr, in create_user_rq()
727 rwq->buf_size, 0, 0); in create_user_rq()
728 if (IS_ERR(rwq->umem)) { in create_user_rq()
730 err = PTR_ERR(rwq->umem); in create_user_rq()
734 mlx5_ib_cont_pages(rwq->umem, ucmd->buf_addr, 0, &npages, &page_shift, in create_user_rq()
737 &rwq->rq_page_offset); in create_user_rq()
743 rwq->rq_num_pas = ncont; in create_user_rq()
744 rwq->page_shift = page_shift; in create_user_rq()
745 rwq->log_page_size = page_shift - MLX5_ADAPTER_PAGE_SHIFT; in create_user_rq()
746 rwq->wq_sig = !!(ucmd->flags & MLX5_WQ_FLAG_SIGNATURE); in create_user_rq()
749 (unsigned long long)ucmd->buf_addr, rwq->buf_size, in create_user_rq()
752 err = mlx5_ib_db_map_user(context, ucmd->db_addr, &rwq->db); in create_user_rq()
758 rwq->create_type = MLX5_WQ_USER; in create_user_rq()
762 ib_umem_release(rwq->umem); in create_user_rq()
5211 struct mlx5_ib_rwq *rwq = to_mibrwq(core_qp); in mlx5_ib_wq_event() local
5212 struct mlx5_ib_dev *dev = to_mdev(rwq->ibwq.device); in mlx5_ib_wq_event()
5215 if (rwq->ibwq.event_handler) { in mlx5_ib_wq_event()
5216 event.device = rwq->ibwq.device; in mlx5_ib_wq_event()
5217 event.element.wq = &rwq->ibwq; in mlx5_ib_wq_event()
5227 rwq->ibwq.event_handler(&event, rwq->ibwq.wq_context); in mlx5_ib_wq_event()
5252 static int create_rq(struct mlx5_ib_rwq *rwq, struct ib_pd *pd, in create_rq() argument
5266 inlen = MLX5_ST_SZ_BYTES(create_rq_in) + sizeof(u64) * rwq->rq_num_pas; in create_rq()
5274 MLX5_SET(rqc, rqc, user_index, rwq->user_index); in create_rq()
5280 rwq->create_flags & MLX5_IB_WQ_FLAGS_STRIDING_RQ ? in create_rq()
5291 MLX5_SET(wq, wq, log_wq_stride, rwq->log_rq_stride); in create_rq()
5292 if (rwq->create_flags & MLX5_IB_WQ_FLAGS_STRIDING_RQ) { in create_rq()
5293 MLX5_SET(wq, wq, two_byte_shift_en, rwq->two_byte_shift_en); in create_rq()
5295 rwq->single_stride_log_num_of_bytes - in create_rq()
5297 MLX5_SET(wq, wq, log_wqe_num_of_strides, rwq->log_num_strides - in create_rq()
5300 MLX5_SET(wq, wq, log_wq_sz, rwq->log_rq_size); in create_rq()
5302 MLX5_SET(wq, wq, page_offset, rwq->rq_page_offset); in create_rq()
5303 MLX5_SET(wq, wq, log_wq_pg_sz, rwq->log_page_size); in create_rq()
5304 MLX5_SET(wq, wq, wq_signature, rwq->wq_sig); in create_rq()
5305 MLX5_SET64(wq, wq, dbr_addr, rwq->db.dma); in create_rq()
5334 mlx5_ib_populate_pas(dev, rwq->umem, rwq->page_shift, rq_pas0, 0); in create_rq()
5335 err = mlx5_core_create_rq_tracked(dev->mdev, in, inlen, &rwq->core_qp); in create_rq()
5341 mlx5_core_destroy_rq_tracked(dev->mdev, &rwq->core_qp); in create_rq()
5343 rwq->create_flags |= MLX5_IB_WQ_FLAGS_DELAY_DROP; in create_rq()
5354 struct mlx5_ib_rwq *rwq) in set_user_rq_size() argument
5363 rwq->wqe_count = ucmd->rq_wqe_count; in set_user_rq_size()
5364 rwq->wqe_shift = ucmd->rq_wqe_shift; in set_user_rq_size()
5365 if (check_shl_overflow(rwq->wqe_count, rwq->wqe_shift, &rwq->buf_size)) in set_user_rq_size()
5368 rwq->log_rq_stride = rwq->wqe_shift; in set_user_rq_size()
5369 rwq->log_rq_size = ilog2(rwq->wqe_count); in set_user_rq_size()
5376 struct mlx5_ib_rwq *rwq) in prepare_user_rq() argument
5430 rwq->single_stride_log_num_of_bytes = in prepare_user_rq()
5432 rwq->log_num_strides = ucmd.single_wqe_log_num_of_strides; in prepare_user_rq()
5433 rwq->two_byte_shift_en = !!ucmd.two_byte_shift_en; in prepare_user_rq()
5434 rwq->create_flags |= MLX5_IB_WQ_FLAGS_STRIDING_RQ; in prepare_user_rq()
5437 err = set_user_rq_size(dev, init_attr, &ucmd, rwq); in prepare_user_rq()
5443 err = create_user_rq(dev, pd, rwq, &ucmd); in prepare_user_rq()
5450 rwq->user_index = ucmd.user_index; in prepare_user_rq()
5459 struct mlx5_ib_rwq *rwq; in mlx5_ib_create_wq() local
5474 rwq = kzalloc(sizeof(*rwq), GFP_KERNEL); in mlx5_ib_create_wq()
5475 if (!rwq) in mlx5_ib_create_wq()
5477 err = prepare_user_rq(pd, init_attr, udata, rwq); in mlx5_ib_create_wq()
5480 err = create_rq(rwq, pd, init_attr); in mlx5_ib_create_wq()
5490 rwq->ibwq.wq_num = rwq->core_qp.qpn; in mlx5_ib_create_wq()
5491 rwq->ibwq.state = IB_WQS_RESET; in mlx5_ib_create_wq()
5500 rwq->core_qp.event = mlx5_ib_wq_event; in mlx5_ib_create_wq()
5501 rwq->ibwq.event_handler = init_attr->event_handler; in mlx5_ib_create_wq()
5502 return &rwq->ibwq; in mlx5_ib_create_wq()
5505 mlx5_core_destroy_rq_tracked(dev->mdev, &rwq->core_qp); in mlx5_ib_create_wq()
5507 destroy_user_rq(dev, pd, rwq); in mlx5_ib_create_wq()
5509 kfree(rwq); in mlx5_ib_create_wq()
5516 struct mlx5_ib_rwq *rwq = to_mrwq(wq); in mlx5_ib_destroy_wq() local
5518 mlx5_core_destroy_rq_tracked(dev->mdev, &rwq->core_qp); in mlx5_ib_destroy_wq()
5519 destroy_user_rq(dev, wq->pd, rwq); in mlx5_ib_destroy_wq()
5520 kfree(rwq); in mlx5_ib_destroy_wq()
5615 struct mlx5_ib_rwq *rwq = to_mrwq(wq); in mlx5_ib_modify_wq() local
5691 err = mlx5_core_modify_rq(dev->mdev, rwq->core_qp.qpn, in, inlen); in mlx5_ib_modify_wq()
5693 rwq->ibwq.state = (wq_state == MLX5_RQC_STATE_ERR) ? IB_WQS_ERR : wq_state; in mlx5_ib_modify_wq()