diff options
| -rw-r--r-- | drivers/infiniband/hw/mlx5/main.c | 2 | ||||
| -rw-r--r-- | drivers/infiniband/hw/mlx5/qp.c | 12 | ||||
| -rw-r--r-- | include/linux/mlx5/device.h | 1 | ||||
| -rw-r--r-- | include/linux/mlx5/qp.h | 1 |
4 files changed, 16 insertions, 0 deletions
diff --git a/drivers/infiniband/hw/mlx5/main.c b/drivers/infiniband/hw/mlx5/main.c index fa6dc870adae..364d4b6937f5 100644 --- a/drivers/infiniband/hw/mlx5/main.c +++ b/drivers/infiniband/hw/mlx5/main.c | |||
| @@ -282,6 +282,8 @@ static int mlx5_ib_query_device(struct ib_device *ibdev, | |||
| 282 | props->sig_guard_cap = IB_GUARD_T10DIF_CRC | | 282 | props->sig_guard_cap = IB_GUARD_T10DIF_CRC | |
| 283 | IB_GUARD_T10DIF_CSUM; | 283 | IB_GUARD_T10DIF_CSUM; |
| 284 | } | 284 | } |
| 285 | if (flags & MLX5_DEV_CAP_FLAG_BLOCK_MCAST) | ||
| 286 | props->device_cap_flags |= IB_DEVICE_BLOCK_MULTICAST_LOOPBACK; | ||
| 285 | 287 | ||
| 286 | props->vendor_id = be32_to_cpup((__be32 *)(out_mad->data + 36)) & | 288 | props->vendor_id = be32_to_cpup((__be32 *)(out_mad->data + 36)) & |
| 287 | 0xffffff; | 289 | 0xffffff; |
diff --git a/drivers/infiniband/hw/mlx5/qp.c b/drivers/infiniband/hw/mlx5/qp.c index ae788d27b93f..dc930ed21eca 100644 --- a/drivers/infiniband/hw/mlx5/qp.c +++ b/drivers/infiniband/hw/mlx5/qp.c | |||
| @@ -807,6 +807,15 @@ static int create_qp_common(struct mlx5_ib_dev *dev, struct ib_pd *pd, | |||
| 807 | spin_lock_init(&qp->sq.lock); | 807 | spin_lock_init(&qp->sq.lock); |
| 808 | spin_lock_init(&qp->rq.lock); | 808 | spin_lock_init(&qp->rq.lock); |
| 809 | 809 | ||
| 810 | if (init_attr->create_flags & IB_QP_CREATE_BLOCK_MULTICAST_LOOPBACK) { | ||
| 811 | if (!(dev->mdev.caps.flags & MLX5_DEV_CAP_FLAG_BLOCK_MCAST)) { | ||
| 812 | mlx5_ib_dbg(dev, "block multicast loopback isn't supported\n"); | ||
| 813 | return -EINVAL; | ||
| 814 | } else { | ||
| 815 | qp->flags |= MLX5_IB_QP_BLOCK_MULTICAST_LOOPBACK; | ||
| 816 | } | ||
| 817 | } | ||
| 818 | |||
| 810 | if (init_attr->sq_sig_type == IB_SIGNAL_ALL_WR) | 819 | if (init_attr->sq_sig_type == IB_SIGNAL_ALL_WR) |
| 811 | qp->sq_signal_bits = MLX5_WQE_CTRL_CQ_UPDATE; | 820 | qp->sq_signal_bits = MLX5_WQE_CTRL_CQ_UPDATE; |
| 812 | 821 | ||
| @@ -878,6 +887,9 @@ static int create_qp_common(struct mlx5_ib_dev *dev, struct ib_pd *pd, | |||
| 878 | if (qp->wq_sig) | 887 | if (qp->wq_sig) |
| 879 | in->ctx.flags_pd |= cpu_to_be32(MLX5_QP_ENABLE_SIG); | 888 | in->ctx.flags_pd |= cpu_to_be32(MLX5_QP_ENABLE_SIG); |
| 880 | 889 | ||
| 890 | if (qp->flags & MLX5_IB_QP_BLOCK_MULTICAST_LOOPBACK) | ||
| 891 | in->ctx.flags_pd |= cpu_to_be32(MLX5_QP_BLOCK_MCAST); | ||
| 892 | |||
| 881 | if (qp->scat_cqe && is_connected(init_attr->qp_type)) { | 893 | if (qp->scat_cqe && is_connected(init_attr->qp_type)) { |
| 882 | int rcqe_sz; | 894 | int rcqe_sz; |
| 883 | int scqe_sz; | 895 | int scqe_sz; |
diff --git a/include/linux/mlx5/device.h b/include/linux/mlx5/device.h index 407bdb67fd4f..3406cfb1267a 100644 --- a/include/linux/mlx5/device.h +++ b/include/linux/mlx5/device.h | |||
| @@ -179,6 +179,7 @@ enum { | |||
| 179 | MLX5_DEV_CAP_FLAG_BAD_QKEY_CNTR = 1LL << 9, | 179 | MLX5_DEV_CAP_FLAG_BAD_QKEY_CNTR = 1LL << 9, |
| 180 | MLX5_DEV_CAP_FLAG_APM = 1LL << 17, | 180 | MLX5_DEV_CAP_FLAG_APM = 1LL << 17, |
| 181 | MLX5_DEV_CAP_FLAG_ATOMIC = 1LL << 18, | 181 | MLX5_DEV_CAP_FLAG_ATOMIC = 1LL << 18, |
| 182 | MLX5_DEV_CAP_FLAG_BLOCK_MCAST = 1LL << 23, | ||
| 182 | MLX5_DEV_CAP_FLAG_ON_DMND_PG = 1LL << 24, | 183 | MLX5_DEV_CAP_FLAG_ON_DMND_PG = 1LL << 24, |
| 183 | MLX5_DEV_CAP_FLAG_CQ_MODER = 1LL << 29, | 184 | MLX5_DEV_CAP_FLAG_CQ_MODER = 1LL << 29, |
| 184 | MLX5_DEV_CAP_FLAG_RESIZE_CQ = 1LL << 30, | 185 | MLX5_DEV_CAP_FLAG_RESIZE_CQ = 1LL << 30, |
diff --git a/include/linux/mlx5/qp.h b/include/linux/mlx5/qp.h index f829ad80ff28..9709b30e2d69 100644 --- a/include/linux/mlx5/qp.h +++ b/include/linux/mlx5/qp.h | |||
| @@ -146,6 +146,7 @@ enum { | |||
| 146 | 146 | ||
| 147 | enum { | 147 | enum { |
| 148 | MLX5_QP_LAT_SENSITIVE = 1 << 28, | 148 | MLX5_QP_LAT_SENSITIVE = 1 << 28, |
| 149 | MLX5_QP_BLOCK_MCAST = 1 << 30, | ||
| 149 | MLX5_QP_ENABLE_SIG = 1 << 31, | 150 | MLX5_QP_ENABLE_SIG = 1 << 31, |
| 150 | }; | 151 | }; |
| 151 | 152 | ||
