2015-12-02 22:23:22 +00:00
|
|
|
--- a/net/sched/Kconfig
|
|
|
|
+++ b/net/sched/Kconfig
|
|
|
|
@@ -3,8 +3,9 @@
|
|
|
|
#
|
|
|
|
|
|
|
|
menuconfig NET_SCHED
|
|
|
|
- bool "QoS and/or fair queueing"
|
|
|
|
+ def_bool y
|
|
|
|
select NET_SCH_FIFO
|
|
|
|
+ select NET_SCH_FQ_CODEL
|
|
|
|
---help---
|
|
|
|
When the kernel has several packets to send out over a network
|
|
|
|
device, it has to decide which ones to send first, which ones to
|
|
|
|
--- a/net/sched/sch_fq_codel.c
|
|
|
|
+++ b/net/sched/sch_fq_codel.c
|
2016-05-16 15:45:08 +00:00
|
|
|
@@ -676,7 +676,7 @@ static const struct Qdisc_class_ops fq_c
|
2015-12-02 22:23:22 +00:00
|
|
|
.walk = fq_codel_walk,
|
|
|
|
};
|
|
|
|
|
|
|
|
-static struct Qdisc_ops fq_codel_qdisc_ops __read_mostly = {
|
|
|
|
+struct Qdisc_ops fq_codel_qdisc_ops __read_mostly = {
|
|
|
|
.cl_ops = &fq_codel_class_ops,
|
|
|
|
.id = "fq_codel",
|
|
|
|
.priv_size = sizeof(struct fq_codel_sched_data),
|
2016-05-16 15:45:08 +00:00
|
|
|
@@ -692,6 +692,7 @@ static struct Qdisc_ops fq_codel_qdisc_o
|
2015-12-02 22:23:22 +00:00
|
|
|
.dump_stats = fq_codel_dump_stats,
|
|
|
|
.owner = THIS_MODULE,
|
|
|
|
};
|
|
|
|
+EXPORT_SYMBOL(fq_codel_qdisc_ops);
|
|
|
|
|
|
|
|
static int __init fq_codel_module_init(void)
|
|
|
|
{
|
|
|
|
--- a/include/net/sch_generic.h
|
|
|
|
+++ b/include/net/sch_generic.h
|
2015-12-07 10:11:43 +00:00
|
|
|
@@ -344,6 +344,7 @@ extern struct Qdisc_ops noop_qdisc_ops;
|
2015-12-02 22:23:22 +00:00
|
|
|
extern struct Qdisc_ops pfifo_fast_ops;
|
|
|
|
extern struct Qdisc_ops mq_qdisc_ops;
|
|
|
|
extern struct Qdisc_ops noqueue_qdisc_ops;
|
|
|
|
+extern struct Qdisc_ops fq_codel_qdisc_ops;
|
|
|
|
extern const struct Qdisc_ops *default_qdisc_ops;
|
|
|
|
|
|
|
|
struct Qdisc_class_common {
|
|
|
|
--- a/net/sched/sch_generic.c
|
|
|
|
+++ b/net/sched/sch_generic.c
|
2016-05-12 18:44:16 +00:00
|
|
|
@@ -31,7 +31,7 @@
|
|
|
|
#include <net/dst.h>
|
|
|
|
|
|
|
|
/* Qdisc to use by default */
|
|
|
|
-const struct Qdisc_ops *default_qdisc_ops = &pfifo_fast_ops;
|
|
|
|
+const struct Qdisc_ops *default_qdisc_ops = &fq_codel_qdisc_ops;
|
|
|
|
EXPORT_SYMBOL(default_qdisc_ops);
|
|
|
|
|
|
|
|
/* Main transmission queue. */
|
2016-05-19 17:32:46 +00:00
|
|
|
@@ -731,7 +731,7 @@ static void attach_one_default_qdisc(str
|
2015-12-02 22:23:22 +00:00
|
|
|
void *_unused)
|
|
|
|
{
|
|
|
|
struct Qdisc *qdisc;
|
|
|
|
- const struct Qdisc_ops *ops = default_qdisc_ops;
|
|
|
|
+ const struct Qdisc_ops *ops = &fq_codel_qdisc_ops;
|
|
|
|
|
|
|
|
if (dev->priv_flags & IFF_NO_QUEUE)
|
|
|
|
ops = &noqueue_qdisc_ops;
|
|
|
|
--- a/net/sched/sch_mq.c
|
|
|
|
+++ b/net/sched/sch_mq.c
|
|
|
|
@@ -57,7 +57,7 @@ static int mq_init(struct Qdisc *sch, st
|
|
|
|
|
|
|
|
for (ntx = 0; ntx < dev->num_tx_queues; ntx++) {
|
|
|
|
dev_queue = netdev_get_tx_queue(dev, ntx);
|
|
|
|
- qdisc = qdisc_create_dflt(dev_queue, default_qdisc_ops,
|
|
|
|
+ qdisc = qdisc_create_dflt(dev_queue, &fq_codel_qdisc_ops,
|
|
|
|
TC_H_MAKE(TC_H_MAJ(sch->handle),
|
|
|
|
TC_H_MIN(ntx + 1)));
|
|
|
|
if (qdisc == NULL)
|
|
|
|
--- a/net/sched/sch_mqprio.c
|
|
|
|
+++ b/net/sched/sch_mqprio.c
|
|
|
|
@@ -124,7 +124,7 @@ static int mqprio_init(struct Qdisc *sch
|
|
|
|
|
|
|
|
for (i = 0; i < dev->num_tx_queues; i++) {
|
|
|
|
dev_queue = netdev_get_tx_queue(dev, i);
|
|
|
|
- qdisc = qdisc_create_dflt(dev_queue, default_qdisc_ops,
|
|
|
|
+ qdisc = qdisc_create_dflt(dev_queue, &fq_codel_qdisc_ops,
|
|
|
|
TC_H_MAKE(TC_H_MAJ(sch->handle),
|
|
|
|
TC_H_MIN(i + 1)));
|
|
|
|
if (qdisc == NULL) {
|
2016-05-12 18:44:16 +00:00
|
|
|
--- a/net/sched/sch_api.c
|
|
|
|
+++ b/net/sched/sch_api.c
|
2016-05-12 19:04:50 +00:00
|
|
|
@@ -1948,7 +1948,7 @@ static int __init pktsched_init(void)
|
2016-05-12 18:44:16 +00:00
|
|
|
return err;
|
|
|
|
}
|
|
|
|
|
|
|
|
- register_qdisc(&pfifo_fast_ops);
|
|
|
|
+ register_qdisc(&fq_codel_qdisc_ops);
|
|
|
|
register_qdisc(&pfifo_qdisc_ops);
|
|
|
|
register_qdisc(&bfifo_qdisc_ops);
|
|
|
|
register_qdisc(&pfifo_head_drop_qdisc_ops);
|