]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - net/sched/sch_generic.c
net: sched: simplify attach_one_default_qdisc()
[karo-tx-linux.git] / net / sched / sch_generic.c
index d5c7c0d887864ec2d4d819efc44dcac4fe111b80..cb5d4ad32946cf0c6f3391fe9742bceb7dd702e6 100644 (file)
@@ -435,24 +435,6 @@ struct Qdisc_ops noqueue_qdisc_ops __read_mostly = {
        .owner          =       THIS_MODULE,
 };
 
-static struct Qdisc noqueue_qdisc;
-static struct netdev_queue noqueue_netdev_queue = {
-       .qdisc          =       &noqueue_qdisc,
-       .qdisc_sleeping =       &noqueue_qdisc,
-};
-
-static struct Qdisc noqueue_qdisc = {
-       .enqueue        =       NULL,
-       .dequeue        =       noop_dequeue,
-       .flags          =       TCQ_F_BUILTIN,
-       .ops            =       &noqueue_qdisc_ops,
-       .list           =       LIST_HEAD_INIT(noqueue_qdisc.list),
-       .q.lock         =       __SPIN_LOCK_UNLOCKED(noqueue_qdisc.q.lock),
-       .dev_queue      =       &noqueue_netdev_queue,
-       .busylock       =       __SPIN_LOCK_UNLOCKED(noqueue_qdisc.busylock),
-};
-
-
 static const u8 prio2band[TC_PRIO_MAX + 1] = {
        1, 2, 2, 2, 1, 2, 0, 0 , 1, 1, 1, 1, 1, 1, 1, 1
 };
@@ -743,18 +725,19 @@ static void attach_one_default_qdisc(struct net_device *dev,
                                     struct netdev_queue *dev_queue,
                                     void *_unused)
 {
-       struct Qdisc *qdisc = &noqueue_qdisc;
+       struct Qdisc *qdisc;
+       const struct Qdisc_ops *ops = default_qdisc_ops;
 
-       if (!(dev->priv_flags & IFF_NO_QUEUE)) {
-               qdisc = qdisc_create_dflt(dev_queue,
-                                         default_qdisc_ops, TC_H_ROOT);
-               if (!qdisc) {
-                       netdev_info(dev, "activation failed\n");
-                       return;
-               }
-               if (!netif_is_multiqueue(dev))
-                       qdisc->flags |= TCQ_F_ONETXQUEUE;
+       if (dev->priv_flags & IFF_NO_QUEUE)
+               ops = &noqueue_qdisc_ops;
+
+       qdisc = qdisc_create_dflt(dev_queue, ops, TC_H_ROOT);
+       if (!qdisc) {
+               netdev_info(dev, "activation failed\n");
+               return;
        }
+       if (!netif_is_multiqueue(dev))
+               qdisc->flags |= TCQ_F_ONETXQUEUE;
        dev_queue->qdisc_sleeping = qdisc;
 }
 
@@ -790,7 +773,7 @@ static void transition_one_qdisc(struct net_device *dev,
                clear_bit(__QDISC_STATE_DEACTIVATED, &new_qdisc->state);
 
        rcu_assign_pointer(dev_queue->qdisc, new_qdisc);
-       if (need_watchdog_p && new_qdisc != &noqueue_qdisc) {
+       if (need_watchdog_p) {
                dev_queue->trans_start = 0;
                *need_watchdog_p = 1;
        }