]> rtime.felk.cvut.cz Git - zynq/linux.git/blobdiff - include/net/sch_generic.h
Apply preempt_rt patch-4.9-rt1.patch.xz
[zynq/linux.git] / include / net / sch_generic.h
index e6aa0a249672a802dce583166f4f808154b77a96..b57736f2a8a3b3fd5d2d74e8f9985cff621e9b1c 100644 (file)
@@ -10,6 +10,7 @@
 #include <linux/dynamic_queue_limits.h>
 #include <net/gen_stats.h>
 #include <net/rtnetlink.h>
+#include <net/net_seq_lock.h>
 
 struct Qdisc_ops;
 struct qdisc_walker;
@@ -86,7 +87,7 @@ struct Qdisc {
        struct sk_buff          *gso_skb ____cacheline_aligned_in_smp;
        struct qdisc_skb_head   q;
        struct gnet_stats_basic_packed bstats;
-       seqcount_t              running;
+       net_seqlock_t           running;
        struct gnet_stats_queue qstats;
        unsigned long           state;
        struct Qdisc            *next_sched;
@@ -98,13 +99,22 @@ struct Qdisc {
        spinlock_t              busylock ____cacheline_aligned_in_smp;
 };
 
-static inline bool qdisc_is_running(const struct Qdisc *qdisc)
+static inline bool qdisc_is_running(struct Qdisc *qdisc)
 {
+#ifdef CONFIG_PREEMPT_RT_BASE
+       return spin_is_locked(&qdisc->running.lock) ? true : false;
+#else
        return (raw_read_seqcount(&qdisc->running) & 1) ? true : false;
+#endif
 }
 
 static inline bool qdisc_run_begin(struct Qdisc *qdisc)
 {
+#ifdef CONFIG_PREEMPT_RT_BASE
+       if (try_write_seqlock(&qdisc->running))
+               return true;
+       return false;
+#else
        if (qdisc_is_running(qdisc))
                return false;
        /* Variant of write_seqcount_begin() telling lockdep a trylock
@@ -113,11 +123,16 @@ static inline bool qdisc_run_begin(struct Qdisc *qdisc)
        raw_write_seqcount_begin(&qdisc->running);
        seqcount_acquire(&qdisc->running.dep_map, 0, 1, _RET_IP_);
        return true;
+#endif
 }
 
 static inline void qdisc_run_end(struct Qdisc *qdisc)
 {
+#ifdef CONFIG_PREEMPT_RT_BASE
+       write_sequnlock(&qdisc->running);
+#else
        write_seqcount_end(&qdisc->running);
+#endif
 }
 
 static inline bool qdisc_may_bulk(const struct Qdisc *qdisc)
@@ -308,7 +323,7 @@ static inline spinlock_t *qdisc_root_sleeping_lock(const struct Qdisc *qdisc)
        return qdisc_lock(root);
 }
 
-static inline seqcount_t *qdisc_root_sleeping_running(const struct Qdisc *qdisc)
+static inline net_seqlock_t *qdisc_root_sleeping_running(const struct Qdisc *qdisc)
 {
        struct Qdisc *root = qdisc_root_sleeping(qdisc);