Message ID | 20211019003402.2110017-3-eric.dumazet@gmail.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 97604c65bcda4b0e953cb86dae5335632e199f94 |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | net: sched: fixes after recent qdisc->running changes | expand |
Context | Check | Description |
---|---|---|
netdev/cover_letter | success | Series has a cover letter |
netdev/fixes_present | success | Fixes tag not required for -next series |
netdev/patch_count | success | Link |
netdev/tree_selection | success | Clearly marked for net-next |
netdev/subject_prefix | success | Link |
netdev/cc_maintainers | success | CCed 3 of 3 maintainers |
netdev/source_inline | success | Was 0 now: 0 |
netdev/verify_signedoff | success | Signed-off-by tag matches author and committer |
netdev/module_param | success | Was 0 now: 0 |
netdev/build_32bit | success | Errors and warnings before: 3311 this patch: 3311 |
netdev/kdoc | success | Errors and warnings before: 0 this patch: 0 |
netdev/verify_fixes | success | Fixes tag looks correct |
netdev/checkpatch | warning | WARNING: line length of 82 exceeds 80 columns |
netdev/build_allmodconfig_warn | success | Errors and warnings before: 3398 this patch: 3398 |
netdev/header_inline | success | No static functions without inline keyword in header files |
On 2021-10-18 17:34:02 [-0700], Eric Dumazet wrote: > From: Eric Dumazet <edumazet@google.com> > > __QDISC_STATE_RUNNING is only set/cleared from contexts owning qdisc lock. > > Thus we can use less expensive bit operations, as we were doing > before commit f9eb8aea2a1e ("net_sched: transform qdisc running bit into a seqcount") > > Fixes: 29cbcd858283 ("net: sched: Remove Qdisc::running sequence counter") > Signed-off-by: Eric Dumazet <edumazet@google.com> > Cc: Ahmed S. Darwish <a.darwish@linutronix.de> > Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Acked-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Sebastian
Eric Dumazet <eric.dumazet@gmail.com> writes: > From: Eric Dumazet <edumazet@google.com> > > __QDISC_STATE_RUNNING is only set/cleared from contexts owning qdisc lock. > > Thus we can use less expensive bit operations, as we were doing > before commit f9eb8aea2a1e ("net_sched: transform qdisc running bit into a seqcount") > > Fixes: 29cbcd858283 ("net: sched: Remove Qdisc::running sequence counter") > Signed-off-by: Eric Dumazet <edumazet@google.com> > Cc: Ahmed S. Darwish <a.darwish@linutronix.de> > Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Tested-by: Toke Høiland-Jørgensen <toke@redhat.com>
diff --git a/include/net/sch_generic.h b/include/net/sch_generic.h index e0988c56dd8fd7aa3dff6bd971da3c81f1a20626..ada02c4a4f518b732d62561a22b1d9033516b494 100644 --- a/include/net/sch_generic.h +++ b/include/net/sch_generic.h @@ -38,10 +38,13 @@ enum qdisc_state_t { __QDISC_STATE_DEACTIVATED, __QDISC_STATE_MISSED, __QDISC_STATE_DRAINING, +}; + +enum qdisc_state2_t { /* Only for !TCQ_F_NOLOCK qdisc. Never access it directly. * Use qdisc_run_begin/end() or qdisc_is_running() instead. */ - __QDISC_STATE_RUNNING, + __QDISC_STATE2_RUNNING, }; #define QDISC_STATE_MISSED BIT(__QDISC_STATE_MISSED) @@ -114,6 +117,7 @@ struct Qdisc { struct gnet_stats_basic_sync bstats; struct gnet_stats_queue qstats; unsigned long state; + unsigned long state2; /* must be written under qdisc spinlock */ struct Qdisc *next_sched; struct sk_buff_head skb_bad_txq; @@ -154,7 +158,7 @@ static inline bool qdisc_is_running(struct Qdisc *qdisc) { if (qdisc->flags & TCQ_F_NOLOCK) return spin_is_locked(&qdisc->seqlock); - return test_bit(__QDISC_STATE_RUNNING, &qdisc->state); + return test_bit(__QDISC_STATE2_RUNNING, &qdisc->state2); } static inline bool nolock_qdisc_is_empty(const struct Qdisc *qdisc) @@ -217,7 +221,7 @@ static inline bool qdisc_run_begin(struct Qdisc *qdisc) */ return spin_trylock(&qdisc->seqlock); } - return !test_and_set_bit(__QDISC_STATE_RUNNING, &qdisc->state); + return !__test_and_set_bit(__QDISC_STATE2_RUNNING, &qdisc->state2); } static inline void qdisc_run_end(struct Qdisc *qdisc) @@ -229,7 +233,7 @@ static inline void qdisc_run_end(struct Qdisc *qdisc) &qdisc->state))) __netif_schedule(qdisc); } else { - clear_bit(__QDISC_STATE_RUNNING, &qdisc->state); + __clear_bit(__QDISC_STATE2_RUNNING, &qdisc->state2); } }