Lines Matching defs:sch
186 static inline struct htb_class *htb_find(u32 handle, struct Qdisc *sch)
188 struct htb_sched *q = qdisc_priv(sch);
197 static unsigned long htb_search(struct Qdisc *sch, u32 handle)
199 return (unsigned long)htb_find(handle, sch);
207 * @sch: the active queue discipline
219 static struct htb_class *htb_classify(struct sk_buff *skb, struct Qdisc *sch,
222 struct htb_sched *q = qdisc_priv(sch);
232 if (skb->priority == sch->handle)
234 cl = htb_find(skb->priority, sch);
259 if (res.classid == sch->handle)
261 cl = htb_find(res.classid, sch);
272 cl = htb_find(TC_H_MAKE(TC_H_MAJ(sch->handle), q->defcls), sch);
618 static int htb_enqueue(struct sk_buff *skb, struct Qdisc *sch,
623 struct htb_sched *q = qdisc_priv(sch);
624 struct htb_class *cl = htb_classify(skb, sch, &ret);
632 return qdisc_drop(skb, sch, to_free);
637 qdisc_qstats_drop(sch);
644 qdisc_qstats_drop(sch);
652 sch->qstats.backlog += len;
653 sch->q.qlen++;
937 static struct sk_buff *htb_dequeue(struct Qdisc *sch)
940 struct htb_sched *q = qdisc_priv(sch);
949 qdisc_bstats_update(sch, skb);
950 qdisc_qstats_backlog_dec(sch, skb);
951 sch->q.qlen--;
955 if (!sch->q.qlen)
997 static void htb_reset(struct Qdisc *sch)
999 struct htb_sched *q = qdisc_priv(sch);
1035 struct Qdisc *sch = q->watchdog.qdisc;
1038 __netif_schedule(qdisc_root(sch));
1054 static int htb_init(struct Qdisc *sch, struct nlattr *opt,
1057 struct net_device *dev = qdisc_dev(sch);
1059 struct htb_sched *q = qdisc_priv(sch);
1066 qdisc_watchdog_init(&q->watchdog, sch);
1072 err = tcf_block_get(&q->block, &q->filter_list, sch, extack);
1091 if (sch->parent != TC_H_ROOT) {
1116 q->direct_qlen = qdisc_dev(sch)->tx_queue_len;
1130 TC_H_MAKE(sch->handle, 0), extack);
1140 sch->flags |= TCQ_F_MQROOT;
1144 .parent_classid = TC_H_MAJ(sch->handle) >> 16,
1160 static void htb_attach_offload(struct Qdisc *sch)
1162 struct net_device *dev = qdisc_dev(sch);
1163 struct htb_sched *q = qdisc_priv(sch);
1184 static void htb_attach_software(struct Qdisc *sch)
1186 struct net_device *dev = qdisc_dev(sch);
1192 struct Qdisc *old = dev_graft_qdisc(dev_queue, sch);
1194 qdisc_refcount_inc(sch);
1200 static void htb_attach(struct Qdisc *sch)
1202 struct htb_sched *q = qdisc_priv(sch);
1205 htb_attach_offload(sch);
1207 htb_attach_software(sch);
1210 static int htb_dump(struct Qdisc *sch, struct sk_buff *skb)
1212 struct htb_sched *q = qdisc_priv(sch);
1217 sch->flags |= TCQ_F_OFFLOADED;
1219 sch->flags &= ~TCQ_F_OFFLOADED;
1221 sch->qstats.overlimits = q->overlimits;
1248 static int htb_dump_class(struct Qdisc *sch, unsigned long arg,
1252 struct htb_sched *q = qdisc_priv(sch);
1328 htb_dump_class_stats(struct Qdisc *sch, unsigned long arg, struct gnet_dump *d)
1331 struct htb_sched *q = qdisc_priv(sch);
1369 htb_select_queue(struct Qdisc *sch, struct tcmsg *tcm)
1371 struct net_device *dev = qdisc_dev(sch);
1373 struct htb_sched *q = qdisc_priv(sch);
1377 return sch->dev_queue;
1417 static void htb_offload_move_qdisc(struct Qdisc *sch, struct htb_class *cl_old,
1421 struct net_device *dev = qdisc_dev(sch);
1449 static int htb_graft(struct Qdisc *sch, unsigned long arg, struct Qdisc *new,
1452 struct netdev_queue *dev_queue = sch->dev_queue;
1454 struct htb_sched *q = qdisc_priv(sch);
1477 *old = qdisc_replace(sch, new, &cl->leaf.q);
1487 static struct Qdisc *htb_leaf(struct Qdisc *sch, unsigned long arg)
1493 static void htb_qlen_notify(struct Qdisc *sch, unsigned long arg)
1497 htb_deactivate(qdisc_priv(sch), cl);
1511 static void htb_parent_to_leaf(struct Qdisc *sch, struct htb_class *cl,
1514 struct htb_sched *q = qdisc_priv(sch);
1534 static void htb_parent_to_leaf_offload(struct Qdisc *sch,
1547 static int htb_destroy_class_offload(struct Qdisc *sch, struct htb_class *cl,
1587 err = htb_offload(qdisc_dev(sch), &offload_opt);
1600 u32 classid = TC_H_MAJ(sch->handle) |
1602 struct htb_class *moved_cl = htb_find(classid, sch);
1604 htb_offload_move_qdisc(sch, moved_cl, cl, destroying);
1610 static void htb_destroy_class(struct Qdisc *sch, struct htb_class *cl)
1621 static void htb_destroy(struct Qdisc *sch)
1623 struct net_device *dev = qdisc_dev(sch);
1625 struct htb_sched *q = qdisc_priv(sch);
1656 htb_destroy_class(sch, cl);
1668 htb_destroy_class_offload(sch, cl, last_child,
1675 htb_parent_to_leaf(sch, cl, NULL);
1676 htb_destroy_class(sch, cl);
1699 static int htb_delete(struct Qdisc *sch, unsigned long arg,
1702 struct htb_sched *q = qdisc_priv(sch);
1721 err = htb_destroy_class_offload(sch, cl, last_child, false,
1728 struct netdev_queue *dev_queue = sch->dev_queue;
1739 htb_parent_to_leaf_offload(sch, dev_queue, new_q);
1743 sch_tree_lock(sch);
1761 htb_parent_to_leaf(sch, cl, new_q);
1763 sch_tree_unlock(sch);
1765 htb_destroy_class(sch, cl);
1769 static int htb_change_class(struct Qdisc *sch, u32 classid,
1774 struct htb_sched *q = qdisc_priv(sch);
1798 parent = parentid == TC_H_ROOT ? NULL : htb_find(parentid, sch);
1829 struct net_device *dev = qdisc_dev(sch);
1848 if (!classid || TC_H_MAJ(classid ^ sch->handle) ||
1849 htb_find(classid, sch))
1865 err = tcf_block_get(&cl->block, &cl->filter_list, sch, extack);
1898 dev_queue = sch->dev_queue;
1961 sch_tree_lock(sch);
2011 struct net_device *dev = qdisc_dev(sch);
2033 sch_tree_lock(sch);
2065 sch_tree_unlock(sch);
2073 qdisc_class_hash_grow(sch, &q->clhash);
2087 static struct tcf_block *htb_tcf_block(struct Qdisc *sch, unsigned long arg,
2090 struct htb_sched *q = qdisc_priv(sch);
2096 static unsigned long htb_bind_filter(struct Qdisc *sch, unsigned long parent,
2099 struct htb_class *cl = htb_find(classid, sch);
2115 static void htb_unbind_filter(struct Qdisc *sch, unsigned long arg)
2122 static void htb_walk(struct Qdisc *sch, struct qdisc_walker *arg)
2124 struct htb_sched *q = qdisc_priv(sch);
2133 if (!tc_qdisc_stats_dump(sch, (unsigned long)cl, arg))