aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Vesker <valex@mellanox.com>2016-08-28 05:25:52 -0400
committerDoug Ledford <dledford@redhat.com>2016-10-07 16:54:13 -0400
commit0680efa21478f7b3e775bf4253c615538cef2ebf (patch)
tree75bbb7adeb892f088cb39495b79e81a61c989c08
parent31f69a82b456e3ae9b5572961b4cc4ec971e9dc7 (diff)
IB/mlx5: Refactor raw packet QP modify function
Added a struct for modifying raw QP, this will allow modifying multiple parameters in raw packet QP RQ and can also be used for SQ in the future. Signed-off-by: Alex Vesker <valex@mellanox.com> Signed-off-by: Leon Romanovsky <leon@kernel.org> Signed-off-by: Doug Ledford <dledford@redhat.com>
-rw-r--r--drivers/infiniband/hw/mlx5/qp.c28
1 files changed, 20 insertions, 8 deletions
diff --git a/drivers/infiniband/hw/mlx5/qp.c b/drivers/infiniband/hw/mlx5/qp.c
index f3c943f6458e..7686ee89189b 100644
--- a/drivers/infiniband/hw/mlx5/qp.c
+++ b/drivers/infiniband/hw/mlx5/qp.c
@@ -77,6 +77,10 @@ struct mlx5_wqe_eth_pad {
77 u8 rsvd0[16]; 77 u8 rsvd0[16];
78}; 78};
79 79
80struct mlx5_modify_raw_qp_param {
81 u16 operation;
82};
83
80static void get_cqs(enum ib_qp_type qp_type, 84static void get_cqs(enum ib_qp_type qp_type,
81 struct ib_cq *ib_send_cq, struct ib_cq *ib_recv_cq, 85 struct ib_cq *ib_send_cq, struct ib_cq *ib_recv_cq,
82 struct mlx5_ib_cq **send_cq, struct mlx5_ib_cq **recv_cq); 86 struct mlx5_ib_cq **send_cq, struct mlx5_ib_cq **recv_cq);
@@ -1862,7 +1866,7 @@ static void get_cqs(enum ib_qp_type qp_type,
1862} 1866}
1863 1867
1864static int modify_raw_packet_qp(struct mlx5_ib_dev *dev, struct mlx5_ib_qp *qp, 1868static int modify_raw_packet_qp(struct mlx5_ib_dev *dev, struct mlx5_ib_qp *qp,
1865 u16 operation); 1869 const struct mlx5_modify_raw_qp_param *raw_qp_param);
1866 1870
1867static void destroy_qp_common(struct mlx5_ib_dev *dev, struct mlx5_ib_qp *qp) 1871static void destroy_qp_common(struct mlx5_ib_dev *dev, struct mlx5_ib_qp *qp)
1868{ 1872{
@@ -1887,8 +1891,11 @@ static void destroy_qp_common(struct mlx5_ib_dev *dev, struct mlx5_ib_qp *qp)
1887 MLX5_CMD_OP_2RST_QP, 0, 1891 MLX5_CMD_OP_2RST_QP, 0,
1888 NULL, &base->mqp); 1892 NULL, &base->mqp);
1889 } else { 1893 } else {
1890 err = modify_raw_packet_qp(dev, qp, 1894 struct mlx5_modify_raw_qp_param raw_qp_param = {
1891 MLX5_CMD_OP_2RST_QP); 1895 .operation = MLX5_CMD_OP_2RST_QP
1896 };
1897
1898 err = modify_raw_packet_qp(dev, qp, &raw_qp_param);
1892 } 1899 }
1893 if (err) 1900 if (err)
1894 mlx5_ib_warn(dev, "mlx5_ib: modify QP 0x%06x to RESET failed\n", 1901 mlx5_ib_warn(dev, "mlx5_ib: modify QP 0x%06x to RESET failed\n",
@@ -2421,7 +2428,7 @@ out:
2421} 2428}
2422 2429
2423static int modify_raw_packet_qp(struct mlx5_ib_dev *dev, struct mlx5_ib_qp *qp, 2430static int modify_raw_packet_qp(struct mlx5_ib_dev *dev, struct mlx5_ib_qp *qp,
2424 u16 operation) 2431 const struct mlx5_modify_raw_qp_param *raw_qp_param)
2425{ 2432{
2426 struct mlx5_ib_raw_packet_qp *raw_packet_qp = &qp->raw_packet_qp; 2433 struct mlx5_ib_raw_packet_qp *raw_packet_qp = &qp->raw_packet_qp;
2427 struct mlx5_ib_rq *rq = &raw_packet_qp->rq; 2434 struct mlx5_ib_rq *rq = &raw_packet_qp->rq;
@@ -2430,7 +2437,7 @@ static int modify_raw_packet_qp(struct mlx5_ib_dev *dev, struct mlx5_ib_qp *qp,
2430 int sq_state; 2437 int sq_state;
2431 int err; 2438 int err;
2432 2439
2433 switch (operation) { 2440 switch (raw_qp_param->operation) {
2434 case MLX5_CMD_OP_RST2INIT_QP: 2441 case MLX5_CMD_OP_RST2INIT_QP:
2435 rq_state = MLX5_RQC_STATE_RDY; 2442 rq_state = MLX5_RQC_STATE_RDY;
2436 sq_state = MLX5_SQC_STATE_RDY; 2443 sq_state = MLX5_SQC_STATE_RDY;
@@ -2689,11 +2696,16 @@ static int __mlx5_ib_modify_qp(struct ib_qp *ibqp,
2689 optpar = ib_mask_to_mlx5_opt(attr_mask); 2696 optpar = ib_mask_to_mlx5_opt(attr_mask);
2690 optpar &= opt_mask[mlx5_cur][mlx5_new][mlx5_st]; 2697 optpar &= opt_mask[mlx5_cur][mlx5_new][mlx5_st];
2691 2698
2692 if (qp->ibqp.qp_type == IB_QPT_RAW_PACKET) 2699 if (qp->ibqp.qp_type == IB_QPT_RAW_PACKET) {
2693 err = modify_raw_packet_qp(dev, qp, op); 2700 struct mlx5_modify_raw_qp_param raw_qp_param = {};
2694 else 2701
2702 raw_qp_param.operation = op;
2703 err = modify_raw_packet_qp(dev, qp, &raw_qp_param);
2704 } else {
2695 err = mlx5_core_qp_modify(dev->mdev, op, optpar, context, 2705 err = mlx5_core_qp_modify(dev->mdev, op, optpar, context,
2696 &base->mqp); 2706 &base->mqp);
2707 }
2708
2697 if (err) 2709 if (err)
2698 goto out; 2710 goto out;
2699 2711