Lines Matching refs:qdisc
385 static int noop_enqueue(struct sk_buff *skb, struct Qdisc *qdisc) in noop_enqueue() argument
391 static struct sk_buff *noop_dequeue(struct Qdisc *qdisc) in noop_dequeue() argument
406 .qdisc = &noop_qdisc,
422 static int noqueue_init(struct Qdisc *qdisc, struct nlattr *opt) in noqueue_init() argument
427 qdisc->enqueue = NULL; in noqueue_init()
475 static int pfifo_fast_enqueue(struct sk_buff *skb, struct Qdisc *qdisc) in pfifo_fast_enqueue() argument
477 if (skb_queue_len(&qdisc->q) < qdisc_dev(qdisc)->tx_queue_len) { in pfifo_fast_enqueue()
479 struct pfifo_fast_priv *priv = qdisc_priv(qdisc); in pfifo_fast_enqueue()
483 qdisc->q.qlen++; in pfifo_fast_enqueue()
484 return __qdisc_enqueue_tail(skb, qdisc, list); in pfifo_fast_enqueue()
487 return qdisc_drop(skb, qdisc); in pfifo_fast_enqueue()
490 static struct sk_buff *pfifo_fast_dequeue(struct Qdisc *qdisc) in pfifo_fast_dequeue() argument
492 struct pfifo_fast_priv *priv = qdisc_priv(qdisc); in pfifo_fast_dequeue()
497 struct sk_buff *skb = __qdisc_dequeue_head(qdisc, list); in pfifo_fast_dequeue()
499 qdisc->q.qlen--; in pfifo_fast_dequeue()
509 static struct sk_buff *pfifo_fast_peek(struct Qdisc *qdisc) in pfifo_fast_peek() argument
511 struct pfifo_fast_priv *priv = qdisc_priv(qdisc); in pfifo_fast_peek()
523 static void pfifo_fast_reset(struct Qdisc *qdisc) in pfifo_fast_reset() argument
526 struct pfifo_fast_priv *priv = qdisc_priv(qdisc); in pfifo_fast_reset()
529 __qdisc_reset_queue(qdisc, band2list(priv, prio)); in pfifo_fast_reset()
532 qdisc->qstats.backlog = 0; in pfifo_fast_reset()
533 qdisc->q.qlen = 0; in pfifo_fast_reset()
536 static int pfifo_fast_dump(struct Qdisc *qdisc, struct sk_buff *skb) in pfifo_fast_dump() argument
549 static int pfifo_fast_init(struct Qdisc *qdisc, struct nlattr *opt) in pfifo_fast_init() argument
552 struct pfifo_fast_priv *priv = qdisc_priv(qdisc); in pfifo_fast_init()
558 qdisc->flags |= TCQ_F_CAN_BYPASS; in pfifo_fast_init()
645 void qdisc_reset(struct Qdisc *qdisc) in qdisc_reset() argument
647 const struct Qdisc_ops *ops = qdisc->ops; in qdisc_reset()
650 ops->reset(qdisc); in qdisc_reset()
652 if (qdisc->gso_skb) { in qdisc_reset()
653 kfree_skb_list(qdisc->gso_skb); in qdisc_reset()
654 qdisc->gso_skb = NULL; in qdisc_reset()
655 qdisc->q.qlen = 0; in qdisc_reset()
662 struct Qdisc *qdisc = container_of(head, struct Qdisc, rcu_head); in qdisc_rcu_free() local
664 if (qdisc_is_percpu_stats(qdisc)) { in qdisc_rcu_free()
665 free_percpu(qdisc->cpu_bstats); in qdisc_rcu_free()
666 free_percpu(qdisc->cpu_qstats); in qdisc_rcu_free()
669 kfree((char *) qdisc - qdisc->padded); in qdisc_rcu_free()
672 void qdisc_destroy(struct Qdisc *qdisc) in qdisc_destroy() argument
674 const struct Qdisc_ops *ops = qdisc->ops; in qdisc_destroy()
676 if (qdisc->flags & TCQ_F_BUILTIN || in qdisc_destroy()
677 !atomic_dec_and_test(&qdisc->refcnt)) in qdisc_destroy()
681 qdisc_list_del(qdisc); in qdisc_destroy()
683 qdisc_put_stab(rtnl_dereference(qdisc->stab)); in qdisc_destroy()
685 gen_kill_estimator(&qdisc->bstats, &qdisc->rate_est); in qdisc_destroy()
687 ops->reset(qdisc); in qdisc_destroy()
689 ops->destroy(qdisc); in qdisc_destroy()
692 dev_put(qdisc_dev(qdisc)); in qdisc_destroy()
694 kfree_skb_list(qdisc->gso_skb); in qdisc_destroy()
699 call_rcu(&qdisc->rcu_head, qdisc_rcu_free); in qdisc_destroy()
705 struct Qdisc *qdisc) in dev_graft_qdisc() argument
718 if (qdisc == NULL) in dev_graft_qdisc()
719 qdisc = &noop_qdisc; in dev_graft_qdisc()
720 dev_queue->qdisc_sleeping = qdisc; in dev_graft_qdisc()
721 rcu_assign_pointer(dev_queue->qdisc, &noop_qdisc); in dev_graft_qdisc()
733 struct Qdisc *qdisc; in attach_one_default_qdisc() local
739 qdisc = qdisc_create_dflt(dev_queue, ops, TC_H_ROOT); in attach_one_default_qdisc()
740 if (!qdisc) { in attach_one_default_qdisc()
745 qdisc->flags |= TCQ_F_ONETXQUEUE | TCQ_F_NOPARENT; in attach_one_default_qdisc()
746 dev_queue->qdisc_sleeping = qdisc; in attach_one_default_qdisc()
752 struct Qdisc *qdisc; in attach_default_qdiscs() local
759 dev->qdisc = txq->qdisc_sleeping; in attach_default_qdiscs()
760 atomic_inc(&dev->qdisc->refcnt); in attach_default_qdiscs()
762 qdisc = qdisc_create_dflt(txq, &mq_qdisc_ops, TC_H_ROOT); in attach_default_qdiscs()
763 if (qdisc) { in attach_default_qdiscs()
764 dev->qdisc = qdisc; in attach_default_qdiscs()
765 qdisc->ops->attach(qdisc); in attach_default_qdiscs()
780 rcu_assign_pointer(dev_queue->qdisc, new_qdisc); in transition_one_qdisc()
796 if (dev->qdisc == &noop_qdisc) in dev_activate()
820 struct Qdisc *qdisc; in dev_deactivate_queue() local
822 qdisc = rtnl_dereference(dev_queue->qdisc); in dev_deactivate_queue()
823 if (qdisc) { in dev_deactivate_queue()
824 spin_lock_bh(qdisc_lock(qdisc)); in dev_deactivate_queue()
826 if (!(qdisc->flags & TCQ_F_BUILTIN)) in dev_deactivate_queue()
827 set_bit(__QDISC_STATE_DEACTIVATED, &qdisc->state); in dev_deactivate_queue()
829 rcu_assign_pointer(dev_queue->qdisc, qdisc_default); in dev_deactivate_queue()
830 qdisc_reset(qdisc); in dev_deactivate_queue()
832 spin_unlock_bh(qdisc_lock(qdisc)); in dev_deactivate_queue()
913 struct Qdisc *qdisc = _qdisc; in dev_init_scheduler_queue() local
915 rcu_assign_pointer(dev_queue->qdisc, qdisc); in dev_init_scheduler_queue()
916 dev_queue->qdisc_sleeping = qdisc; in dev_init_scheduler_queue()
921 dev->qdisc = &noop_qdisc; in dev_init_scheduler()
933 struct Qdisc *qdisc = dev_queue->qdisc_sleeping; in shutdown_scheduler_queue() local
936 if (qdisc) { in shutdown_scheduler_queue()
937 rcu_assign_pointer(dev_queue->qdisc, qdisc_default); in shutdown_scheduler_queue()
940 qdisc_destroy(qdisc); in shutdown_scheduler_queue()
949 qdisc_destroy(dev->qdisc); in dev_shutdown()
950 dev->qdisc = &noop_qdisc; in dev_shutdown()