mirror of
https://github.com/torvalds/linux.git
synced 2026-05-31 10:33:41 +02:00
mlx5-fixes-2024-09-09
-----BEGIN PGP SIGNATURE----- iQEzBAABCAAdFiEEGhZs6bAKwk/OTgTpSD+KveBX+j4FAmbfTw4ACgkQSD+KveBX +j4jxggAnxuWbJuvFBVkiU+62SpPldhKy/ut7Dc3KTOOezb7HMD7suYawgZl0jxr 1cSltKL3lpmaN2FEKITRxESsOKjHqVShkWpZCi+c8hMwd+vWowlaO4r6BY/5ZYhj 2KPx3PjJl6d30d0gw4zMNu3XlOnpunuaRXJv5dbmRkz6G2XGVQzyOH2pfzSJWxyk bcqYm/3Ma0psfEQhIP6I0LDBvHU4rOAlIGQN4IAzmLmwi4Whk6ECI7Q91v3PH/c9 nTJNTQhvyUJEc5aYuHftNU2MHlzejDPx5F3xd4dcQs30MXk5efSD9+OWnxHivjrP c9GE3+PmWAWJtSLLb/iOMyTvY+x63Q== =mGZl -----END PGP SIGNATURE----- Merge tag 'mlx5-fixes-2024-09-09' of git://git.kernel.org/pub/scm/linux/kernel/git/saeed/linux Saeed Mahameed says: ==================== mlx5 fixes 2024-09-09 This series provides bug fixes to mlx5 driver. * tag 'mlx5-fixes-2024-09-09' of git://git.kernel.org/pub/scm/linux/kernel/git/saeed/linux: net/mlx5: Fix bridge mode operations when there are no VFs net/mlx5: Verify support for scheduling element and TSAR type net/mlx5: Add missing masks and QoS bit masks for scheduling elements net/mlx5: Explicitly set scheduling element and TSAR type net/mlx5e: Add missing link mode to ptys2ext_ethtool_map net/mlx5e: Add missing link modes to ptys2ethtool_map net/mlx5: Update the list of the PCI supported devices ==================== Link: https://patch.msgid.link/20240909194505.69715-1-saeed@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
commit
3d731dc9b1
|
|
@ -139,6 +139,10 @@ void mlx5e_build_ptys2ethtool_map(void)
|
|||
ETHTOOL_LINK_MODE_100000baseKR4_Full_BIT);
|
||||
MLX5_BUILD_PTYS2ETHTOOL_CONFIG(MLX5E_100GBASE_LR4, legacy,
|
||||
ETHTOOL_LINK_MODE_100000baseLR4_ER4_Full_BIT);
|
||||
MLX5_BUILD_PTYS2ETHTOOL_CONFIG(MLX5E_100BASE_TX, legacy,
|
||||
ETHTOOL_LINK_MODE_100baseT_Full_BIT);
|
||||
MLX5_BUILD_PTYS2ETHTOOL_CONFIG(MLX5E_1000BASE_T, legacy,
|
||||
ETHTOOL_LINK_MODE_1000baseT_Full_BIT);
|
||||
MLX5_BUILD_PTYS2ETHTOOL_CONFIG(MLX5E_10GBASE_T, legacy,
|
||||
ETHTOOL_LINK_MODE_10000baseT_Full_BIT);
|
||||
MLX5_BUILD_PTYS2ETHTOOL_CONFIG(MLX5E_25GBASE_CR, legacy,
|
||||
|
|
@ -204,6 +208,12 @@ void mlx5e_build_ptys2ethtool_map(void)
|
|||
ETHTOOL_LINK_MODE_200000baseLR4_ER4_FR4_Full_BIT,
|
||||
ETHTOOL_LINK_MODE_200000baseDR4_Full_BIT,
|
||||
ETHTOOL_LINK_MODE_200000baseCR4_Full_BIT);
|
||||
MLX5_BUILD_PTYS2ETHTOOL_CONFIG(MLX5E_400GAUI_8_400GBASE_CR8, ext,
|
||||
ETHTOOL_LINK_MODE_400000baseKR8_Full_BIT,
|
||||
ETHTOOL_LINK_MODE_400000baseSR8_Full_BIT,
|
||||
ETHTOOL_LINK_MODE_400000baseLR8_ER8_FR8_Full_BIT,
|
||||
ETHTOOL_LINK_MODE_400000baseDR8_Full_BIT,
|
||||
ETHTOOL_LINK_MODE_400000baseCR8_Full_BIT);
|
||||
MLX5_BUILD_PTYS2ETHTOOL_CONFIG(MLX5E_100GAUI_1_100GBASE_CR_KR, ext,
|
||||
ETHTOOL_LINK_MODE_100000baseKR_Full_BIT,
|
||||
ETHTOOL_LINK_MODE_100000baseSR_Full_BIT,
|
||||
|
|
|
|||
|
|
@ -319,7 +319,7 @@ int mlx5_eswitch_set_vepa(struct mlx5_eswitch *esw, u8 setting)
|
|||
return -EPERM;
|
||||
|
||||
mutex_lock(&esw->state_lock);
|
||||
if (esw->mode != MLX5_ESWITCH_LEGACY) {
|
||||
if (esw->mode != MLX5_ESWITCH_LEGACY || !mlx5_esw_is_fdb_created(esw)) {
|
||||
err = -EOPNOTSUPP;
|
||||
goto out;
|
||||
}
|
||||
|
|
@ -339,7 +339,7 @@ int mlx5_eswitch_get_vepa(struct mlx5_eswitch *esw, u8 *setting)
|
|||
if (!mlx5_esw_allowed(esw))
|
||||
return -EPERM;
|
||||
|
||||
if (esw->mode != MLX5_ESWITCH_LEGACY)
|
||||
if (esw->mode != MLX5_ESWITCH_LEGACY || !mlx5_esw_is_fdb_created(esw))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
*setting = esw->fdb_table.legacy.vepa_uplink_rule ? 1 : 0;
|
||||
|
|
|
|||
|
|
@ -312,6 +312,25 @@ static int esw_qos_set_group_max_rate(struct mlx5_eswitch *esw,
|
|||
return err;
|
||||
}
|
||||
|
||||
static bool esw_qos_element_type_supported(struct mlx5_core_dev *dev, int type)
|
||||
{
|
||||
switch (type) {
|
||||
case SCHEDULING_CONTEXT_ELEMENT_TYPE_TSAR:
|
||||
return MLX5_CAP_QOS(dev, esw_element_type) &
|
||||
ELEMENT_TYPE_CAP_MASK_TSAR;
|
||||
case SCHEDULING_CONTEXT_ELEMENT_TYPE_VPORT:
|
||||
return MLX5_CAP_QOS(dev, esw_element_type) &
|
||||
ELEMENT_TYPE_CAP_MASK_VPORT;
|
||||
case SCHEDULING_CONTEXT_ELEMENT_TYPE_VPORT_TC:
|
||||
return MLX5_CAP_QOS(dev, esw_element_type) &
|
||||
ELEMENT_TYPE_CAP_MASK_VPORT_TC;
|
||||
case SCHEDULING_CONTEXT_ELEMENT_TYPE_PARA_VPORT_TC:
|
||||
return MLX5_CAP_QOS(dev, esw_element_type) &
|
||||
ELEMENT_TYPE_CAP_MASK_PARA_VPORT_TC;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
static int esw_qos_vport_create_sched_element(struct mlx5_eswitch *esw,
|
||||
struct mlx5_vport *vport,
|
||||
u32 max_rate, u32 bw_share)
|
||||
|
|
@ -323,6 +342,9 @@ static int esw_qos_vport_create_sched_element(struct mlx5_eswitch *esw,
|
|||
void *vport_elem;
|
||||
int err;
|
||||
|
||||
if (!esw_qos_element_type_supported(dev, SCHEDULING_CONTEXT_ELEMENT_TYPE_VPORT))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
parent_tsar_ix = group ? group->tsar_ix : esw->qos.root_tsar_ix;
|
||||
MLX5_SET(scheduling_context, sched_ctx, element_type,
|
||||
SCHEDULING_CONTEXT_ELEMENT_TYPE_VPORT);
|
||||
|
|
@ -421,6 +443,7 @@ __esw_qos_create_rate_group(struct mlx5_eswitch *esw, struct netlink_ext_ack *ex
|
|||
{
|
||||
u32 tsar_ctx[MLX5_ST_SZ_DW(scheduling_context)] = {};
|
||||
struct mlx5_esw_rate_group *group;
|
||||
__be32 *attr;
|
||||
u32 divider;
|
||||
int err;
|
||||
|
||||
|
|
@ -428,6 +451,12 @@ __esw_qos_create_rate_group(struct mlx5_eswitch *esw, struct netlink_ext_ack *ex
|
|||
if (!group)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
MLX5_SET(scheduling_context, tsar_ctx, element_type,
|
||||
SCHEDULING_CONTEXT_ELEMENT_TYPE_TSAR);
|
||||
|
||||
attr = MLX5_ADDR_OF(scheduling_context, tsar_ctx, element_attributes);
|
||||
*attr = cpu_to_be32(TSAR_ELEMENT_TSAR_TYPE_DWRR << 16);
|
||||
|
||||
MLX5_SET(scheduling_context, tsar_ctx, parent_element_id,
|
||||
esw->qos.root_tsar_ix);
|
||||
err = mlx5_create_scheduling_element_cmd(esw->dev,
|
||||
|
|
@ -526,25 +555,6 @@ static int esw_qos_destroy_rate_group(struct mlx5_eswitch *esw,
|
|||
return err;
|
||||
}
|
||||
|
||||
static bool esw_qos_element_type_supported(struct mlx5_core_dev *dev, int type)
|
||||
{
|
||||
switch (type) {
|
||||
case SCHEDULING_CONTEXT_ELEMENT_TYPE_TSAR:
|
||||
return MLX5_CAP_QOS(dev, esw_element_type) &
|
||||
ELEMENT_TYPE_CAP_MASK_TSAR;
|
||||
case SCHEDULING_CONTEXT_ELEMENT_TYPE_VPORT:
|
||||
return MLX5_CAP_QOS(dev, esw_element_type) &
|
||||
ELEMENT_TYPE_CAP_MASK_VPORT;
|
||||
case SCHEDULING_CONTEXT_ELEMENT_TYPE_VPORT_TC:
|
||||
return MLX5_CAP_QOS(dev, esw_element_type) &
|
||||
ELEMENT_TYPE_CAP_MASK_VPORT_TC;
|
||||
case SCHEDULING_CONTEXT_ELEMENT_TYPE_PARA_VPORT_TC:
|
||||
return MLX5_CAP_QOS(dev, esw_element_type) &
|
||||
ELEMENT_TYPE_CAP_MASK_PARA_VPORT_TC;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
static int esw_qos_create(struct mlx5_eswitch *esw, struct netlink_ext_ack *extack)
|
||||
{
|
||||
u32 tsar_ctx[MLX5_ST_SZ_DW(scheduling_context)] = {};
|
||||
|
|
@ -555,7 +565,8 @@ static int esw_qos_create(struct mlx5_eswitch *esw, struct netlink_ext_ack *exta
|
|||
if (!MLX5_CAP_GEN(dev, qos) || !MLX5_CAP_QOS(dev, esw_scheduling))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (!esw_qos_element_type_supported(dev, SCHEDULING_CONTEXT_ELEMENT_TYPE_TSAR))
|
||||
if (!esw_qos_element_type_supported(dev, SCHEDULING_CONTEXT_ELEMENT_TYPE_TSAR) ||
|
||||
!(MLX5_CAP_QOS(dev, esw_tsar_type) & TSAR_TYPE_CAP_MASK_DWRR))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
MLX5_SET(scheduling_context, tsar_ctx, element_type,
|
||||
|
|
|
|||
|
|
@ -2217,6 +2217,7 @@ static const struct pci_device_id mlx5_core_pci_table[] = {
|
|||
{ PCI_VDEVICE(MELLANOX, 0x101f) }, /* ConnectX-6 LX */
|
||||
{ PCI_VDEVICE(MELLANOX, 0x1021) }, /* ConnectX-7 */
|
||||
{ PCI_VDEVICE(MELLANOX, 0x1023) }, /* ConnectX-8 */
|
||||
{ PCI_VDEVICE(MELLANOX, 0x1025) }, /* ConnectX-9 */
|
||||
{ PCI_VDEVICE(MELLANOX, 0xa2d2) }, /* BlueField integrated ConnectX-5 network controller */
|
||||
{ PCI_VDEVICE(MELLANOX, 0xa2d3), MLX5_PCI_DEV_IS_VF}, /* BlueField integrated ConnectX-5 network controller VF */
|
||||
{ PCI_VDEVICE(MELLANOX, 0xa2d6) }, /* BlueField-2 integrated ConnectX-6 Dx network controller */
|
||||
|
|
|
|||
|
|
@ -28,6 +28,9 @@ int mlx5_qos_create_leaf_node(struct mlx5_core_dev *mdev, u32 parent_id,
|
|||
{
|
||||
u32 sched_ctx[MLX5_ST_SZ_DW(scheduling_context)] = {0};
|
||||
|
||||
if (!(MLX5_CAP_QOS(mdev, nic_element_type) & ELEMENT_TYPE_CAP_MASK_QUEUE_GROUP))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
MLX5_SET(scheduling_context, sched_ctx, parent_element_id, parent_id);
|
||||
MLX5_SET(scheduling_context, sched_ctx, element_type,
|
||||
SCHEDULING_CONTEXT_ELEMENT_TYPE_QUEUE_GROUP);
|
||||
|
|
@ -44,6 +47,10 @@ int mlx5_qos_create_inner_node(struct mlx5_core_dev *mdev, u32 parent_id,
|
|||
u32 sched_ctx[MLX5_ST_SZ_DW(scheduling_context)] = {0};
|
||||
void *attr;
|
||||
|
||||
if (!(MLX5_CAP_QOS(mdev, nic_element_type) & ELEMENT_TYPE_CAP_MASK_TSAR) ||
|
||||
!(MLX5_CAP_QOS(mdev, nic_tsar_type) & TSAR_TYPE_CAP_MASK_DWRR))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
MLX5_SET(scheduling_context, sched_ctx, parent_element_id, parent_id);
|
||||
MLX5_SET(scheduling_context, sched_ctx, element_type,
|
||||
SCHEDULING_CONTEXT_ELEMENT_TYPE_TSAR);
|
||||
|
|
|
|||
|
|
@ -1027,7 +1027,8 @@ struct mlx5_ifc_qos_cap_bits {
|
|||
|
||||
u8 max_tsar_bw_share[0x20];
|
||||
|
||||
u8 reserved_at_100[0x20];
|
||||
u8 nic_element_type[0x10];
|
||||
u8 nic_tsar_type[0x10];
|
||||
|
||||
u8 reserved_at_120[0x3];
|
||||
u8 log_meter_aso_granularity[0x5];
|
||||
|
|
@ -3966,6 +3967,7 @@ enum {
|
|||
ELEMENT_TYPE_CAP_MASK_VPORT = 1 << 1,
|
||||
ELEMENT_TYPE_CAP_MASK_VPORT_TC = 1 << 2,
|
||||
ELEMENT_TYPE_CAP_MASK_PARA_VPORT_TC = 1 << 3,
|
||||
ELEMENT_TYPE_CAP_MASK_QUEUE_GROUP = 1 << 4,
|
||||
};
|
||||
|
||||
struct mlx5_ifc_scheduling_context_bits {
|
||||
|
|
@ -4675,6 +4677,12 @@ enum {
|
|||
TSAR_ELEMENT_TSAR_TYPE_ETS = 0x2,
|
||||
};
|
||||
|
||||
enum {
|
||||
TSAR_TYPE_CAP_MASK_DWRR = 1 << 0,
|
||||
TSAR_TYPE_CAP_MASK_ROUND_ROBIN = 1 << 1,
|
||||
TSAR_TYPE_CAP_MASK_ETS = 1 << 2,
|
||||
};
|
||||
|
||||
struct mlx5_ifc_tsar_element_bits {
|
||||
u8 reserved_at_0[0x8];
|
||||
u8 tsar_type[0x8];
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user