Message ID | 20240325204740.1393349-2-ast@fiberby.net (mailing list archive) |
---|---|
State | Accepted |
Commit | f631ef39d81956a2ee69d25039781ceae1162f62 |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | make skip_sw actually skip software | expand |
On Mon, Mar 25, 2024 at 08:47:34PM +0000, Asbjørn Sloth Tønnesen wrote: > Maintain a count of skip_sw filters. > > This counter is protected by the cb_lock, and is updated > at the same time as offloadcnt. > > Signed-off-by: Asbjørn Sloth Tønnesen <ast@fiberby.net> > Reviewed-by: Jiri Pirko <jiri@nvidia.com> Reviewed-by: Simon Horman <horms@kernel.org>
On Mon, Mar 25, 2024 at 08:47:34PM +0000, Asbjørn Sloth Tønnesen wrote: > Maintain a count of skip_sw filters. > > This counter is protected by the cb_lock, and is updated > at the same time as offloadcnt. > > Signed-off-by: Asbjørn Sloth Tønnesen <ast@fiberby.net> > Reviewed-by: Jiri Pirko <jiri@nvidia.com> Reviewed-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>
diff --git a/include/net/sch_generic.h b/include/net/sch_generic.h index cefe0c4bdae3..120a4ca6ec9b 100644 --- a/include/net/sch_generic.h +++ b/include/net/sch_generic.h @@ -471,6 +471,7 @@ struct tcf_block { struct flow_block flow_block; struct list_head owner_list; bool keep_dst; + atomic_t skipswcnt; /* Number of skip_sw filters */ atomic_t offloadcnt; /* Number of oddloaded filters */ unsigned int nooffloaddevcnt; /* Number of devs unable to do offload */ unsigned int lockeddevcnt; /* Number of devs that require rtnl lock. */ diff --git a/net/sched/cls_api.c b/net/sched/cls_api.c index ca5676b2668e..397c3d29659c 100644 --- a/net/sched/cls_api.c +++ b/net/sched/cls_api.c @@ -3483,6 +3483,8 @@ static void tcf_block_offload_inc(struct tcf_block *block, u32 *flags) if (*flags & TCA_CLS_FLAGS_IN_HW) return; *flags |= TCA_CLS_FLAGS_IN_HW; + if (tc_skip_sw(*flags)) + atomic_inc(&block->skipswcnt); atomic_inc(&block->offloadcnt); } @@ -3491,6 +3493,8 @@ static void tcf_block_offload_dec(struct tcf_block *block, u32 *flags) if (!(*flags & TCA_CLS_FLAGS_IN_HW)) return; *flags &= ~TCA_CLS_FLAGS_IN_HW; + if (tc_skip_sw(*flags)) + atomic_dec(&block->skipswcnt); atomic_dec(&block->offloadcnt); }