Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b4f34597 authored by Noa Osherovich's avatar Noa Osherovich Committed by Doug Ledford
Browse files

IB/mlx5: Expose multi-packet RQ capabilities



This patch reports the device's striding RQ capabilities to
the user-space:
- min/max_single_stride_log_num_of_bytes: Log of min/max number of
  bytes in a single stride.
- min/max_single_wqe_log_num_of_strides: Log of min/max number of
  strides in a single WQE.
- supported_qpts: A bit mask to know which QP types support multi-
  packet RQ, for now only Raw Packet QPs.

Signed-off-by: default avatarNoa Osherovich <noaos@mellanox.com>
Reviewed-by: default avatarMajd Dibbiny <majd@mellanox.com>
Signed-off-by: default avatarLeon Romanovsky <leon@kernel.org>
Signed-off-by: default avatarDoug Ledford <dledford@redhat.com>
parent b156269d
Loading
Loading
Loading
Loading
+16 −0
Original line number Original line Diff line number Diff line
@@ -848,6 +848,22 @@ static int mlx5_ib_query_device(struct ib_device *ibdev,
		}
		}
	}
	}


	if (field_avail(typeof(resp), striding_rq_caps, uhw->outlen)) {
		resp.response_length += sizeof(resp.striding_rq_caps);
		if (MLX5_CAP_GEN(mdev, striding_rq)) {
			resp.striding_rq_caps.min_single_stride_log_num_of_bytes =
				MLX5_MIN_SINGLE_STRIDE_LOG_NUM_BYTES;
			resp.striding_rq_caps.max_single_stride_log_num_of_bytes =
				MLX5_MAX_SINGLE_STRIDE_LOG_NUM_BYTES;
			resp.striding_rq_caps.min_single_wqe_log_num_of_strides =
				MLX5_MIN_SINGLE_WQE_LOG_NUM_STRIDES;
			resp.striding_rq_caps.max_single_wqe_log_num_of_strides =
				MLX5_MAX_SINGLE_WQE_LOG_NUM_STRIDES;
			resp.striding_rq_caps.supported_qpts =
				BIT(IB_QPT_RAW_PACKET);
		}
	}

	if (uhw->outlen) {
	if (uhw->outlen) {
		err = ib_copy_to_udata(uhw, &resp, resp.response_length);
		err = ib_copy_to_udata(uhw, &resp, resp.response_length);


+5 −0
Original line number Original line Diff line number Diff line
@@ -256,6 +256,11 @@ enum mlx5_ib_wq_flags {
	MLX5_IB_WQ_FLAGS_DELAY_DROP = 0x1,
	MLX5_IB_WQ_FLAGS_DELAY_DROP = 0x1,
};
};


#define MLX5_MIN_SINGLE_WQE_LOG_NUM_STRIDES 9
#define MLX5_MAX_SINGLE_WQE_LOG_NUM_STRIDES 16
#define MLX5_MIN_SINGLE_STRIDE_LOG_NUM_BYTES 6
#define MLX5_MAX_SINGLE_STRIDE_LOG_NUM_BYTES 13

struct mlx5_ib_rwq {
struct mlx5_ib_rwq {
	struct ib_wq		ibwq;
	struct ib_wq		ibwq;
	struct mlx5_core_qp	core_qp;
	struct mlx5_core_qp	core_qp;
+14 −0
Original line number Original line Diff line number Diff line
@@ -190,6 +190,19 @@ struct mlx5_ib_sw_parsing_caps {
	__u32 supported_qpts;
	__u32 supported_qpts;
};
};


struct mlx5_ib_striding_rq_caps {
	__u32 min_single_stride_log_num_of_bytes;
	__u32 max_single_stride_log_num_of_bytes;
	__u32 min_single_wqe_log_num_of_strides;
	__u32 max_single_wqe_log_num_of_strides;

	/* Corresponding bit will be set if qp type from
	 * 'enum ib_qp_type' is supported, e.g.
	 * supported_qpts |= 1 << IB_QPT_RAW_PACKET
	 */
	__u32 supported_qpts;
};

struct mlx5_ib_query_device_resp {
struct mlx5_ib_query_device_resp {
	__u32	comp_mask;
	__u32	comp_mask;
	__u32	response_length;
	__u32	response_length;
@@ -200,6 +213,7 @@ struct mlx5_ib_query_device_resp {
	__u32	mlx5_ib_support_multi_pkt_send_wqes;
	__u32	mlx5_ib_support_multi_pkt_send_wqes;
	__u32	reserved;
	__u32	reserved;
	struct mlx5_ib_sw_parsing_caps sw_parsing_caps;
	struct mlx5_ib_sw_parsing_caps sw_parsing_caps;
	struct mlx5_ib_striding_rq_caps striding_rq_caps;
};
};


struct mlx5_ib_create_cq {
struct mlx5_ib_create_cq {