Merge branch 'mlxsw-Misc-updates'
Ido Schimmel says: ==================== mlxsw: Misc updates This patchset contains miscellaneous patches we gathered in our queue. Some of them are dependencies of larger patchsets that I will submit later this cycle. Patches #1-#3 perform small non-functional changes in mlxsw. Patch #4 adds more extended ack messages in mlxsw. Patch #5 adds devlink parameters documentation for mlxsw. To be extended with more parameters this cycle. Patches #6-#7 perform small changes in forwarding selftests infrastructure. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Коммит
8d93755291
|
@ -0,0 +1,2 @@
|
|||
fw_load_policy [DEVICE, GENERIC]
|
||||
Configuration mode: driverinit
|
|
@ -721,8 +721,7 @@ struct mlxsw_sp_acl_tcam_ops {
|
|||
void *region_priv, void *chunk_priv,
|
||||
void *entry_priv);
|
||||
int (*entry_action_replace)(struct mlxsw_sp *mlxsw_sp,
|
||||
void *region_priv, void *chunk_priv,
|
||||
void *entry_priv,
|
||||
void *region_priv, void *entry_priv,
|
||||
struct mlxsw_sp_acl_rule_info *rulei);
|
||||
int (*entry_activity_get)(struct mlxsw_sp *mlxsw_sp,
|
||||
void *region_priv, void *entry_priv,
|
||||
|
|
|
@ -194,8 +194,7 @@ static void mlxsw_sp1_acl_tcam_entry_del(struct mlxsw_sp *mlxsw_sp,
|
|||
|
||||
static int
|
||||
mlxsw_sp1_acl_tcam_entry_action_replace(struct mlxsw_sp *mlxsw_sp,
|
||||
void *region_priv, void *chunk_priv,
|
||||
void *entry_priv,
|
||||
void *region_priv, void *entry_priv,
|
||||
struct mlxsw_sp_acl_rule_info *rulei)
|
||||
{
|
||||
return -EOPNOTSUPP;
|
||||
|
|
|
@ -212,18 +212,15 @@ static void mlxsw_sp2_acl_tcam_entry_del(struct mlxsw_sp *mlxsw_sp,
|
|||
|
||||
static int
|
||||
mlxsw_sp2_acl_tcam_entry_action_replace(struct mlxsw_sp *mlxsw_sp,
|
||||
void *region_priv, void *chunk_priv,
|
||||
void *entry_priv,
|
||||
void *region_priv, void *entry_priv,
|
||||
struct mlxsw_sp_acl_rule_info *rulei)
|
||||
{
|
||||
struct mlxsw_sp2_acl_tcam_region *region = region_priv;
|
||||
struct mlxsw_sp2_acl_tcam_chunk *chunk = chunk_priv;
|
||||
struct mlxsw_sp2_acl_tcam_entry *entry = entry_priv;
|
||||
|
||||
entry->act_block = rulei->act_block;
|
||||
return mlxsw_sp_acl_atcam_entry_action_replace(mlxsw_sp,
|
||||
®ion->aregion,
|
||||
&chunk->achunk,
|
||||
&entry->aentry, rulei);
|
||||
}
|
||||
|
||||
|
|
|
@ -742,8 +742,7 @@ int mlxsw_sp_acl_rule_action_replace(struct mlxsw_sp *mlxsw_sp,
|
|||
rulei = mlxsw_sp_acl_rule_rulei(rule);
|
||||
rulei->act_block = afa_block;
|
||||
|
||||
return ops->rule_action_replace(mlxsw_sp, ruleset->priv, rule->priv,
|
||||
rule->rulei);
|
||||
return ops->rule_action_replace(mlxsw_sp, rule->priv, rule->rulei);
|
||||
}
|
||||
|
||||
struct mlxsw_sp_acl_rule *
|
||||
|
@ -806,7 +805,7 @@ static void mlxsw_sp_acl_rule_activity_work_schedule(struct mlxsw_sp_acl *acl)
|
|||
msecs_to_jiffies(interval));
|
||||
}
|
||||
|
||||
static void mlxsw_sp_acl_rul_activity_update_work(struct work_struct *work)
|
||||
static void mlxsw_sp_acl_rule_activity_update_work(struct work_struct *work)
|
||||
{
|
||||
struct mlxsw_sp_acl *acl = container_of(work, struct mlxsw_sp_acl,
|
||||
rule_activity_update.dw.work);
|
||||
|
@ -885,7 +884,7 @@ int mlxsw_sp_acl_init(struct mlxsw_sp *mlxsw_sp)
|
|||
|
||||
/* Create the delayed work for the rule activity_update */
|
||||
INIT_DELAYED_WORK(&acl->rule_activity_update.dw,
|
||||
mlxsw_sp_acl_rul_activity_update_work);
|
||||
mlxsw_sp_acl_rule_activity_update_work);
|
||||
acl->rule_activity_update.interval = MLXSW_SP_ACL_RULE_ACTIVITY_UPDATE_PERIOD_MS;
|
||||
mlxsw_core_schedule_dw(&acl->rule_activity_update.dw, 0);
|
||||
return 0;
|
||||
|
|
|
@ -603,7 +603,6 @@ void mlxsw_sp_acl_atcam_entry_del(struct mlxsw_sp *mlxsw_sp,
|
|||
int
|
||||
mlxsw_sp_acl_atcam_entry_action_replace(struct mlxsw_sp *mlxsw_sp,
|
||||
struct mlxsw_sp_acl_atcam_region *aregion,
|
||||
struct mlxsw_sp_acl_atcam_chunk *achunk,
|
||||
struct mlxsw_sp_acl_atcam_entry *aentry,
|
||||
struct mlxsw_sp_acl_rule_info *rulei)
|
||||
{
|
||||
|
@ -612,7 +611,6 @@ mlxsw_sp_acl_atcam_entry_action_replace(struct mlxsw_sp *mlxsw_sp,
|
|||
if (mlxsw_sp_acl_atcam_is_centry(aentry))
|
||||
err = mlxsw_sp_acl_ctcam_entry_action_replace(mlxsw_sp,
|
||||
&aregion->cregion,
|
||||
&achunk->cchunk,
|
||||
&aentry->centry,
|
||||
rulei);
|
||||
else
|
||||
|
|
|
@ -223,7 +223,6 @@ void mlxsw_sp_acl_ctcam_entry_del(struct mlxsw_sp *mlxsw_sp,
|
|||
|
||||
int mlxsw_sp_acl_ctcam_entry_action_replace(struct mlxsw_sp *mlxsw_sp,
|
||||
struct mlxsw_sp_acl_ctcam_region *cregion,
|
||||
struct mlxsw_sp_acl_ctcam_chunk *cchunk,
|
||||
struct mlxsw_sp_acl_ctcam_entry *centry,
|
||||
struct mlxsw_sp_acl_rule_info *rulei)
|
||||
{
|
||||
|
|
|
@ -781,7 +781,6 @@ static void mlxsw_sp_acl_tcam_entry_del(struct mlxsw_sp *mlxsw_sp,
|
|||
|
||||
static int
|
||||
mlxsw_sp_acl_tcam_entry_action_replace(struct mlxsw_sp *mlxsw_sp,
|
||||
struct mlxsw_sp_acl_tcam_group *group,
|
||||
struct mlxsw_sp_acl_tcam_entry *entry,
|
||||
struct mlxsw_sp_acl_rule_info *rulei)
|
||||
{
|
||||
|
@ -789,7 +788,7 @@ mlxsw_sp_acl_tcam_entry_action_replace(struct mlxsw_sp *mlxsw_sp,
|
|||
struct mlxsw_sp_acl_tcam_chunk *chunk = entry->chunk;
|
||||
struct mlxsw_sp_acl_tcam_region *region = chunk->region;
|
||||
|
||||
return ops->entry_action_replace(mlxsw_sp, region->priv, chunk->priv,
|
||||
return ops->entry_action_replace(mlxsw_sp, region->priv,
|
||||
entry->priv, rulei);
|
||||
}
|
||||
|
||||
|
@ -863,15 +862,6 @@ struct mlxsw_sp_acl_tcam_flower_rule {
|
|||
struct mlxsw_sp_acl_tcam_entry entry;
|
||||
};
|
||||
|
||||
struct mlxsw_sp_acl_tcam_mr_ruleset {
|
||||
struct mlxsw_sp_acl_tcam_chunk *chunk;
|
||||
struct mlxsw_sp_acl_tcam_group group;
|
||||
};
|
||||
|
||||
struct mlxsw_sp_acl_tcam_mr_rule {
|
||||
struct mlxsw_sp_acl_tcam_entry entry;
|
||||
};
|
||||
|
||||
static int
|
||||
mlxsw_sp_acl_tcam_flower_ruleset_add(struct mlxsw_sp *mlxsw_sp,
|
||||
struct mlxsw_sp_acl_tcam *tcam,
|
||||
|
@ -955,7 +945,6 @@ mlxsw_sp_acl_tcam_flower_rule_del(struct mlxsw_sp *mlxsw_sp, void *rule_priv)
|
|||
|
||||
static int
|
||||
mlxsw_sp_acl_tcam_flower_rule_action_replace(struct mlxsw_sp *mlxsw_sp,
|
||||
void *ruleset_priv,
|
||||
void *rule_priv,
|
||||
struct mlxsw_sp_acl_rule_info *rulei)
|
||||
{
|
||||
|
@ -986,6 +975,15 @@ static const struct mlxsw_sp_acl_profile_ops mlxsw_sp_acl_tcam_flower_ops = {
|
|||
.rule_activity_get = mlxsw_sp_acl_tcam_flower_rule_activity_get,
|
||||
};
|
||||
|
||||
struct mlxsw_sp_acl_tcam_mr_ruleset {
|
||||
struct mlxsw_sp_acl_tcam_chunk *chunk;
|
||||
struct mlxsw_sp_acl_tcam_group group;
|
||||
};
|
||||
|
||||
struct mlxsw_sp_acl_tcam_mr_rule {
|
||||
struct mlxsw_sp_acl_tcam_entry entry;
|
||||
};
|
||||
|
||||
static int
|
||||
mlxsw_sp_acl_tcam_mr_ruleset_add(struct mlxsw_sp *mlxsw_sp,
|
||||
struct mlxsw_sp_acl_tcam *tcam,
|
||||
|
@ -1084,14 +1082,13 @@ mlxsw_sp_acl_tcam_mr_rule_del(struct mlxsw_sp *mlxsw_sp, void *rule_priv)
|
|||
|
||||
static int
|
||||
mlxsw_sp_acl_tcam_mr_rule_action_replace(struct mlxsw_sp *mlxsw_sp,
|
||||
void *ruleset_priv, void *rule_priv,
|
||||
void *rule_priv,
|
||||
struct mlxsw_sp_acl_rule_info *rulei)
|
||||
{
|
||||
struct mlxsw_sp_acl_tcam_mr_ruleset *ruleset = ruleset_priv;
|
||||
struct mlxsw_sp_acl_tcam_mr_rule *rule = rule_priv;
|
||||
|
||||
return mlxsw_sp_acl_tcam_entry_action_replace(mlxsw_sp, &ruleset->group,
|
||||
&rule->entry, rulei);
|
||||
return mlxsw_sp_acl_tcam_entry_action_replace(mlxsw_sp, &rule->entry,
|
||||
rulei);
|
||||
}
|
||||
|
||||
static int
|
||||
|
|
|
@ -48,8 +48,7 @@ struct mlxsw_sp_acl_profile_ops {
|
|||
void *ruleset_priv, void *rule_priv,
|
||||
struct mlxsw_sp_acl_rule_info *rulei);
|
||||
void (*rule_del)(struct mlxsw_sp *mlxsw_sp, void *rule_priv);
|
||||
int (*rule_action_replace)(struct mlxsw_sp *mlxsw_sp,
|
||||
void *ruleset_priv, void *rule_priv,
|
||||
int (*rule_action_replace)(struct mlxsw_sp *mlxsw_sp, void *rule_priv,
|
||||
struct mlxsw_sp_acl_rule_info *rulei);
|
||||
int (*rule_activity_get)(struct mlxsw_sp *mlxsw_sp, void *rule_priv,
|
||||
bool *activity);
|
||||
|
@ -126,7 +125,6 @@ void mlxsw_sp_acl_ctcam_entry_del(struct mlxsw_sp *mlxsw_sp,
|
|||
struct mlxsw_sp_acl_ctcam_entry *centry);
|
||||
int mlxsw_sp_acl_ctcam_entry_action_replace(struct mlxsw_sp *mlxsw_sp,
|
||||
struct mlxsw_sp_acl_ctcam_region *cregion,
|
||||
struct mlxsw_sp_acl_ctcam_chunk *cchunk,
|
||||
struct mlxsw_sp_acl_ctcam_entry *centry,
|
||||
struct mlxsw_sp_acl_rule_info *rulei);
|
||||
static inline unsigned int
|
||||
|
@ -224,7 +222,6 @@ void mlxsw_sp_acl_atcam_entry_del(struct mlxsw_sp *mlxsw_sp,
|
|||
struct mlxsw_sp_acl_atcam_entry *aentry);
|
||||
int mlxsw_sp_acl_atcam_entry_action_replace(struct mlxsw_sp *mlxsw_sp,
|
||||
struct mlxsw_sp_acl_atcam_region *aregion,
|
||||
struct mlxsw_sp_acl_atcam_chunk *achunk,
|
||||
struct mlxsw_sp_acl_atcam_entry *aentry,
|
||||
struct mlxsw_sp_acl_rule_info *rulei);
|
||||
int mlxsw_sp_acl_atcam_init(struct mlxsw_sp *mlxsw_sp,
|
||||
|
|
|
@ -2027,6 +2027,7 @@ mlxsw_sp_bridge_8021q_vxlan_join(struct mlxsw_sp_bridge_device *bridge_device,
|
|||
return 0;
|
||||
|
||||
if (mlxsw_sp_fid_vni_is_set(fid)) {
|
||||
NL_SET_ERR_MSG_MOD(extack, "VNI is already set on FID");
|
||||
err = -EINVAL;
|
||||
goto err_vni_exists;
|
||||
}
|
||||
|
@ -2213,10 +2214,13 @@ mlxsw_sp_bridge_8021d_vxlan_join(struct mlxsw_sp_bridge_device *bridge_device,
|
|||
int err;
|
||||
|
||||
fid = mlxsw_sp_fid_8021d_lookup(mlxsw_sp, bridge_device->dev->ifindex);
|
||||
if (!fid)
|
||||
if (!fid) {
|
||||
NL_SET_ERR_MSG_MOD(extack, "Did not find a corresponding FID");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (mlxsw_sp_fid_vni_is_set(fid)) {
|
||||
NL_SET_ERR_MSG_MOD(extack, "VNI is already set on FID");
|
||||
err = -EINVAL;
|
||||
goto err_vni_exists;
|
||||
}
|
||||
|
@ -3231,8 +3235,10 @@ mlxsw_sp_switchdev_vxlan_vlan_add(struct mlxsw_sp *mlxsw_sp,
|
|||
* the lookup function to return 'vxlan_dev'
|
||||
*/
|
||||
if (flag_untagged && flag_pvid &&
|
||||
mlxsw_sp_bridge_8021q_vxlan_dev_find(bridge_device->dev, vid))
|
||||
mlxsw_sp_bridge_8021q_vxlan_dev_find(bridge_device->dev, vid)) {
|
||||
NL_SET_ERR_MSG_MOD(extack, "VLAN already mapped to a different VNI");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (!netif_running(vxlan_dev))
|
||||
return 0;
|
||||
|
|
|
@ -32,7 +32,7 @@ DEVLINK_VIDDID=$(lspci -s $(echo $DEVLINK_DEV | cut -d"/" -f2) \
|
|||
##############################################################################
|
||||
# Sanity checks
|
||||
|
||||
devlink -j resource show "$DEVLINK_DEV" &> /dev/null
|
||||
devlink help 2>&1 | grep resource &> /dev/null
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "SKIP: iproute2 too old, missing devlink resource support"
|
||||
exit 1
|
||||
|
|
|
@ -211,7 +211,7 @@ log_test()
|
|||
return 1
|
||||
fi
|
||||
|
||||
printf "TEST: %-60s [PASS]\n" "$test_name $opt_str"
|
||||
printf "TEST: %-60s [ OK ]\n" "$test_name $opt_str"
|
||||
return 0
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче