|
@@ -37,6 +37,7 @@
|
|
#include <linux/mlx5/fs.h>
|
|
#include <linux/mlx5/fs.h>
|
|
#include "mlx5_ib.h"
|
|
#include "mlx5_ib.h"
|
|
#include "ib_rep.h"
|
|
#include "ib_rep.h"
|
|
|
|
+#include "cmd.h"
|
|
|
|
|
|
/* not supported currently */
|
|
/* not supported currently */
|
|
static int wq_signature;
|
|
static int wq_signature;
|
|
@@ -1261,17 +1262,19 @@ static bool tunnel_offload_supported(struct mlx5_core_dev *dev)
|
|
|
|
|
|
static void destroy_raw_packet_qp_tir(struct mlx5_ib_dev *dev,
|
|
static void destroy_raw_packet_qp_tir(struct mlx5_ib_dev *dev,
|
|
struct mlx5_ib_rq *rq,
|
|
struct mlx5_ib_rq *rq,
|
|
- u32 qp_flags_en)
|
|
|
|
|
|
+ u32 qp_flags_en,
|
|
|
|
+ struct ib_pd *pd)
|
|
{
|
|
{
|
|
if (qp_flags_en & (MLX5_QP_FLAG_TIR_ALLOW_SELF_LB_UC |
|
|
if (qp_flags_en & (MLX5_QP_FLAG_TIR_ALLOW_SELF_LB_UC |
|
|
MLX5_QP_FLAG_TIR_ALLOW_SELF_LB_MC))
|
|
MLX5_QP_FLAG_TIR_ALLOW_SELF_LB_MC))
|
|
mlx5_ib_disable_lb(dev, false, true);
|
|
mlx5_ib_disable_lb(dev, false, true);
|
|
- mlx5_core_destroy_tir(dev->mdev, rq->tirn);
|
|
|
|
|
|
+ mlx5_cmd_destroy_tir(dev->mdev, rq->tirn, to_mpd(pd)->uid);
|
|
}
|
|
}
|
|
|
|
|
|
static int create_raw_packet_qp_tir(struct mlx5_ib_dev *dev,
|
|
static int create_raw_packet_qp_tir(struct mlx5_ib_dev *dev,
|
|
struct mlx5_ib_rq *rq, u32 tdn,
|
|
struct mlx5_ib_rq *rq, u32 tdn,
|
|
- u32 *qp_flags_en)
|
|
|
|
|
|
+ u32 *qp_flags_en,
|
|
|
|
+ struct ib_pd *pd)
|
|
{
|
|
{
|
|
u8 lb_flag = 0;
|
|
u8 lb_flag = 0;
|
|
u32 *in;
|
|
u32 *in;
|
|
@@ -1284,6 +1287,7 @@ static int create_raw_packet_qp_tir(struct mlx5_ib_dev *dev,
|
|
if (!in)
|
|
if (!in)
|
|
return -ENOMEM;
|
|
return -ENOMEM;
|
|
|
|
|
|
|
|
+ MLX5_SET(create_tir_in, in, uid, to_mpd(pd)->uid);
|
|
tirc = MLX5_ADDR_OF(create_tir_in, in, ctx);
|
|
tirc = MLX5_ADDR_OF(create_tir_in, in, ctx);
|
|
MLX5_SET(tirc, tirc, disp_type, MLX5_TIRC_DISP_TYPE_DIRECT);
|
|
MLX5_SET(tirc, tirc, disp_type, MLX5_TIRC_DISP_TYPE_DIRECT);
|
|
MLX5_SET(tirc, tirc, inline_rqn, rq->base.mqp.qpn);
|
|
MLX5_SET(tirc, tirc, inline_rqn, rq->base.mqp.qpn);
|
|
@@ -1310,7 +1314,7 @@ static int create_raw_packet_qp_tir(struct mlx5_ib_dev *dev,
|
|
err = mlx5_ib_enable_lb(dev, false, true);
|
|
err = mlx5_ib_enable_lb(dev, false, true);
|
|
|
|
|
|
if (err)
|
|
if (err)
|
|
- destroy_raw_packet_qp_tir(dev, rq, 0);
|
|
|
|
|
|
+ destroy_raw_packet_qp_tir(dev, rq, 0, pd);
|
|
}
|
|
}
|
|
kvfree(in);
|
|
kvfree(in);
|
|
|
|
|
|
@@ -1354,8 +1358,7 @@ static int create_raw_packet_qp(struct mlx5_ib_dev *dev, struct mlx5_ib_qp *qp,
|
|
if (err)
|
|
if (err)
|
|
goto err_destroy_sq;
|
|
goto err_destroy_sq;
|
|
|
|
|
|
-
|
|
|
|
- err = create_raw_packet_qp_tir(dev, rq, tdn, &qp->flags_en);
|
|
|
|
|
|
+ err = create_raw_packet_qp_tir(dev, rq, tdn, &qp->flags_en, pd);
|
|
if (err)
|
|
if (err)
|
|
goto err_destroy_rq;
|
|
goto err_destroy_rq;
|
|
}
|
|
}
|
|
@@ -1385,7 +1388,7 @@ static void destroy_raw_packet_qp(struct mlx5_ib_dev *dev,
|
|
struct mlx5_ib_rq *rq = &raw_packet_qp->rq;
|
|
struct mlx5_ib_rq *rq = &raw_packet_qp->rq;
|
|
|
|
|
|
if (qp->rq.wqe_cnt) {
|
|
if (qp->rq.wqe_cnt) {
|
|
- destroy_raw_packet_qp_tir(dev, rq, qp->flags_en);
|
|
|
|
|
|
+ destroy_raw_packet_qp_tir(dev, rq, qp->flags_en, qp->ibqp.pd);
|
|
destroy_raw_packet_qp_rq(dev, rq);
|
|
destroy_raw_packet_qp_rq(dev, rq);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1412,7 +1415,8 @@ static void destroy_rss_raw_qp_tir(struct mlx5_ib_dev *dev, struct mlx5_ib_qp *q
|
|
if (qp->flags_en & (MLX5_QP_FLAG_TIR_ALLOW_SELF_LB_UC |
|
|
if (qp->flags_en & (MLX5_QP_FLAG_TIR_ALLOW_SELF_LB_UC |
|
|
MLX5_QP_FLAG_TIR_ALLOW_SELF_LB_MC))
|
|
MLX5_QP_FLAG_TIR_ALLOW_SELF_LB_MC))
|
|
mlx5_ib_disable_lb(dev, false, true);
|
|
mlx5_ib_disable_lb(dev, false, true);
|
|
- mlx5_core_destroy_tir(dev->mdev, qp->rss_qp.tirn);
|
|
|
|
|
|
+ mlx5_cmd_destroy_tir(dev->mdev, qp->rss_qp.tirn,
|
|
|
|
+ to_mpd(qp->ibqp.pd)->uid);
|
|
}
|
|
}
|
|
|
|
|
|
static int create_rss_raw_qp_tir(struct mlx5_ib_dev *dev, struct mlx5_ib_qp *qp,
|
|
static int create_rss_raw_qp_tir(struct mlx5_ib_dev *dev, struct mlx5_ib_qp *qp,
|
|
@@ -1510,6 +1514,7 @@ static int create_rss_raw_qp_tir(struct mlx5_ib_dev *dev, struct mlx5_ib_qp *qp,
|
|
if (!in)
|
|
if (!in)
|
|
return -ENOMEM;
|
|
return -ENOMEM;
|
|
|
|
|
|
|
|
+ MLX5_SET(create_tir_in, in, uid, to_mpd(pd)->uid);
|
|
tirc = MLX5_ADDR_OF(create_tir_in, in, ctx);
|
|
tirc = MLX5_ADDR_OF(create_tir_in, in, ctx);
|
|
MLX5_SET(tirc, tirc, disp_type,
|
|
MLX5_SET(tirc, tirc, disp_type,
|
|
MLX5_TIRC_DISP_TYPE_INDIRECT);
|
|
MLX5_TIRC_DISP_TYPE_INDIRECT);
|
|
@@ -1626,7 +1631,8 @@ create_tir:
|
|
err = mlx5_ib_enable_lb(dev, false, true);
|
|
err = mlx5_ib_enable_lb(dev, false, true);
|
|
|
|
|
|
if (err)
|
|
if (err)
|
|
- mlx5_core_destroy_tir(dev->mdev, qp->rss_qp.tirn);
|
|
|
|
|
|
+ mlx5_cmd_destroy_tir(dev->mdev, qp->rss_qp.tirn,
|
|
|
|
+ to_mpd(pd)->uid);
|
|
}
|
|
}
|
|
|
|
|
|
if (err)
|
|
if (err)
|