mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-02-11 00:35:40 +07:00
Merge branch 'nfp-type'
Jakub Kicinski says: ==================== net: rename flow_action stats and set NFP type Jiri, I hope this is okay with you, I just dropped the "type" from the helper and value names, and now things should be able to fit on a line, within 80 characters. Second patch makes the NFP able to offload DELAYED stats, which is the type it supports. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
24ee86511b
@ -300,7 +300,7 @@ static int bnxt_tc_parse_actions(struct bnxt *bp,
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (!flow_action_basic_hw_stats_types_check(flow_action, extack))
|
||||
if (!flow_action_basic_hw_stats_check(flow_action, extack))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
flow_action_for_each(i, act, flow_action) {
|
||||
|
@ -553,7 +553,7 @@ int cxgb4_validate_flow_actions(struct net_device *dev,
|
||||
bool act_vlan = false;
|
||||
int i;
|
||||
|
||||
if (!flow_action_basic_hw_stats_types_check(actions, extack))
|
||||
if (!flow_action_basic_hw_stats_check(actions, extack))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
flow_action_for_each(i, act, actions) {
|
||||
|
@ -1082,7 +1082,7 @@ static int mvpp2_port_c2_tcam_rule_add(struct mvpp2_port *port,
|
||||
u8 qh, ql, pmap;
|
||||
int index, ctx;
|
||||
|
||||
if (!flow_action_basic_hw_stats_types_check(&rule->flow->action, NULL))
|
||||
if (!flow_action_basic_hw_stats_check(&rule->flow->action, NULL))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
memset(&c2, 0, sizeof(c2));
|
||||
@ -1308,7 +1308,7 @@ static int mvpp2_cls_rfs_parse_rule(struct mvpp2_rfs_rule *rule)
|
||||
struct flow_rule *flow = rule->flow;
|
||||
struct flow_action_entry *act;
|
||||
|
||||
if (!flow_action_basic_hw_stats_types_check(&rule->flow->action, NULL))
|
||||
if (!flow_action_basic_hw_stats_check(&rule->flow->action, NULL))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
act = &flow->action.entries[0];
|
||||
|
@ -3180,8 +3180,8 @@ static int parse_tc_nic_actions(struct mlx5e_priv *priv,
|
||||
if (!flow_action_has_entries(flow_action))
|
||||
return -EINVAL;
|
||||
|
||||
if (!flow_action_hw_stats_types_check(flow_action, extack,
|
||||
FLOW_ACTION_HW_STATS_TYPE_DELAYED_BIT))
|
||||
if (!flow_action_hw_stats_check(flow_action, extack,
|
||||
FLOW_ACTION_HW_STATS_DELAYED_BIT))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
attr->flow_tag = MLX5_FS_DEFAULT_FLOW_TAG;
|
||||
@ -3675,8 +3675,8 @@ static int parse_tc_fdb_actions(struct mlx5e_priv *priv,
|
||||
if (!flow_action_has_entries(flow_action))
|
||||
return -EINVAL;
|
||||
|
||||
if (!flow_action_hw_stats_types_check(flow_action, extack,
|
||||
FLOW_ACTION_HW_STATS_TYPE_DELAYED_BIT))
|
||||
if (!flow_action_hw_stats_check(flow_action, extack,
|
||||
FLOW_ACTION_HW_STATS_DELAYED_BIT))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
flow_action_for_each(i, act, flow_action) {
|
||||
@ -4510,7 +4510,7 @@ static int scan_tc_matchall_fdb_actions(struct mlx5e_priv *priv,
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
if (!flow_action_basic_hw_stats_types_check(flow_action, extack))
|
||||
if (!flow_action_basic_hw_stats_check(flow_action, extack))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
flow_action_for_each(i, act, flow_action) {
|
||||
|
@ -26,17 +26,17 @@ static int mlxsw_sp_flower_parse_actions(struct mlxsw_sp *mlxsw_sp,
|
||||
|
||||
if (!flow_action_has_entries(flow_action))
|
||||
return 0;
|
||||
if (!flow_action_mixed_hw_stats_types_check(flow_action, extack))
|
||||
if (!flow_action_mixed_hw_stats_check(flow_action, extack))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
act = flow_action_first_entry_get(flow_action);
|
||||
if (act->hw_stats_type == FLOW_ACTION_HW_STATS_TYPE_ANY ||
|
||||
act->hw_stats_type == FLOW_ACTION_HW_STATS_TYPE_IMMEDIATE) {
|
||||
if (act->hw_stats_type == FLOW_ACTION_HW_STATS_ANY ||
|
||||
act->hw_stats_type == FLOW_ACTION_HW_STATS_IMMEDIATE) {
|
||||
/* Count action is inserted first */
|
||||
err = mlxsw_sp_acl_rulei_act_count(mlxsw_sp, rulei, extack);
|
||||
if (err)
|
||||
return err;
|
||||
} else if (act->hw_stats_type != FLOW_ACTION_HW_STATS_TYPE_DISABLED) {
|
||||
} else if (act->hw_stats_type != FLOW_ACTION_HW_STATS_DISABLED) {
|
||||
NL_SET_ERR_MSG_MOD(extack, "Unsupported action HW stats type");
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
@ -17,8 +17,8 @@ static int ocelot_flower_parse_action(struct flow_cls_offload *f,
|
||||
if (!flow_offload_has_one_action(&f->rule->action))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (!flow_action_basic_hw_stats_types_check(&f->rule->action,
|
||||
f->common.extack))
|
||||
if (!flow_action_basic_hw_stats_check(&f->rule->action,
|
||||
f->common.extack))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
flow_action_for_each(i, a, &f->rule->action) {
|
||||
|
@ -1207,8 +1207,8 @@ int nfp_flower_compile_action(struct nfp_app *app,
|
||||
bool pkt_host = false;
|
||||
u32 csum_updated = 0;
|
||||
|
||||
if (!flow_action_basic_hw_stats_types_check(&flow->rule->action,
|
||||
extack))
|
||||
if (!flow_action_hw_stats_check(&flow->rule->action, extack,
|
||||
FLOW_ACTION_HW_STATS_DELAYED_BIT))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
memset(nfp_flow->action_data, 0, NFP_FL_MAX_A_SIZ);
|
||||
|
@ -1757,7 +1757,7 @@ static int qede_parse_actions(struct qede_dev *edev,
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (!flow_action_basic_hw_stats_types_check(flow_action, extack))
|
||||
if (!flow_action_basic_hw_stats_check(flow_action, extack))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
flow_action_for_each(i, act, flow_action) {
|
||||
|
@ -1387,7 +1387,7 @@ static int __stmmac_test_l3filt(struct stmmac_priv *priv, u32 dst, u32 src,
|
||||
cls->rule = rule;
|
||||
|
||||
rule->action.entries[0].id = FLOW_ACTION_DROP;
|
||||
rule->action.entries[0].hw_stats_type = FLOW_ACTION_HW_STATS_TYPE_ANY;
|
||||
rule->action.entries[0].hw_stats_type = FLOW_ACTION_HW_STATS_ANY;
|
||||
rule->action.num_entries = 1;
|
||||
|
||||
attr.dst = priv->dev->dev_addr;
|
||||
@ -1516,7 +1516,7 @@ static int __stmmac_test_l4filt(struct stmmac_priv *priv, u32 dst, u32 src,
|
||||
cls->rule = rule;
|
||||
|
||||
rule->action.entries[0].id = FLOW_ACTION_DROP;
|
||||
rule->action.entries[0].hw_stats_type = FLOW_ACTION_HW_STATS_TYPE_ANY;
|
||||
rule->action.entries[0].hw_stats_type = FLOW_ACTION_HW_STATS_ANY;
|
||||
rule->action.num_entries = 1;
|
||||
|
||||
attr.dst = priv->dev->dev_addr;
|
||||
|
@ -376,7 +376,7 @@ static int tc_parse_flow_actions(struct stmmac_priv *priv,
|
||||
if (!flow_action_has_entries(action))
|
||||
return -EINVAL;
|
||||
|
||||
if (!flow_action_basic_hw_stats_types_check(action, extack))
|
||||
if (!flow_action_basic_hw_stats_check(action, extack))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
flow_action_for_each(i, act, action) {
|
||||
|
@ -163,19 +163,17 @@ enum flow_action_mangle_base {
|
||||
};
|
||||
|
||||
enum flow_action_hw_stats_type_bit {
|
||||
FLOW_ACTION_HW_STATS_TYPE_IMMEDIATE_BIT,
|
||||
FLOW_ACTION_HW_STATS_TYPE_DELAYED_BIT,
|
||||
FLOW_ACTION_HW_STATS_IMMEDIATE_BIT,
|
||||
FLOW_ACTION_HW_STATS_DELAYED_BIT,
|
||||
};
|
||||
|
||||
enum flow_action_hw_stats_type {
|
||||
FLOW_ACTION_HW_STATS_TYPE_DISABLED = 0,
|
||||
FLOW_ACTION_HW_STATS_TYPE_IMMEDIATE =
|
||||
BIT(FLOW_ACTION_HW_STATS_TYPE_IMMEDIATE_BIT),
|
||||
FLOW_ACTION_HW_STATS_TYPE_DELAYED =
|
||||
BIT(FLOW_ACTION_HW_STATS_TYPE_DELAYED_BIT),
|
||||
FLOW_ACTION_HW_STATS_TYPE_ANY =
|
||||
FLOW_ACTION_HW_STATS_TYPE_IMMEDIATE |
|
||||
FLOW_ACTION_HW_STATS_TYPE_DELAYED,
|
||||
FLOW_ACTION_HW_STATS_DISABLED = 0,
|
||||
FLOW_ACTION_HW_STATS_IMMEDIATE =
|
||||
BIT(FLOW_ACTION_HW_STATS_IMMEDIATE_BIT),
|
||||
FLOW_ACTION_HW_STATS_DELAYED = BIT(FLOW_ACTION_HW_STATS_DELAYED_BIT),
|
||||
FLOW_ACTION_HW_STATS_ANY = FLOW_ACTION_HW_STATS_IMMEDIATE |
|
||||
FLOW_ACTION_HW_STATS_DELAYED,
|
||||
};
|
||||
|
||||
typedef void (*action_destr)(void *priv);
|
||||
@ -285,8 +283,8 @@ static inline bool flow_offload_has_one_action(const struct flow_action *action)
|
||||
__act = &(__actions)->entries[++__i])
|
||||
|
||||
static inline bool
|
||||
flow_action_mixed_hw_stats_types_check(const struct flow_action *action,
|
||||
struct netlink_ext_ack *extack)
|
||||
flow_action_mixed_hw_stats_check(const struct flow_action *action,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
const struct flow_action_entry *action_entry;
|
||||
u8 uninitialized_var(last_hw_stats_type);
|
||||
@ -313,20 +311,20 @@ flow_action_first_entry_get(const struct flow_action *action)
|
||||
}
|
||||
|
||||
static inline bool
|
||||
__flow_action_hw_stats_types_check(const struct flow_action *action,
|
||||
struct netlink_ext_ack *extack,
|
||||
bool check_allow_bit,
|
||||
enum flow_action_hw_stats_type_bit allow_bit)
|
||||
__flow_action_hw_stats_check(const struct flow_action *action,
|
||||
struct netlink_ext_ack *extack,
|
||||
bool check_allow_bit,
|
||||
enum flow_action_hw_stats_type_bit allow_bit)
|
||||
{
|
||||
const struct flow_action_entry *action_entry;
|
||||
|
||||
if (!flow_action_has_entries(action))
|
||||
return true;
|
||||
if (!flow_action_mixed_hw_stats_types_check(action, extack))
|
||||
if (!flow_action_mixed_hw_stats_check(action, extack))
|
||||
return false;
|
||||
action_entry = flow_action_first_entry_get(action);
|
||||
if (!check_allow_bit &&
|
||||
action_entry->hw_stats_type != FLOW_ACTION_HW_STATS_TYPE_ANY) {
|
||||
action_entry->hw_stats_type != FLOW_ACTION_HW_STATS_ANY) {
|
||||
NL_SET_ERR_MSG_MOD(extack, "Driver supports only default HW stats type \"any\"");
|
||||
return false;
|
||||
} else if (check_allow_bit &&
|
||||
@ -338,19 +336,18 @@ __flow_action_hw_stats_types_check(const struct flow_action *action,
|
||||
}
|
||||
|
||||
static inline bool
|
||||
flow_action_hw_stats_types_check(const struct flow_action *action,
|
||||
struct netlink_ext_ack *extack,
|
||||
enum flow_action_hw_stats_type_bit allow_bit)
|
||||
flow_action_hw_stats_check(const struct flow_action *action,
|
||||
struct netlink_ext_ack *extack,
|
||||
enum flow_action_hw_stats_type_bit allow_bit)
|
||||
{
|
||||
return __flow_action_hw_stats_types_check(action, extack,
|
||||
true, allow_bit);
|
||||
return __flow_action_hw_stats_check(action, extack, true, allow_bit);
|
||||
}
|
||||
|
||||
static inline bool
|
||||
flow_action_basic_hw_stats_types_check(const struct flow_action *action,
|
||||
struct netlink_ext_ack *extack)
|
||||
flow_action_basic_hw_stats_check(const struct flow_action *action,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
return __flow_action_hw_stats_types_check(action, extack, false, 0);
|
||||
return __flow_action_hw_stats_check(action, extack, false, 0);
|
||||
}
|
||||
|
||||
struct flow_rule {
|
||||
|
@ -861,8 +861,8 @@ static int dsa_slave_add_cls_matchall(struct net_device *dev,
|
||||
if (!flow_offload_has_one_action(&cls->rule->action))
|
||||
return err;
|
||||
|
||||
if (!flow_action_basic_hw_stats_types_check(&cls->rule->action,
|
||||
cls->common.extack))
|
||||
if (!flow_action_basic_hw_stats_check(&cls->rule->action,
|
||||
cls->common.extack))
|
||||
return err;
|
||||
|
||||
act = &cls->rule->action.entries[0];
|
||||
|
@ -3528,9 +3528,9 @@ int tc_setup_flow_action(struct flow_action *flow_action,
|
||||
struct tc_action *act;
|
||||
int i, j, k, err = 0;
|
||||
|
||||
BUILD_BUG_ON(TCA_ACT_HW_STATS_TYPE_ANY != FLOW_ACTION_HW_STATS_TYPE_ANY);
|
||||
BUILD_BUG_ON(TCA_ACT_HW_STATS_TYPE_IMMEDIATE != FLOW_ACTION_HW_STATS_TYPE_IMMEDIATE);
|
||||
BUILD_BUG_ON(TCA_ACT_HW_STATS_TYPE_DELAYED != FLOW_ACTION_HW_STATS_TYPE_DELAYED);
|
||||
BUILD_BUG_ON(TCA_ACT_HW_STATS_TYPE_ANY != FLOW_ACTION_HW_STATS_ANY);
|
||||
BUILD_BUG_ON(TCA_ACT_HW_STATS_TYPE_IMMEDIATE != FLOW_ACTION_HW_STATS_IMMEDIATE);
|
||||
BUILD_BUG_ON(TCA_ACT_HW_STATS_TYPE_DELAYED != FLOW_ACTION_HW_STATS_DELAYED);
|
||||
|
||||
if (!exts)
|
||||
return 0;
|
||||
|
Loading…
Reference in New Issue
Block a user