qp.c (309fa3470fcaf96b295d2106ab17c00dbf7f3920) qp.c (b1383aa64121778d9419cc982e387e27d9e96c64)
1/*
2 * Copyright (c) 2013-2015, Mellanox Technologies. All rights reserved.
3 *
4 * This software is available to you under a choice of one of two
5 * licenses. You may choose to be licensed under the terms of the GNU
6 * General Public License (GPL) Version 2, available from the file
7 * COPYING in the main directory of this source tree, or the
8 * OpenIB.org BSD license below:

--- 1164 unchanged lines hidden (view full) ---

1173 MLX5_SET(rqc, rqc, user_index, MLX5_GET(qpc, qpc, user_index));
1174 MLX5_SET(rqc, rqc, cqn, MLX5_GET(qpc, qpc, cqn_rcv));
1175
1176 if (mqp->flags & MLX5_IB_QP_CAP_SCATTER_FCS)
1177 MLX5_SET(rqc, rqc, scatter_fcs, 1);
1178
1179 wq = MLX5_ADDR_OF(rqc, rqc, wq);
1180 MLX5_SET(wq, wq, wq_type, MLX5_WQ_TYPE_CYCLIC);
1/*
2 * Copyright (c) 2013-2015, Mellanox Technologies. All rights reserved.
3 *
4 * This software is available to you under a choice of one of two
5 * licenses. You may choose to be licensed under the terms of the GNU
6 * General Public License (GPL) Version 2, available from the file
7 * COPYING in the main directory of this source tree, or the
8 * OpenIB.org BSD license below:

--- 1164 unchanged lines hidden (view full) ---

1173 MLX5_SET(rqc, rqc, user_index, MLX5_GET(qpc, qpc, user_index));
1174 MLX5_SET(rqc, rqc, cqn, MLX5_GET(qpc, qpc, cqn_rcv));
1175
1176 if (mqp->flags & MLX5_IB_QP_CAP_SCATTER_FCS)
1177 MLX5_SET(rqc, rqc, scatter_fcs, 1);
1178
1179 wq = MLX5_ADDR_OF(rqc, rqc, wq);
1180 MLX5_SET(wq, wq, wq_type, MLX5_WQ_TYPE_CYCLIC);
1181 MLX5_SET(wq, wq, end_padding_mode,
1182 MLX5_GET(qpc, qpc, end_padding_mode));
1181 if (rq->flags & MLX5_IB_RQ_PCI_WRITE_END_PADDING)
1182 MLX5_SET(wq, wq, end_padding_mode, MLX5_WQ_END_PAD_MODE_ALIGN);
1183 MLX5_SET(wq, wq, page_offset, MLX5_GET(qpc, qpc, page_offset));
1184 MLX5_SET(wq, wq, pd, MLX5_GET(qpc, qpc, pd));
1185 MLX5_SET64(wq, wq, dbr_addr, MLX5_GET64(qpc, qpc, dbr_addr));
1186 MLX5_SET(wq, wq, log_wq_stride, MLX5_GET(qpc, qpc, log_rq_stride) + 4);
1187 MLX5_SET(wq, wq, log_wq_pg_sz, MLX5_GET(qpc, qpc, log_page_size));
1188 MLX5_SET(wq, wq, log_wq_sz, MLX5_GET(qpc, qpc, log_rq_size));
1189
1190 pas = (__be64 *)MLX5_ADDR_OF(wq, wq, pas);

--- 80 unchanged lines hidden (view full) ---

1271 sq->base.mqp.event = mlx5_ib_qp_event;
1272 }
1273
1274 if (qp->rq.wqe_cnt) {
1275 rq->base.container_mibqp = qp;
1276
1277 if (qp->flags & MLX5_IB_QP_CVLAN_STRIPPING)
1278 rq->flags |= MLX5_IB_RQ_CVLAN_STRIPPING;
1183 MLX5_SET(wq, wq, page_offset, MLX5_GET(qpc, qpc, page_offset));
1184 MLX5_SET(wq, wq, pd, MLX5_GET(qpc, qpc, pd));
1185 MLX5_SET64(wq, wq, dbr_addr, MLX5_GET64(qpc, qpc, dbr_addr));
1186 MLX5_SET(wq, wq, log_wq_stride, MLX5_GET(qpc, qpc, log_rq_stride) + 4);
1187 MLX5_SET(wq, wq, log_wq_pg_sz, MLX5_GET(qpc, qpc, log_page_size));
1188 MLX5_SET(wq, wq, log_wq_sz, MLX5_GET(qpc, qpc, log_rq_size));
1189
1190 pas = (__be64 *)MLX5_ADDR_OF(wq, wq, pas);

--- 80 unchanged lines hidden (view full) ---

1271 sq->base.mqp.event = mlx5_ib_qp_event;
1272 }
1273
1274 if (qp->rq.wqe_cnt) {
1275 rq->base.container_mibqp = qp;
1276
1277 if (qp->flags & MLX5_IB_QP_CVLAN_STRIPPING)
1278 rq->flags |= MLX5_IB_RQ_CVLAN_STRIPPING;
1279 if (qp->flags & MLX5_IB_QP_PCI_WRITE_END_PADDING)
1280 rq->flags |= MLX5_IB_RQ_PCI_WRITE_END_PADDING;
1279 err = create_raw_packet_qp_rq(dev, rq, in);
1280 if (err)
1281 goto err_destroy_sq;
1282
1283
1284 err = create_raw_packet_qp_tir(dev, rq, tdn,
1285 qp->tunnel_offload_en);
1286 if (err)

--- 529 unchanged lines hidden (view full) ---

1816
1817 /* we use IB_QP_CREATE_IPOIB_UD_LSO to indicates ipoib qp */
1818 if (init_attr->qp_type == IB_QPT_UD &&
1819 (init_attr->create_flags & IB_QP_CREATE_IPOIB_UD_LSO)) {
1820 MLX5_SET(qpc, qpc, ulp_stateless_offload_mode, 1);
1821 qp->flags |= MLX5_IB_QP_LSO;
1822 }
1823
1281 err = create_raw_packet_qp_rq(dev, rq, in);
1282 if (err)
1283 goto err_destroy_sq;
1284
1285
1286 err = create_raw_packet_qp_tir(dev, rq, tdn,
1287 qp->tunnel_offload_en);
1288 if (err)

