Lines Matching refs:qdisc

89 #define TCQ_F_NOLOCK		0x100 /* qdisc does not require locking */
90 #define TCQ_F_OFFLOADED 0x200 /* qdisc is offloaded to HW */
120 bool running; /* must be written under qdisc spinlock */
141 static inline void qdisc_refcount_inc(struct Qdisc *qdisc)
143 if (qdisc->flags & TCQ_F_BUILTIN)
145 refcount_inc(&qdisc->refcnt);
148 static inline bool qdisc_refcount_dec_if_one(struct Qdisc *qdisc)
150 if (qdisc->flags & TCQ_F_BUILTIN)
152 return refcount_dec_if_one(&qdisc->refcnt);
155 /* Intended to be used by unlocked users, when concurrent qdisc release is
159 static inline struct Qdisc *qdisc_refcount_inc_nz(struct Qdisc *qdisc)
161 if (qdisc->flags & TCQ_F_BUILTIN)
162 return qdisc;
163 if (refcount_inc_not_zero(&qdisc->refcnt))
164 return qdisc;
168 /* For !TCQ_F_NOLOCK qdisc: callers must either call this within a qdisc
172 static inline bool qdisc_is_running(struct Qdisc *qdisc)
174 if (qdisc->flags & TCQ_F_NOLOCK)
175 return spin_is_locked(&qdisc->seqlock);
176 return READ_ONCE(qdisc->running);
179 static inline bool nolock_qdisc_is_empty(const struct Qdisc *qdisc)
181 return !(READ_ONCE(qdisc->state) & QDISC_STATE_NON_EMPTY);
189 static inline bool qdisc_is_empty(const struct Qdisc *qdisc)
191 if (qdisc_is_percpu_stats(qdisc))
192 return nolock_qdisc_is_empty(qdisc);
193 return !READ_ONCE(qdisc->q.qlen);
196 /* For !TCQ_F_NOLOCK qdisc, qdisc_run_begin/end() must be invoked with
197 * the qdisc root lock acquired.
199 static inline bool qdisc_run_begin(struct Qdisc *qdisc)
201 if (qdisc->flags & TCQ_F_NOLOCK) {
202 if (spin_trylock(&qdisc->seqlock))
210 if (test_and_set_bit(__QDISC_STATE_MISSED, &qdisc->state))
217 return spin_trylock(&qdisc->seqlock);
219 if (READ_ONCE(qdisc->running))
221 WRITE_ONCE(qdisc->running, true);
225 static inline struct sk_buff *qdisc_run_end(struct Qdisc *qdisc)
229 if (qdisc->flags & TCQ_F_NOLOCK) {
230 spin_unlock(&qdisc->seqlock);
239 &qdisc->state)))
240 __netif_schedule(qdisc);
244 if (qdisc->flags & TCQ_F_DEQUEUE_DROPS) {
245 to_free = qdisc->to_free;
247 qdisc->to_free = NULL;
249 WRITE_ONCE(qdisc->running, false);
253 static inline bool qdisc_may_bulk(const struct Qdisc *qdisc)
255 return qdisc->flags & TCQ_F_ONETXQUEUE;
265 /* Child qdisc manipulation */
562 static inline spinlock_t *qdisc_lock(struct Qdisc *qdisc)
564 return &qdisc->q.lock;
567 static inline struct Qdisc *qdisc_root(const struct Qdisc *qdisc)
569 struct Qdisc *q = rcu_dereference_rtnl(qdisc->dev_queue->qdisc);
574 static inline struct Qdisc *qdisc_root_bh(const struct Qdisc *qdisc)
576 return rcu_dereference_bh(qdisc->dev_queue->qdisc);
579 static inline struct Qdisc *qdisc_root_sleeping(const struct Qdisc *qdisc)
581 return rcu_dereference_rtnl(qdisc->dev_queue->qdisc_sleeping);
584 static inline spinlock_t *qdisc_root_sleeping_lock(const struct Qdisc *qdisc)
586 struct Qdisc *root = qdisc_root_sleeping(qdisc);
592 static inline struct net_device *qdisc_dev(const struct Qdisc *qdisc)
594 return qdisc->dev_queue->dev;
713 struct Qdisc *qdisc);
714 void qdisc_reset(struct Qdisc *qdisc);
715 void qdisc_destroy(struct Qdisc *qdisc);
716 void qdisc_put(struct Qdisc *qdisc);
717 void qdisc_put_unlocked(struct Qdisc *qdisc);
718 void qdisc_tree_reduce_backlog(struct Qdisc *qdisc, int n, int len);
749 void qdisc_free(struct Qdisc *qdisc);
780 struct Qdisc *qdisc;
783 qdisc = rtnl_dereference(netdev_get_tx_queue(dev, i)->qdisc);
784 if (qdisc) {
785 spin_lock_bh(qdisc_lock(qdisc));
786 qdisc_reset(qdisc);
787 spin_unlock_bh(qdisc_lock(qdisc));
800 const struct Qdisc *q = rcu_dereference(txq->qdisc);
819 if (rcu_access_pointer(txq->qdisc) !=
826 /* "noqueue" qdisc identified by not having any enqueue, see noqueue_init() */
829 struct Qdisc *qdisc = rcu_access_pointer(txq->qdisc);
831 return qdisc->enqueue == NULL;
834 /* Is the device using the noop qdisc on all queues? */
841 if (rcu_access_pointer(txq->qdisc) != &noop_qdisc)
861 /* additional qdisc xmit flags (NET_XMIT_MASK in linux/netdevice.h) */
1143 /* Instead of calling kfree_skb() while root qdisc lock is held,
1186 /* generic pseudo peek method for non-work-conserving qdisc */
1232 /* use instead of qdisc->dequeue() for all qdiscs queried with ->peek() */
1417 void mini_qdisc_pair_init(struct mini_Qdisc_pair *miniqp, struct Qdisc *qdisc,
1426 /* Make sure qdisc is no longer in SCHED state. */