mirror of
https://github.com/torvalds/linux.git
synced 2026-04-18 14:53:58 -04:00
net_sched: act: remove tcfa_qstats
tcfa_qstats is currently only used to hold drops and overlimits counters. tcf_action_inc_drop_qstats() and tcf_action_inc_overlimit_qstats() currently acquire a->tcfa_lock to increment these counters. Switch to two atomic_t to get lock-free accounting. Signed-off-by: Eric Dumazet <edumazet@google.com> Reviewed-by: Jamal Hadi Salim <jhs@mojatatu.com> Link: https://patch.msgid.link/20250901093141.2093176-1-edumazet@google.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
committed by
Jakub Kicinski
parent
3016024d75
commit
5d14bbf9d1
@@ -33,7 +33,10 @@ struct tc_action {
|
||||
struct tcf_t tcfa_tm;
|
||||
struct gnet_stats_basic_sync tcfa_bstats;
|
||||
struct gnet_stats_basic_sync tcfa_bstats_hw;
|
||||
struct gnet_stats_queue tcfa_qstats;
|
||||
|
||||
atomic_t tcfa_drops;
|
||||
atomic_t tcfa_overlimits;
|
||||
|
||||
struct net_rate_estimator __rcu *tcfa_rate_est;
|
||||
spinlock_t tcfa_lock;
|
||||
struct gnet_stats_basic_sync __percpu *cpu_bstats;
|
||||
@@ -53,7 +56,6 @@ struct tc_action {
|
||||
#define tcf_action common.tcfa_action
|
||||
#define tcf_tm common.tcfa_tm
|
||||
#define tcf_bstats common.tcfa_bstats
|
||||
#define tcf_qstats common.tcfa_qstats
|
||||
#define tcf_rate_est common.tcfa_rate_est
|
||||
#define tcf_lock common.tcfa_lock
|
||||
|
||||
@@ -241,9 +243,7 @@ static inline void tcf_action_inc_drop_qstats(struct tc_action *a)
|
||||
qstats_drop_inc(this_cpu_ptr(a->cpu_qstats));
|
||||
return;
|
||||
}
|
||||
spin_lock(&a->tcfa_lock);
|
||||
qstats_drop_inc(&a->tcfa_qstats);
|
||||
spin_unlock(&a->tcfa_lock);
|
||||
atomic_inc(&a->tcfa_drops);
|
||||
}
|
||||
|
||||
static inline void tcf_action_inc_overlimit_qstats(struct tc_action *a)
|
||||
@@ -252,9 +252,7 @@ static inline void tcf_action_inc_overlimit_qstats(struct tc_action *a)
|
||||
qstats_overlimit_inc(this_cpu_ptr(a->cpu_qstats));
|
||||
return;
|
||||
}
|
||||
spin_lock(&a->tcfa_lock);
|
||||
qstats_overlimit_inc(&a->tcfa_qstats);
|
||||
spin_unlock(&a->tcfa_lock);
|
||||
atomic_inc(&a->tcfa_overlimits);
|
||||
}
|
||||
|
||||
void tcf_action_update_stats(struct tc_action *a, u64 bytes, u64 packets,
|
||||
|
||||
Reference in New Issue
Block a user