--- 529 unchanged lines hidden (view full) ---

1818
1819 /* we use IB_QP_CREATE_IPOIB_UD_LSO to indicates ipoib qp */
1820 if (init_attr->qp_type == IB_QPT_UD &&
1821 (init_attr->create_flags & IB_QP_CREATE_IPOIB_UD_LSO)) {
1822 MLX5_SET(qpc, qpc, ulp_stateless_offload_mode, 1);
1823 qp->flags |= MLX5_IB_QP_LSO;
1824 }
1825
1826 if (init_attr->create_flags & IB_QP_CREATE_PCI_WRITE_END_PADDING) {
1827 if (!MLX5_CAP_GEN(dev->mdev, end_pad)) {
1828 mlx5_ib_dbg(dev, "scatter end padding is not supported\n");
1829 err = -EOPNOTSUPP;
1830 goto err;
1831 } else if (init_attr->qp_type != IB_QPT_RAW_PACKET) {
1832 MLX5_SET(qpc, qpc, end_padding_mode,
1833 MLX5_WQ_END_PAD_MODE_ALIGN);
1834 } else {
1835 qp->flags |= MLX5_IB_QP_PCI_WRITE_END_PADDING;
1836 }
1837 }
1838
1824 if (init_attr->qp_type == IB_QPT_RAW_PACKET ||
1825 qp->flags & MLX5_IB_QP_UNDERLAY) {
1826 qp->raw_packet_qp.sq.ubuffer.buf_addr = ucmd.sq_buf_addr;
1827 raw_packet_qp_copy_info(qp, &qp->raw_packet_qp);
1828 err = create_raw_packet_qp(dev, qp, in, pd);
1829 } else {
1830 err = mlx5_core_create_qp(dev->mdev, &base->mqp, in, inlen);
1831 }

