diff --git a/include/net/sch_generic.h b/include/net/sch_generic.h index d737a6a2600be802672bdcd119a782aad1a5ec9d..7e94b1121e87a8081ec2848d4539918e1a165dd2 100644 --- a/include/net/sch_generic.h +++ b/include/net/sch_generic.h @@ -487,12 +487,13 @@ extern struct Qdisc_ops noop_qdisc_ops; 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; static inline const struct Qdisc_ops * get_default_qdisc_ops(const struct net_device *dev, int ntx) { return ntx < dev->real_num_tx_queues ? - default_qdisc_ops : &pfifo_fast_ops; + default_qdisc_ops : &fq_codel_qdisc_ops; } struct Qdisc_class_common { diff --git a/net/sched/Kconfig b/net/sched/Kconfig index 1d79d5dba6e4c3cb7115c2b2008108327ac01252..0effb4a217f06ed8ee71194da319cc4a9247f8af 100644 --- 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 diff --git a/net/sched/sch_api.c b/net/sched/sch_api.c index 39e319d04bb87b5ee98d5ec0935c13f76ace3f02..c6dd5bf0e801b16a99659c4d43f2a1de6e49c1e2 100644 --- a/net/sched/sch_api.c +++ b/net/sched/sch_api.c @@ -2162,7 +2162,7 @@ static int __init pktsched_init(void) 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); diff --git a/net/sched/sch_fq_codel.c b/net/sched/sch_fq_codel.c index 64ce0ce3a283ab97c0e762141d0c38f735a8c810..8cb3aece6ada73986af33eb05d56181b8995dd39 100644 --- a/net/sched/sch_fq_codel.c +++ b/net/sched/sch_fq_codel.c @@ -714,7 +714,7 @@ static const struct Qdisc_class_ops fq_codel_class_ops = { .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), @@ -729,6 +729,7 @@ static struct Qdisc_ops fq_codel_qdisc_ops __read_mostly = { .dump_stats = fq_codel_dump_stats, .owner = THIS_MODULE, }; +EXPORT_SYMBOL(fq_codel_qdisc_ops); static int __init fq_codel_module_init(void) { diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c index bd96fd261dba3efc7f888d97140287712ea79f0f..b43ebcaf57697b04eb9ce0d10ca172579e415a1f 100644 --- a/net/sched/sch_generic.c +++ b/net/sched/sch_generic.c @@ -35,7 +35,7 @@ #include <net/xfrm.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. */ @@ -1026,7 +1026,7 @@ static void attach_one_default_qdisc(struct net_device *dev, 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;