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 --- |