5.4.74-rt42-rc2 stable review patch.
If anyone has any objections, please let me know.

------------------

From: Sebastian Andrzej Siewior <bige...@linutronix.de>

In patch
   ("net/Qdisc: use a seqlock instead seqcount")

the seqcount has been replaced with a seqlock to allow to reader to
boost the preempted writer.
The try_write_seqlock() acquired the lock with a try-lock but the
seqcount annotation was "lock".

Opencode write_seqcount_t_begin() and use the try-lock annotation for
lockdep.

Reported-by: Mike Galbraith <efa...@gmx.de>
Cc: stable...@vger.kernel.org
Signed-off-by: Sebastian Andrzej Siewior <bige...@linutronix.de>
Signed-off-by: Steven Rostedt (VMware) <rost...@goodmis.org>
---
 include/linux/seqlock.h   |  9 ---------
 include/net/sch_generic.h | 10 +++++++++-
 2 files changed, 9 insertions(+), 10 deletions(-)

diff --git a/include/linux/seqlock.h b/include/linux/seqlock.h
index e5207897c33e..f390293974ea 100644
--- a/include/linux/seqlock.h
+++ b/include/linux/seqlock.h
@@ -489,15 +489,6 @@ static inline void write_seqlock(seqlock_t *sl)
        __raw_write_seqcount_begin(&sl->seqcount);
 }
 
-static inline int try_write_seqlock(seqlock_t *sl)
-{
-       if (spin_trylock(&sl->lock)) {
-               __raw_write_seqcount_begin(&sl->seqcount);
-               return 1;
-       }
-       return 0;
-}
-
 static inline void write_sequnlock(seqlock_t *sl)
 {
        __raw_write_seqcount_end(&sl->seqcount);
diff --git a/include/net/sch_generic.h b/include/net/sch_generic.h
index e6afb4b9cede..112d2dca8b08 100644
--- a/include/net/sch_generic.h
+++ b/include/net/sch_generic.h
@@ -168,8 +168,16 @@ static inline bool qdisc_run_begin(struct Qdisc *qdisc)
                return false;
        }
 #ifdef CONFIG_PREEMPT_RT
-       if (try_write_seqlock(&qdisc->running))
+       if (spin_trylock(&qdisc->running.lock)) {
+               seqcount_t *s = &qdisc->running.seqcount;
+               /*
+                * Variant of write_seqcount_t_begin() telling lockdep that a
+                * trylock was attempted.
+                */
+               __raw_write_seqcount_begin(s);
+               seqcount_acquire(&s->dep_map, 0, 1, _RET_IP_);
                return true;
+       }
        return false;
 #else
        /* Variant of write_seqcount_begin() telling lockdep a trylock
-- 
2.28.0


Reply via email to