Commit f16e7f64 authored by Jiri Pirko's avatar Jiri Pirko Committed by David S. Miller

mlxsw: spectrum_acl: Ask device for rule stats only if counter was created

Set a flag in case rule counter was created. Only query the device for
stats of a rule, which has the valid counter assigned.
Signed-off-by: default avatarJiri Pirko <jiri@mellanox.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 48855479
...@@ -641,7 +641,8 @@ struct mlxsw_sp_acl_rule_info { ...@@ -641,7 +641,8 @@ struct mlxsw_sp_acl_rule_info {
struct mlxsw_afa_block *act_block; struct mlxsw_afa_block *act_block;
u8 action_created:1, u8 action_created:1,
ingress_bind_blocker:1, ingress_bind_blocker:1,
egress_bind_blocker:1; egress_bind_blocker:1,
counter_valid:1;
unsigned int counter_index; unsigned int counter_index;
}; };
......
...@@ -642,8 +642,14 @@ int mlxsw_sp_acl_rulei_act_count(struct mlxsw_sp *mlxsw_sp, ...@@ -642,8 +642,14 @@ int mlxsw_sp_acl_rulei_act_count(struct mlxsw_sp *mlxsw_sp,
struct mlxsw_sp_acl_rule_info *rulei, struct mlxsw_sp_acl_rule_info *rulei,
struct netlink_ext_ack *extack) struct netlink_ext_ack *extack)
{ {
return mlxsw_afa_block_append_counter(rulei->act_block, int err;
&rulei->counter_index, extack);
err = mlxsw_afa_block_append_counter(rulei->act_block,
&rulei->counter_index, extack);
if (err)
return err;
rulei->counter_valid = true;
return 0;
} }
int mlxsw_sp_acl_rulei_act_fid_set(struct mlxsw_sp *mlxsw_sp, int mlxsw_sp_acl_rulei_act_fid_set(struct mlxsw_sp *mlxsw_sp,
...@@ -857,16 +863,18 @@ int mlxsw_sp_acl_rule_get_stats(struct mlxsw_sp *mlxsw_sp, ...@@ -857,16 +863,18 @@ int mlxsw_sp_acl_rule_get_stats(struct mlxsw_sp *mlxsw_sp,
{ {
struct mlxsw_sp_acl_rule_info *rulei; struct mlxsw_sp_acl_rule_info *rulei;
u64 current_packets; u64 current_packets = 0;
u64 current_bytes; u64 current_bytes = 0;
int err; int err;
rulei = mlxsw_sp_acl_rule_rulei(rule); rulei = mlxsw_sp_acl_rule_rulei(rule);
err = mlxsw_sp_flow_counter_get(mlxsw_sp, rulei->counter_index, if (rulei->counter_valid) {
&current_packets, &current_bytes); err = mlxsw_sp_flow_counter_get(mlxsw_sp, rulei->counter_index,
if (err) &current_packets,
return err; &current_bytes);
if (err)
return err;
}
*packets = current_packets - rule->last_packets; *packets = current_packets - rule->last_packets;
*bytes = current_bytes - rule->last_bytes; *bytes = current_bytes - rule->last_bytes;
*last_use = rule->last_used; *last_use = rule->last_used;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment