Commit ef01adae authored by Pablo Neira Ayuso's avatar Pablo Neira Ayuso Committed by David S. Miller

net: sched: use major priority number as hardware priority

tc transparently maps the software priority number to hardware. Update
it to pass the major priority which is what most drivers expect. Update
drivers too so they do not need to lshift the priority field of the
flow_cls_common_offload object. The stmmac driver is an exception, since
this code assumes the tc software priority is fine, therefore, lshift it
just to be conservative.
Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
Acked-by: default avatarJiri Pirko <jiri@mellanox.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 44ef3a03
...@@ -3167,7 +3167,7 @@ mlx5e_flow_esw_attr_init(struct mlx5_esw_flow_attr *esw_attr, ...@@ -3167,7 +3167,7 @@ mlx5e_flow_esw_attr_init(struct mlx5_esw_flow_attr *esw_attr,
esw_attr->parse_attr = parse_attr; esw_attr->parse_attr = parse_attr;
esw_attr->chain = f->common.chain_index; esw_attr->chain = f->common.chain_index;
esw_attr->prio = TC_H_MAJ(f->common.prio) >> 16; esw_attr->prio = f->common.prio;
esw_attr->in_rep = in_rep; esw_attr->in_rep = in_rep;
esw_attr->in_mdev = in_mdev; esw_attr->in_mdev = in_mdev;
......
...@@ -471,7 +471,7 @@ int mlxsw_sp_acl_rulei_commit(struct mlxsw_sp_acl_rule_info *rulei) ...@@ -471,7 +471,7 @@ int mlxsw_sp_acl_rulei_commit(struct mlxsw_sp_acl_rule_info *rulei)
void mlxsw_sp_acl_rulei_priority(struct mlxsw_sp_acl_rule_info *rulei, void mlxsw_sp_acl_rulei_priority(struct mlxsw_sp_acl_rule_info *rulei,
unsigned int priority) unsigned int priority)
{ {
rulei->priority = priority >> 16; rulei->priority = priority;
} }
void mlxsw_sp_acl_rulei_keymask_u32(struct mlxsw_sp_acl_rule_info *rulei, void mlxsw_sp_acl_rulei_keymask_u32(struct mlxsw_sp_acl_rule_info *rulei,
......
...@@ -13,12 +13,6 @@ struct ocelot_port_block { ...@@ -13,12 +13,6 @@ struct ocelot_port_block {
struct ocelot_port *port; struct ocelot_port *port;
}; };
static u16 get_prio(u32 prio)
{
/* prio starts from 0x1000 while the ids starts from 0 */
return prio >> 16;
}
static int ocelot_flower_parse_action(struct flow_cls_offload *f, static int ocelot_flower_parse_action(struct flow_cls_offload *f,
struct ocelot_ace_rule *rule) struct ocelot_ace_rule *rule)
{ {
...@@ -168,7 +162,7 @@ static int ocelot_flower_parse(struct flow_cls_offload *f, ...@@ -168,7 +162,7 @@ static int ocelot_flower_parse(struct flow_cls_offload *f,
} }
finished_key_parsing: finished_key_parsing:
ocelot_rule->prio = get_prio(f->common.prio); ocelot_rule->prio = f->common.prio;
ocelot_rule->id = f->cookie; ocelot_rule->id = f->cookie;
return ocelot_flower_parse_action(f, ocelot_rule); return ocelot_flower_parse_action(f, ocelot_rule);
} }
...@@ -218,7 +212,7 @@ static int ocelot_flower_destroy(struct flow_cls_offload *f, ...@@ -218,7 +212,7 @@ static int ocelot_flower_destroy(struct flow_cls_offload *f,
struct ocelot_ace_rule rule; struct ocelot_ace_rule rule;
int ret; int ret;
rule.prio = get_prio(f->common.prio); rule.prio = f->common.prio;
rule.port = port_block->port; rule.port = port_block->port;
rule.id = f->cookie; rule.id = f->cookie;
...@@ -236,7 +230,7 @@ static int ocelot_flower_stats_update(struct flow_cls_offload *f, ...@@ -236,7 +230,7 @@ static int ocelot_flower_stats_update(struct flow_cls_offload *f,
struct ocelot_ace_rule rule; struct ocelot_ace_rule rule;
int ret; int ret;
rule.prio = get_prio(f->common.prio); rule.prio = f->common.prio;
rule.port = port_block->port; rule.port = port_block->port;
rule.id = f->cookie; rule.id = f->cookie;
ret = ocelot_ace_rule_stats_update(&rule); ret = ocelot_ace_rule_stats_update(&rule);
......
...@@ -93,7 +93,7 @@ nfp_flower_install_rate_limiter(struct nfp_app *app, struct net_device *netdev, ...@@ -93,7 +93,7 @@ nfp_flower_install_rate_limiter(struct nfp_app *app, struct net_device *netdev,
return -EOPNOTSUPP; return -EOPNOTSUPP;
} }
if (flow->common.prio != (1 << 16)) { if (flow->common.prio != 1) {
NL_SET_ERR_MSG_MOD(extack, "unsupported offload: qos rate limit offload requires highest priority"); NL_SET_ERR_MSG_MOD(extack, "unsupported offload: qos rate limit offload requires highest priority");
return -EOPNOTSUPP; return -EOPNOTSUPP;
} }
......
...@@ -94,7 +94,7 @@ static int tc_fill_entry(struct stmmac_priv *priv, ...@@ -94,7 +94,7 @@ static int tc_fill_entry(struct stmmac_priv *priv,
struct stmmac_tc_entry *entry, *frag = NULL; struct stmmac_tc_entry *entry, *frag = NULL;
struct tc_u32_sel *sel = cls->knode.sel; struct tc_u32_sel *sel = cls->knode.sel;
u32 off, data, mask, real_off, rem; u32 off, data, mask, real_off, rem;
u32 prio = cls->common.prio; u32 prio = cls->common.prio << 16;
int ret; int ret;
/* Only 1 match per entry */ /* Only 1 match per entry */
......
...@@ -646,7 +646,7 @@ tc_cls_common_offload_init(struct flow_cls_common_offload *cls_common, ...@@ -646,7 +646,7 @@ tc_cls_common_offload_init(struct flow_cls_common_offload *cls_common,
{ {
cls_common->chain_index = tp->chain->index; cls_common->chain_index = tp->chain->index;
cls_common->protocol = tp->protocol; cls_common->protocol = tp->protocol;
cls_common->prio = tp->prio; cls_common->prio = tp->prio >> 16;
if (tc_skip_sw(flags) || flags & TCA_CLS_FLAGS_VERBOSE) if (tc_skip_sw(flags) || flags & TCA_CLS_FLAGS_VERBOSE)
cls_common->extack = extack; cls_common->extack = extack;
} }
......
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