--- 28 unchanged lines hidden (view full) ---

1860 return 0;
1861
1862err_create:
1863 if (qp->create_type == MLX5_QP_USER)
1864 destroy_qp_user(dev, pd, qp, base);
1865 else if (qp->create_type == MLX5_QP_KERNEL)
1866 destroy_qp_kernel(dev, qp);
1867
1839 if (init_attr->qp_type == IB_QPT_RAW_PACKET ||
1840 qp->flags & MLX5_IB_QP_UNDERLAY) {
1841 qp->raw_packet_qp.sq.ubuffer.buf_addr = ucmd.sq_buf_addr;
1842 raw_packet_qp_copy_info(qp, &qp->raw_packet_qp);
1843 err = create_raw_packet_qp(dev, qp, in, pd);
1844 } else {
1845 err = mlx5_core_create_qp(dev->mdev, &base->mqp, in, inlen);
1846 }

--- 28 unchanged lines hidden (view full) ---

1875 return 0;
1876
1877err_create:
1878 if (qp->create_type == MLX5_QP_USER)
1879 destroy_qp_user(dev, pd, qp, base);
1880 else if (qp->create_type == MLX5_QP_KERNEL)
1881 destroy_qp_kernel(dev, qp);
1882
1883err:
1868 kvfree(in);
1869 return err;
1870}
1871
1872static void mlx5_ib_lock_cqs(struct mlx5_ib_cq *send_cq, struct mlx5_ib_cq *recv_cq)
1873 __acquires(&send_cq->lock) __acquires(&recv_cq->lock)
1874{
1875 if (send_cq) {

--- 2868 unchanged lines hidden (view full) ---

4744 MLX5_SET(rqc, rqc, user_index, rwq->user_index);
4745 MLX5_SET(rqc, rqc, cqn, to_mcq(init_attr->cq)->mcq.cqn);
4746 MLX5_SET(rqc, rqc, state, MLX5_RQC_STATE_RST);
4747 MLX5_SET(rqc, rqc, flush_in_error_en, 1);
4748 wq = MLX5_ADDR_OF(rqc, rqc, wq);
4749 MLX5_SET(wq, wq, wq_type,
4750 rwq->create_flags & MLX5_IB_WQ_FLAGS_STRIDING_RQ ?
4751 MLX5_WQ_TYPE_CYCLIC_STRIDING_RQ : MLX5_WQ_TYPE_CYCLIC);
1884 kvfree(in);
1885 return err;
1886}
1887
1888static void mlx5_ib_lock_cqs(struct mlx5_ib_cq *send_cq, struct mlx5_ib_cq *recv_cq)
1889 __acquires(&send_cq->lock) __acquires(&recv_cq->lock)
1890{
1891 if (send_cq) {

--- 2868 unchanged lines hidden (view full) ---

4760 MLX5_SET(rqc, rqc, user_index, rwq->user_index);
4761 MLX5_SET(rqc, rqc, cqn, to_mcq(init_attr->cq)->mcq.cqn);
4762 MLX5_SET(rqc, rqc, state, MLX5_RQC_STATE_RST);
4763 MLX5_SET(rqc, rqc, flush_in_error_en, 1);
4764 wq = MLX5_ADDR_OF(rqc, rqc, wq);
4765 MLX5_SET(wq, wq, wq_type,
4766 rwq->create_flags & MLX5_IB_WQ_FLAGS_STRIDING_RQ ?
4767 MLX5_WQ_TYPE_CYCLIC_STRIDING_RQ : MLX5_WQ_TYPE_CYCLIC);
4752 MLX5_SET(wq, wq, end_padding_mode, MLX5_WQ_END_PAD_MODE_ALIGN);
4768 if (init_attr->create_flags & IB_WQ_FLAGS_PCI_WRITE_END_PADDING) {
4769 if (!MLX5_CAP_GEN(dev->mdev, end_pad)) {
4770 mlx5_ib_dbg(dev, "Scatter end padding is not supported\n");
4771 err = -EOPNOTSUPP;
4772 goto out;
4773 } else {
4774 MLX5_SET(wq, wq, end_padding_mode, MLX5_WQ_END_PAD_MODE_ALIGN);
4775 }
4776 }
4753 MLX5_SET(wq, wq, log_wq_stride, rwq->log_rq_stride);
4754 if (rwq->create_flags & MLX5_IB_WQ_FLAGS_STRIDING_RQ) {
4755 MLX5_SET(wq, wq, two_byte_shift_en, rwq->two_byte_shift_en);
4756 MLX5_SET(wq, wq, log_wqe_stride_size,
4757 rwq->single_stride_log_num_of_bytes -
4758 MLX5_MIN_SINGLE_STRIDE_LOG_NUM_BYTES);
4759 MLX5_SET(wq, wq, log_wqe_num_of_strides, rwq->log_num_strides -
4760 MLX5_MIN_SINGLE_WQE_LOG_NUM_STRIDES);

--- 363 unchanged lines hidden (view full) ---

5124 err = -EOPNOTSUPP;
5125 goto out;
5126 }
5127 MLX5_SET64(modify_rq_in, in, modify_bitmask,
5128 MLX5_MODIFY_RQ_IN_MODIFY_BITMASK_VSD);
5129 MLX5_SET(rqc, rqc, vsd,
5130 (wq_attr->flags & IB_WQ_FLAGS_CVLAN_STRIPPING) ? 0 : 1);
5131 }
4777 MLX5_SET(wq, wq, log_wq_stride, rwq->log_rq_stride);
4778 if (rwq->create_flags & MLX5_IB_WQ_FLAGS_STRIDING_RQ) {
4779 MLX5_SET(wq, wq, two_byte_shift_en, rwq->two_byte_shift_en);
4780 MLX5_SET(wq, wq, log_wqe_stride_size,
4781 rwq->single_stride_log_num_of_bytes -
4782 MLX5_MIN_SINGLE_STRIDE_LOG_NUM_BYTES);
4783 MLX5_SET(wq, wq, log_wqe_num_of_strides, rwq->log_num_strides -
4784 MLX5_MIN_SINGLE_WQE_LOG_NUM_STRIDES);

--- 363 unchanged lines hidden (view full) ---

5148 err = -EOPNOTSUPP;
5149 goto out;
5150 }
5151 MLX5_SET64(modify_rq_in, in, modify_bitmask,
5152 MLX5_MODIFY_RQ_IN_MODIFY_BITMASK_VSD);
5153 MLX5_SET(rqc, rqc, vsd,
5154 (wq_attr->flags & IB_WQ_FLAGS_CVLAN_STRIPPING) ? 0 : 1);
5155 }
5156
5157 if (wq_attr->flags_mask & IB_WQ_FLAGS_PCI_WRITE_END_PADDING) {
5158 mlx5_ib_dbg(dev, "Modifying scatter end padding is not supported\n");
5159 err = -EOPNOTSUPP;
5160 goto out;
5161 }
5132 }
5133
5134 if (curr_wq_state == IB_WQS_RESET && wq_state == IB_WQS_RDY) {
5135 if (MLX5_CAP_GEN(dev->mdev, modify_rq_counter_set_id)) {
5136 MLX5_SET64(modify_rq_in, in, modify_bitmask,
5137 MLX5_MODIFY_RQ_IN_MODIFY_BITMASK_RQ_COUNTER_SET_ID);
5138 MLX5_SET(rqc, rqc, counter_set_id,
5139 dev->port->cnts.set_id);

--- 13 unchanged lines hidden ---
5162 }
5163
5164 if (curr_wq_state == IB_WQS_RESET && wq_state == IB_WQS_RDY) {
5165 if (MLX5_CAP_GEN(dev->mdev, modify_rq_counter_set_id)) {
5166 MLX5_SET64(modify_rq_in, in, modify_bitmask,
5167 MLX5_MODIFY_RQ_IN_MODIFY_BITMASK_RQ_COUNTER_SET_ID);
5168 MLX5_SET(rqc, rqc, counter_set_id,
5169 dev->port->cnts.set_id);

--- 13 unchanged lines hidden ---