net/mlx4_core: Add basic support for QP max-rate limiting
Add the low-level device commands and definitions used for QP max-rate limiting. This is done through the following elements: - read rate-limit device caps in QUERY_DEV_CAP: number of different rates and the min/max rates in Kbs/Mbs/Gbs units - enhance the QP context struct to contain rate limit units and value - allow to do run time rate-limit setting to QPs through the update-qp firmware command - QP rate-limiting is disallowed for VFs Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
822b3b2ebf
commit
fc31e2560a
@@ -205,6 +205,7 @@ enum {
|
||||
MLX4_DEV_CAP_FLAG2_RECOVERABLE_ERROR_EVENT = 1LL << 20,
|
||||
MLX4_DEV_CAP_FLAG2_PORT_REMAP = 1LL << 21,
|
||||
MLX4_DEV_CAP_FLAG2_QCN = 1LL << 22,
|
||||
MLX4_DEV_CAP_FLAG2_QP_RATE_LIMIT = 1LL << 23
|
||||
};
|
||||
|
||||
enum {
|
||||
@@ -450,6 +451,21 @@ enum mlx4_module_id {
|
||||
MLX4_MODULE_ID_QSFP28 = 0x11,
|
||||
};
|
||||
|
||||
enum { /* rl */
|
||||
MLX4_QP_RATE_LIMIT_NONE = 0,
|
||||
MLX4_QP_RATE_LIMIT_KBS = 1,
|
||||
MLX4_QP_RATE_LIMIT_MBS = 2,
|
||||
MLX4_QP_RATE_LIMIT_GBS = 3
|
||||
};
|
||||
|
||||
struct mlx4_rate_limit_caps {
|
||||
u16 num_rates; /* Number of different rates */
|
||||
u8 min_unit;
|
||||
u16 min_val;
|
||||
u8 max_unit;
|
||||
u16 max_val;
|
||||
};
|
||||
|
||||
static inline u64 mlx4_fw_ver(u64 major, u64 minor, u64 subminor)
|
||||
{
|
||||
return (major << 32) | (minor << 16) | subminor;
|
||||
@@ -565,6 +581,7 @@ struct mlx4_caps {
|
||||
u32 dmfs_high_rate_qpn_base;
|
||||
u32 dmfs_high_rate_qpn_range;
|
||||
u32 vf_caps;
|
||||
struct mlx4_rate_limit_caps rl_caps;
|
||||
};
|
||||
|
||||
struct mlx4_buf_list {
|
||||
|
@@ -207,14 +207,16 @@ struct mlx4_qp_context {
|
||||
__be32 msn;
|
||||
__be16 rq_wqe_counter;
|
||||
__be16 sq_wqe_counter;
|
||||
u32 reserved3[2];
|
||||
u32 reserved3;
|
||||
__be16 rate_limit_params;
|
||||
__be16 reserved4;
|
||||
__be32 param3;
|
||||
__be32 nummmcpeers_basemkey;
|
||||
u8 log_page_size;
|
||||
u8 reserved4[2];
|
||||
u8 reserved5[2];
|
||||
u8 mtt_base_addr_h;
|
||||
__be32 mtt_base_addr_l;
|
||||
u32 reserved5[10];
|
||||
u32 reserved6[10];
|
||||
};
|
||||
|
||||
struct mlx4_update_qp_context {
|
||||
@@ -229,6 +231,7 @@ struct mlx4_update_qp_context {
|
||||
enum {
|
||||
MLX4_UPD_QP_MASK_PM_STATE = 32,
|
||||
MLX4_UPD_QP_MASK_VSD = 33,
|
||||
MLX4_UPD_QP_MASK_RATE_LIMIT = 35,
|
||||
};
|
||||
|
||||
enum {
|
||||
@@ -428,7 +431,8 @@ struct mlx4_wqe_inline_seg {
|
||||
enum mlx4_update_qp_attr {
|
||||
MLX4_UPDATE_QP_SMAC = 1 << 0,
|
||||
MLX4_UPDATE_QP_VSD = 1 << 1,
|
||||
MLX4_UPDATE_QP_SUPPORTED_ATTRS = (1 << 2) - 1
|
||||
MLX4_UPDATE_QP_RATE_LIMIT = 1 << 2,
|
||||
MLX4_UPDATE_QP_SUPPORTED_ATTRS = (1 << 3) - 1
|
||||
};
|
||||
|
||||
enum mlx4_update_qp_params_flags {
|
||||
@@ -438,6 +442,8 @@ enum mlx4_update_qp_params_flags {
|
||||
struct mlx4_update_qp_params {
|
||||
u8 smac_index;
|
||||
u32 flags;
|
||||
u16 rate_unit;
|
||||
u16 rate_val;
|
||||
};
|
||||
|
||||
int mlx4_update_qp(struct mlx4_dev *dev, u32 qpn,
|
||||
|
Reference in New Issue
Block a user