Message ID | 20230212132520.12571-5-ozsh@nvidia.com (mailing list archive) |
---|---|
State | Accepted |
Commit | d307b2c6f962ad5d83d7a7df71c2e9c9e4106d82 |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | add support for per action hw stats | expand |
On Sun, Feb 12, 2023 at 8:26 AM Oz Shlomo <ozsh@nvidia.com> wrote: > > Currently a hardware action is uniquely identified by the <id, hw_index> > tuple. However, the id is set by the flow_act_setup callback and tc core > cannot enforce this, and it is possible that a future change could break > this. In addition, <id, hw_index> are not unique across network namespaces. > > Uniquely identify the action by setting an action cookie by the tc core. > Use the unique action cookie to query the action's hardware stats. > > Signed-off-by: Oz Shlomo <ozsh@nvidia.com> > Reviewed-by: Simon Horman <simon.horman@corigine.com> > Reviewed-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com> LGTM. Acked-by: Jamal Hadi Salim <jhs@mojatatu.com> cheers, jamal > --- > include/net/flow_offload.h | 2 ++ > net/sched/act_api.c | 1 + > net/sched/cls_api.c | 1 + > 3 files changed, 4 insertions(+) > > diff --git a/include/net/flow_offload.h b/include/net/flow_offload.h > index 0400a0ac8a29..d177bf5f0e1a 100644 > --- a/include/net/flow_offload.h > +++ b/include/net/flow_offload.h > @@ -228,6 +228,7 @@ struct flow_action_cookie *flow_action_cookie_create(void *data, > struct flow_action_entry { > enum flow_action_id id; > u32 hw_index; > + unsigned long act_cookie; > enum flow_action_hw_stats hw_stats; > action_destr destructor; > void *destructor_priv; > @@ -610,6 +611,7 @@ struct flow_offload_action { > enum offload_act_command command; > enum flow_action_id id; > u32 index; > + unsigned long cookie; > struct flow_stats stats; > struct flow_action action; > }; > diff --git a/net/sched/act_api.c b/net/sched/act_api.c > index f4fa6d7340f8..917827199102 100644 > --- a/net/sched/act_api.c > +++ b/net/sched/act_api.c > @@ -192,6 +192,7 @@ static int offload_action_init(struct flow_offload_action *fl_action, > fl_action->extack = extack; > fl_action->command = cmd; > fl_action->index = act->tcfa_index; > + fl_action->cookie = (unsigned long)act; > > if (act->ops->offload_act_setup) { > spin_lock_bh(&act->tcfa_lock); > diff --git a/net/sched/cls_api.c b/net/sched/cls_api.c > index 5b4a95e8a1ee..bfabc9c95fa9 100644 > --- a/net/sched/cls_api.c > +++ b/net/sched/cls_api.c > @@ -3577,6 +3577,7 @@ int tc_setup_action(struct flow_action *flow_action, > for (k = 0; k < index ; k++) { > entry[k].hw_stats = tc_act_hw_stats(act->hw_stats); > entry[k].hw_index = act->tcfa_index; > + entry[k].act_cookie = (unsigned long)act; > } > > j += index; > -- > 1.8.3.1 >
diff --git a/include/net/flow_offload.h b/include/net/flow_offload.h index 0400a0ac8a29..d177bf5f0e1a 100644 --- a/include/net/flow_offload.h +++ b/include/net/flow_offload.h @@ -228,6 +228,7 @@ struct flow_action_cookie *flow_action_cookie_create(void *data, struct flow_action_entry { enum flow_action_id id; u32 hw_index; + unsigned long act_cookie; enum flow_action_hw_stats hw_stats; action_destr destructor; void *destructor_priv; @@ -610,6 +611,7 @@ struct flow_offload_action { enum offload_act_command command; enum flow_action_id id; u32 index; + unsigned long cookie; struct flow_stats stats; struct flow_action action; }; diff --git a/net/sched/act_api.c b/net/sched/act_api.c index f4fa6d7340f8..917827199102 100644 --- a/net/sched/act_api.c +++ b/net/sched/act_api.c @@ -192,6 +192,7 @@ static int offload_action_init(struct flow_offload_action *fl_action, fl_action->extack = extack; fl_action->command = cmd; fl_action->index = act->tcfa_index; + fl_action->cookie = (unsigned long)act; if (act->ops->offload_act_setup) { spin_lock_bh(&act->tcfa_lock); diff --git a/net/sched/cls_api.c b/net/sched/cls_api.c index 5b4a95e8a1ee..bfabc9c95fa9 100644 --- a/net/sched/cls_api.c +++ b/net/sched/cls_api.c @@ -3577,6 +3577,7 @@ int tc_setup_action(struct flow_action *flow_action, for (k = 0; k < index ; k++) { entry[k].hw_stats = tc_act_hw_stats(act->hw_stats); entry[k].hw_index = act->tcfa_index; + entry[k].act_cookie = (unsigned long)act; } j += index;