]> bbs.cooldavid.org Git - net-next-2.6.git/blobdiff - net/sched/sch_generic.c
net: dynamic ingress_queue allocation
[net-next-2.6.git] / net / sched / sch_generic.c
index 545278a1c4788eb113a8c91842e02f1443169c79..3d57681bdb7625240f9756be257bb35aa4e5a7d0 100644 (file)
@@ -753,7 +753,8 @@ void dev_activate(struct net_device *dev)
 
        need_watchdog = 0;
        netdev_for_each_tx_queue(dev, transition_one_qdisc, &need_watchdog);
-       transition_one_qdisc(dev, &dev->ingress_queue, NULL);
+       if (dev_ingress_queue(dev))
+               transition_one_qdisc(dev, dev_ingress_queue(dev), NULL);
 
        if (need_watchdog) {
                dev->trans_start = jiffies;
@@ -812,7 +813,8 @@ static bool some_qdisc_is_busy(struct net_device *dev)
 void dev_deactivate(struct net_device *dev)
 {
        netdev_for_each_tx_queue(dev, dev_deactivate_queue, &noop_qdisc);
-       dev_deactivate_queue(dev, &dev->ingress_queue, &noop_qdisc);
+       if (dev_ingress_queue(dev))
+               dev_deactivate_queue(dev, dev_ingress_queue(dev), &noop_qdisc);
 
        dev_watchdog_down(dev);
 
@@ -838,7 +840,8 @@ void dev_init_scheduler(struct net_device *dev)
 {
        dev->qdisc = &noop_qdisc;
        netdev_for_each_tx_queue(dev, dev_init_scheduler_queue, &noop_qdisc);
-       dev_init_scheduler_queue(dev, &dev->ingress_queue, &noop_qdisc);
+       if (dev_ingress_queue(dev))
+               dev_init_scheduler_queue(dev, dev_ingress_queue(dev), &noop_qdisc);
 
        setup_timer(&dev->watchdog_timer, dev_watchdog, (unsigned long)dev);
 }
@@ -861,7 +864,8 @@ static void shutdown_scheduler_queue(struct net_device *dev,
 void dev_shutdown(struct net_device *dev)
 {
        netdev_for_each_tx_queue(dev, shutdown_scheduler_queue, &noop_qdisc);
-       shutdown_scheduler_queue(dev, &dev->ingress_queue, &noop_qdisc);
+       if (dev_ingress_queue(dev))
+               shutdown_scheduler_queue(dev, dev_ingress_queue(dev), &noop_qdisc);
        qdisc_destroy(dev->qdisc);
        dev->qdisc = &noop_qdisc;