diff options
author | Alex Vesker <valex@mellanox.com> | 2016-08-28 05:25:52 -0400 |
---|---|---|
committer | Doug Ledford <dledford@redhat.com> | 2016-10-07 16:54:13 -0400 |
commit | 0680efa21478f7b3e775bf4253c615538cef2ebf (patch) | |
tree | 75bbb7adeb892f088cb39495b79e81a61c989c08 | |
parent | 31f69a82b456e3ae9b5572961b4cc4ec971e9dc7 (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.c | 28 |
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 | ||
80 | struct mlx5_modify_raw_qp_param { | ||
81 | u16 operation; | ||
82 | }; | ||
83 | |||
80 | static void get_cqs(enum ib_qp_type qp_type, | 84 | static 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 | ||
1864 | static int modify_raw_packet_qp(struct mlx5_ib_dev *dev, struct mlx5_ib_qp *qp, | 1868 | static 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 | ||
1867 | static void destroy_qp_common(struct mlx5_ib_dev *dev, struct mlx5_ib_qp *qp) | 1871 | static 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 | ||
2423 | static int modify_raw_packet_qp(struct mlx5_ib_dev *dev, struct mlx5_ib_qp *qp, | 2430 | static 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 | ||