linux/net/sched/sch_generic.c
<<
>>
Prefs
   1/*
   2 * net/sched/sch_generic.c      Generic packet scheduler routines.
   3 *
   4 *              This program is free software; you can redistribute it and/or
   5 *              modify it under the terms of the GNU General Public License
   6 *              as published by the Free Software Foundation; either version
   7 *              2 of the License, or (at your option) any later version.
   8 *
   9 * Authors:     Alexey Kuznetsov, <kuznet@ms2.inr.ac.ru>
  10 *              Jamal Hadi Salim, <hadi@cyberus.ca> 990601
  11 *              - Ingress support
  12 */
  13
  14#include <linux/bitops.h>
  15#include <linux/module.h>
  16#include <linux/types.h>
  17#include <linux/kernel.h>
  18#include <linux/sched.h>
  19#include <linux/string.h>
  20#include <linux/errno.h>
  21#include <linux/netdevice.h>
  22#include <linux/skbuff.h>
  23#include <linux/rtnetlink.h>
  24#include <linux/init.h>
  25#include <linux/rcupdate.h>
  26#include <linux/list.h>
  27#include <net/pkt_sched.h>
  28
  29/* Main transmission queue. */
  30
  31/* Modifications to data participating in scheduling must be protected with
  32 * qdisc_lock(qdisc) spinlock.
  33 *
  34 * The idea is the following:
  35 * - enqueue, dequeue are serialized via qdisc root lock
  36 * - ingress filtering is also serialized via qdisc root lock
  37 * - updates to tree and tree walking are only done under the rtnl mutex.
  38 */
  39
  40static inline int qdisc_qlen(struct Qdisc *q)
  41{
  42        return q->q.qlen;
  43}
  44
  45static inline int dev_requeue_skb(struct sk_buff *skb, struct Qdisc *q)
  46{
  47        q->gso_skb = skb;
  48        q->qstats.requeues++;
  49        __netif_schedule(q);
  50
  51        return 0;
  52}
  53
  54static inline struct sk_buff *dequeue_skb(struct Qdisc *q)
  55{
  56        struct sk_buff *skb = q->gso_skb;
  57
  58        if (unlikely(skb)) {
  59                struct net_device *dev = qdisc_dev(q);
  60                struct netdev_queue *txq;
  61
  62                /* check the reason of requeuing without tx lock first */
  63                txq = netdev_get_tx_queue(dev, skb_get_queue_mapping(skb));
  64                if (!netif_tx_queue_stopped(txq) && !netif_tx_queue_frozen(txq))
  65                        q->gso_skb = NULL;
  66                else
  67                        skb = NULL;
  68        } else {
  69                skb = q->dequeue(q);
  70        }
  71
  72        return skb;
  73}
  74
  75static inline int handle_dev_cpu_collision(struct sk_buff *skb,
  76                                           struct netdev_queue *dev_queue,
  77                                           struct Qdisc *q)
  78{
  79        int ret;
  80
  81        if (unlikely(dev_queue->xmit_lock_owner == smp_processor_id())) {
  82                /*
  83                 * Same CPU holding the lock. It may be a transient
  84                 * configuration error, when hard_start_xmit() recurses. We
  85                 * detect it by checking xmit owner and drop the packet when
  86                 * deadloop is detected. Return OK to try the next skb.
  87                 */
  88                kfree_skb(skb);
  89                if (net_ratelimit())
  90                        printk(KERN_WARNING "Dead loop on netdevice %s, "
  91                               "fix it urgently!\n", dev_queue->dev->name);
  92                ret = qdisc_qlen(q);
  93        } else {
  94                /*
  95                 * Another cpu is holding lock, requeue & delay xmits for
  96                 * some time.
  97                 */
  98                __get_cpu_var(netdev_rx_stat).cpu_collision++;
  99                ret = dev_requeue_skb(skb, q);
 100        }
 101
 102        return ret;
 103}
 104
 105/*
 106 * NOTE: Called under qdisc_lock(q) with locally disabled BH.
 107 *
 108 * __QDISC_STATE_RUNNING guarantees only one CPU can process
 109 * this qdisc at a time. qdisc_lock(q) serializes queue accesses for
 110 * this queue.
 111 *
 112 *  netif_tx_lock serializes accesses to device driver.
 113 *
 114 *  qdisc_lock(q) and netif_tx_lock are mutually exclusive,
 115 *  if one is grabbed, another must be free.
 116 *
 117 * Note, that this procedure can be called by a watchdog timer
 118 *
 119 * Returns to the caller:
 120 *                              0  - queue is empty or throttled.
 121 *                              >0 - queue is not empty.
 122 *
 123 */
 124static inline int qdisc_restart(struct Qdisc *q)
 125{
 126        struct netdev_queue *txq;
 127        int ret = NETDEV_TX_BUSY;
 128        struct net_device *dev;
 129        spinlock_t *root_lock;
 130        struct sk_buff *skb;
 131
 132        /* Dequeue packet */
 133        if (unlikely((skb = dequeue_skb(q)) == NULL))
 134                return 0;
 135
 136        root_lock = qdisc_lock(q);
 137
 138        /* And release qdisc */
 139        spin_unlock(root_lock);
 140
 141        dev = qdisc_dev(q);
 142        txq = netdev_get_tx_queue(dev, skb_get_queue_mapping(skb));
 143
 144        HARD_TX_LOCK(dev, txq, smp_processor_id());
 145        if (!netif_tx_queue_stopped(txq) &&
 146            !netif_tx_queue_frozen(txq))
 147                ret = dev_hard_start_xmit(skb, dev, txq);
 148        HARD_TX_UNLOCK(dev, txq);
 149
 150        spin_lock(root_lock);
 151
 152        switch (ret) {
 153        case NETDEV_TX_OK:
 154                /* Driver sent out skb successfully */
 155                ret = qdisc_qlen(q);
 156                break;
 157
 158        case NETDEV_TX_LOCKED:
 159                /* Driver try lock failed */
 160                ret = handle_dev_cpu_collision(skb, txq, q);
 161                break;
 162
 163        default:
 164                /* Driver returned NETDEV_TX_BUSY - requeue skb */
 165                if (unlikely (ret != NETDEV_TX_BUSY && net_ratelimit()))
 166                        printk(KERN_WARNING "BUG %s code %d qlen %d\n",
 167                               dev->name, ret, q->q.qlen);
 168
 169                ret = dev_requeue_skb(skb, q);
 170                break;
 171        }
 172
 173        if (ret && (netif_tx_queue_stopped(txq) ||
 174                    netif_tx_queue_frozen(txq)))
 175                ret = 0;
 176
 177        return ret;
 178}
 179
 180void __qdisc_run(struct Qdisc *q)
 181{
 182        unsigned long start_time = jiffies;
 183
 184        while (qdisc_restart(q)) {
 185                /*
 186                 * Postpone processing if
 187                 * 1. another process needs the CPU;
 188                 * 2. we've been doing it for too long.
 189                 */
 190                if (need_resched() || jiffies != start_time) {
 191                        __netif_schedule(q);
 192                        break;
 193                }
 194        }
 195
 196        clear_bit(__QDISC_STATE_RUNNING, &q->state);
 197}
 198
 199static void dev_watchdog(unsigned long arg)
 200{
 201        struct net_device *dev = (struct net_device *)arg;
 202
 203        netif_tx_lock(dev);
 204        if (!qdisc_tx_is_noop(dev)) {
 205                if (netif_device_present(dev) &&
 206                    netif_running(dev) &&
 207                    netif_carrier_ok(dev)) {
 208                        int some_queue_stopped = 0;
 209                        unsigned int i;
 210
 211                        for (i = 0; i < dev->num_tx_queues; i++) {
 212                                struct netdev_queue *txq;
 213
 214                                txq = netdev_get_tx_queue(dev, i);
 215                                if (netif_tx_queue_stopped(txq)) {
 216                                        some_queue_stopped = 1;
 217                                        break;
 218                                }
 219                        }
 220
 221                        if (some_queue_stopped &&
 222                            time_after(jiffies, (dev->trans_start +
 223                                                 dev->watchdog_timeo))) {
 224                                char drivername[64];
 225                                WARN_ONCE(1, KERN_INFO "NETDEV WATCHDOG: %s (%s): transmit timed out\n",
 226                                       dev->name, netdev_drivername(dev, drivername, 64));
 227                                dev->netdev_ops->ndo_tx_timeout(dev);
 228                        }
 229                        if (!mod_timer(&dev->watchdog_timer,
 230                                       round_jiffies(jiffies +
 231                                                     dev->watchdog_timeo)))
 232                                dev_hold(dev);
 233                }
 234        }
 235        netif_tx_unlock(dev);
 236
 237        dev_put(dev);
 238}
 239
 240void __netdev_watchdog_up(struct net_device *dev)
 241{
 242        if (dev->netdev_ops->ndo_tx_timeout) {
 243                if (dev->watchdog_timeo <= 0)
 244                        dev->watchdog_timeo = 5*HZ;
 245                if (!mod_timer(&dev->watchdog_timer,
 246                               round_jiffies(jiffies + dev->watchdog_timeo)))
 247                        dev_hold(dev);
 248        }
 249}
 250
 251static void dev_watchdog_up(struct net_device *dev)
 252{
 253        __netdev_watchdog_up(dev);
 254}
 255
 256static void dev_watchdog_down(struct net_device *dev)
 257{
 258        netif_tx_lock_bh(dev);
 259        if (del_timer(&dev->watchdog_timer))
 260                dev_put(dev);
 261        netif_tx_unlock_bh(dev);
 262}
 263
 264/**
 265 *      netif_carrier_on - set carrier
 266 *      @dev: network device
 267 *
 268 * Device has detected that carrier.
 269 */
 270void netif_carrier_on(struct net_device *dev)
 271{
 272        if (test_and_clear_bit(__LINK_STATE_NOCARRIER, &dev->state)) {
 273                if (dev->reg_state == NETREG_UNINITIALIZED)
 274                        return;
 275                linkwatch_fire_event(dev);
 276                if (netif_running(dev))
 277                        __netdev_watchdog_up(dev);
 278        }
 279}
 280EXPORT_SYMBOL(netif_carrier_on);
 281
 282/**
 283 *      netif_carrier_off - clear carrier
 284 *      @dev: network device
 285 *
 286 * Device has detected loss of carrier.
 287 */
 288void netif_carrier_off(struct net_device *dev)
 289{
 290        if (!test_and_set_bit(__LINK_STATE_NOCARRIER, &dev->state)) {
 291                if (dev->reg_state == NETREG_UNINITIALIZED)
 292                        return;
 293                linkwatch_fire_event(dev);
 294        }
 295}
 296EXPORT_SYMBOL(netif_carrier_off);
 297
 298/* "NOOP" scheduler: the best scheduler, recommended for all interfaces
 299   under all circumstances. It is difficult to invent anything faster or
 300   cheaper.
 301 */
 302
 303static int noop_enqueue(struct sk_buff *skb, struct Qdisc * qdisc)
 304{
 305        kfree_skb(skb);
 306        return NET_XMIT_CN;
 307}
 308
 309static struct sk_buff *noop_dequeue(struct Qdisc * qdisc)
 310{
 311        return NULL;
 312}
 313
 314struct Qdisc_ops noop_qdisc_ops __read_mostly = {
 315        .id             =       "noop",
 316        .priv_size      =       0,
 317        .enqueue        =       noop_enqueue,
 318        .dequeue        =       noop_dequeue,
 319        .peek           =       noop_dequeue,
 320        .owner          =       THIS_MODULE,
 321};
 322
 323static struct netdev_queue noop_netdev_queue = {
 324        .qdisc          =       &noop_qdisc,
 325        .qdisc_sleeping =       &noop_qdisc,
 326};
 327
 328struct Qdisc noop_qdisc = {
 329        .enqueue        =       noop_enqueue,
 330        .dequeue        =       noop_dequeue,
 331        .flags          =       TCQ_F_BUILTIN,
 332        .ops            =       &noop_qdisc_ops,
 333        .list           =       LIST_HEAD_INIT(noop_qdisc.list),
 334        .q.lock         =       __SPIN_LOCK_UNLOCKED(noop_qdisc.q.lock),
 335        .dev_queue      =       &noop_netdev_queue,
 336};
 337EXPORT_SYMBOL(noop_qdisc);
 338
 339static struct Qdisc_ops noqueue_qdisc_ops __read_mostly = {
 340        .id             =       "noqueue",
 341        .priv_size      =       0,
 342        .enqueue        =       noop_enqueue,
 343        .dequeue        =       noop_dequeue,
 344        .peek           =       noop_dequeue,
 345        .owner          =       THIS_MODULE,
 346};
 347
 348static struct Qdisc noqueue_qdisc;
 349static struct netdev_queue noqueue_netdev_queue = {
 350        .qdisc          =       &noqueue_qdisc,
 351        .qdisc_sleeping =       &noqueue_qdisc,
 352};
 353
 354static struct Qdisc noqueue_qdisc = {
 355        .enqueue        =       NULL,
 356        .dequeue        =       noop_dequeue,
 357        .flags          =       TCQ_F_BUILTIN,
 358        .ops            =       &noqueue_qdisc_ops,
 359        .list           =       LIST_HEAD_INIT(noqueue_qdisc.list),
 360        .q.lock         =       __SPIN_LOCK_UNLOCKED(noqueue_qdisc.q.lock),
 361        .dev_queue      =       &noqueue_netdev_queue,
 362};
 363
 364
 365static const u8 prio2band[TC_PRIO_MAX+1] =
 366        { 1, 2, 2, 2, 1, 2, 0, 0 , 1, 1, 1, 1, 1, 1, 1, 1 };
 367
 368/* 3-band FIFO queue: old style, but should be a bit faster than
 369   generic prio+fifo combination.
 370 */
 371
 372#define PFIFO_FAST_BANDS 3
 373
 374static inline struct sk_buff_head *prio2list(struct sk_buff *skb,
 375                                             struct Qdisc *qdisc)
 376{
 377        struct sk_buff_head *list = qdisc_priv(qdisc);
 378        return list + prio2band[skb->priority & TC_PRIO_MAX];
 379}
 380
 381static int pfifo_fast_enqueue(struct sk_buff *skb, struct Qdisc* qdisc)
 382{
 383        struct sk_buff_head *list = prio2list(skb, qdisc);
 384
 385        if (skb_queue_len(list) < qdisc_dev(qdisc)->tx_queue_len) {
 386                qdisc->q.qlen++;
 387                return __qdisc_enqueue_tail(skb, qdisc, list);
 388        }
 389
 390        return qdisc_drop(skb, qdisc);
 391}
 392
 393static struct sk_buff *pfifo_fast_dequeue(struct Qdisc* qdisc)
 394{
 395        int prio;
 396        struct sk_buff_head *list = qdisc_priv(qdisc);
 397
 398        for (prio = 0; prio < PFIFO_FAST_BANDS; prio++) {
 399                if (!skb_queue_empty(list + prio)) {
 400                        qdisc->q.qlen--;
 401                        return __qdisc_dequeue_head(qdisc, list + prio);
 402                }
 403        }
 404
 405        return NULL;
 406}
 407
 408static struct sk_buff *pfifo_fast_peek(struct Qdisc* qdisc)
 409{
 410        int prio;
 411        struct sk_buff_head *list = qdisc_priv(qdisc);
 412
 413        for (prio = 0; prio < PFIFO_FAST_BANDS; prio++) {
 414                if (!skb_queue_empty(list + prio))
 415                        return skb_peek(list + prio);
 416        }
 417
 418        return NULL;
 419}
 420
 421static void pfifo_fast_reset(struct Qdisc* qdisc)
 422{
 423        int prio;
 424        struct sk_buff_head *list = qdisc_priv(qdisc);
 425
 426        for (prio = 0; prio < PFIFO_FAST_BANDS; prio++)
 427                __qdisc_reset_queue(qdisc, list + prio);
 428
 429        qdisc->qstats.backlog = 0;
 430        qdisc->q.qlen = 0;
 431}
 432
 433static int pfifo_fast_dump(struct Qdisc *qdisc, struct sk_buff *skb)
 434{
 435        struct tc_prio_qopt opt = { .bands = PFIFO_FAST_BANDS };
 436
 437        memcpy(&opt.priomap, prio2band, TC_PRIO_MAX+1);
 438        NLA_PUT(skb, TCA_OPTIONS, sizeof(opt), &opt);
 439        return skb->len;
 440
 441nla_put_failure:
 442        return -1;
 443}
 444
 445static int pfifo_fast_init(struct Qdisc *qdisc, struct nlattr *opt)
 446{
 447        int prio;
 448        struct sk_buff_head *list = qdisc_priv(qdisc);
 449
 450        for (prio = 0; prio < PFIFO_FAST_BANDS; prio++)
 451                skb_queue_head_init(list + prio);
 452
 453        return 0;
 454}
 455
 456static struct Qdisc_ops pfifo_fast_ops __read_mostly = {
 457        .id             =       "pfifo_fast",
 458        .priv_size      =       PFIFO_FAST_BANDS * sizeof(struct sk_buff_head),
 459        .enqueue        =       pfifo_fast_enqueue,
 460        .dequeue        =       pfifo_fast_dequeue,
 461        .peek           =       pfifo_fast_peek,
 462        .init           =       pfifo_fast_init,
 463        .reset          =       pfifo_fast_reset,
 464        .dump           =       pfifo_fast_dump,
 465        .owner          =       THIS_MODULE,
 466};
 467
 468struct Qdisc *qdisc_alloc(struct netdev_queue *dev_queue,
 469                          struct Qdisc_ops *ops)
 470{
 471        void *p;
 472        struct Qdisc *sch;
 473        unsigned int size;
 474        int err = -ENOBUFS;
 475
 476        /* ensure that the Qdisc and the private data are 32-byte aligned */
 477        size = QDISC_ALIGN(sizeof(*sch));
 478        size += ops->priv_size + (QDISC_ALIGNTO - 1);
 479
 480        p = kzalloc(size, GFP_KERNEL);
 481        if (!p)
 482                goto errout;
 483        sch = (struct Qdisc *) QDISC_ALIGN((unsigned long) p);
 484        sch->padded = (char *) sch - (char *) p;
 485
 486        INIT_LIST_HEAD(&sch->list);
 487        skb_queue_head_init(&sch->q);
 488        sch->ops = ops;
 489        sch->enqueue = ops->enqueue;
 490        sch->dequeue = ops->dequeue;
 491        sch->dev_queue = dev_queue;
 492        dev_hold(qdisc_dev(sch));
 493        atomic_set(&sch->refcnt, 1);
 494
 495        return sch;
 496errout:
 497        return ERR_PTR(err);
 498}
 499
 500struct Qdisc * qdisc_create_dflt(struct net_device *dev,
 501                                 struct netdev_queue *dev_queue,
 502                                 struct Qdisc_ops *ops,
 503                                 unsigned int parentid)
 504{
 505        struct Qdisc *sch;
 506
 507        sch = qdisc_alloc(dev_queue, ops);
 508        if (IS_ERR(sch))
 509                goto errout;
 510        sch->parent = parentid;
 511
 512        if (!ops->init || ops->init(sch, NULL) == 0)
 513                return sch;
 514
 515        qdisc_destroy(sch);
 516errout:
 517        return NULL;
 518}
 519EXPORT_SYMBOL(qdisc_create_dflt);
 520
 521/* Under qdisc_lock(qdisc) and BH! */
 522
 523void qdisc_reset(struct Qdisc *qdisc)
 524{
 525        const struct Qdisc_ops *ops = qdisc->ops;
 526
 527        if (ops->reset)
 528                ops->reset(qdisc);
 529
 530        kfree_skb(qdisc->gso_skb);
 531        qdisc->gso_skb = NULL;
 532}
 533EXPORT_SYMBOL(qdisc_reset);
 534
 535void qdisc_destroy(struct Qdisc *qdisc)
 536{
 537        const struct Qdisc_ops  *ops = qdisc->ops;
 538
 539        if (qdisc->flags & TCQ_F_BUILTIN ||
 540            !atomic_dec_and_test(&qdisc->refcnt))
 541                return;
 542
 543#ifdef CONFIG_NET_SCHED
 544        qdisc_list_del(qdisc);
 545
 546        qdisc_put_stab(qdisc->stab);
 547#endif
 548        gen_kill_estimator(&qdisc->bstats, &qdisc->rate_est);
 549        if (ops->reset)
 550                ops->reset(qdisc);
 551        if (ops->destroy)
 552                ops->destroy(qdisc);
 553
 554        module_put(ops->owner);
 555        dev_put(qdisc_dev(qdisc));
 556
 557        kfree_skb(qdisc->gso_skb);
 558        kfree((char *) qdisc - qdisc->padded);
 559}
 560EXPORT_SYMBOL(qdisc_destroy);
 561
 562static bool dev_all_qdisc_sleeping_noop(struct net_device *dev)
 563{
 564        unsigned int i;
 565
 566        for (i = 0; i < dev->num_tx_queues; i++) {
 567                struct netdev_queue *txq = netdev_get_tx_queue(dev, i);
 568
 569                if (txq->qdisc_sleeping != &noop_qdisc)
 570                        return false;
 571        }
 572        return true;
 573}
 574
 575static void attach_one_default_qdisc(struct net_device *dev,
 576                                     struct netdev_queue *dev_queue,
 577                                     void *_unused)
 578{
 579        struct Qdisc *qdisc;
 580
 581        if (dev->tx_queue_len) {
 582                qdisc = qdisc_create_dflt(dev, dev_queue,
 583                                          &pfifo_fast_ops, TC_H_ROOT);
 584                if (!qdisc) {
 585                        printk(KERN_INFO "%s: activation failed\n", dev->name);
 586                        return;
 587                }
 588        } else {
 589                qdisc =  &noqueue_qdisc;
 590        }
 591        dev_queue->qdisc_sleeping = qdisc;
 592}
 593
 594static void transition_one_qdisc(struct net_device *dev,
 595                                 struct netdev_queue *dev_queue,
 596                                 void *_need_watchdog)
 597{
 598        struct Qdisc *new_qdisc = dev_queue->qdisc_sleeping;
 599        int *need_watchdog_p = _need_watchdog;
 600
 601        if (!(new_qdisc->flags & TCQ_F_BUILTIN))
 602                clear_bit(__QDISC_STATE_DEACTIVATED, &new_qdisc->state);
 603
 604        rcu_assign_pointer(dev_queue->qdisc, new_qdisc);
 605        if (need_watchdog_p && new_qdisc != &noqueue_qdisc)
 606                *need_watchdog_p = 1;
 607}
 608
 609void dev_activate(struct net_device *dev)
 610{
 611        int need_watchdog;
 612
 613        /* No queueing discipline is attached to device;
 614           create default one i.e. pfifo_fast for devices,
 615           which need queueing and noqueue_qdisc for
 616           virtual interfaces
 617         */
 618
 619        if (dev_all_qdisc_sleeping_noop(dev))
 620                netdev_for_each_tx_queue(dev, attach_one_default_qdisc, NULL);
 621
 622        if (!netif_carrier_ok(dev))
 623                /* Delay activation until next carrier-on event */
 624                return;
 625
 626        need_watchdog = 0;
 627        netdev_for_each_tx_queue(dev, transition_one_qdisc, &need_watchdog);
 628        transition_one_qdisc(dev, &dev->rx_queue, NULL);
 629
 630        if (need_watchdog) {
 631                dev->trans_start = jiffies;
 632                dev_watchdog_up(dev);
 633        }
 634}
 635
 636static void dev_deactivate_queue(struct net_device *dev,
 637                                 struct netdev_queue *dev_queue,
 638                                 void *_qdisc_default)
 639{
 640        struct Qdisc *qdisc_default = _qdisc_default;
 641        struct Qdisc *qdisc;
 642
 643        qdisc = dev_queue->qdisc;
 644        if (qdisc) {
 645                spin_lock_bh(qdisc_lock(qdisc));
 646
 647                if (!(qdisc->flags & TCQ_F_BUILTIN))
 648                        set_bit(__QDISC_STATE_DEACTIVATED, &qdisc->state);
 649
 650                rcu_assign_pointer(dev_queue->qdisc, qdisc_default);
 651                qdisc_reset(qdisc);
 652
 653                spin_unlock_bh(qdisc_lock(qdisc));
 654        }
 655}
 656
 657static bool some_qdisc_is_busy(struct net_device *dev)
 658{
 659        unsigned int i;
 660
 661        for (i = 0; i < dev->num_tx_queues; i++) {
 662                struct netdev_queue *dev_queue;
 663                spinlock_t *root_lock;
 664                struct Qdisc *q;
 665                int val;
 666
 667                dev_queue = netdev_get_tx_queue(dev, i);
 668                q = dev_queue->qdisc_sleeping;
 669                root_lock = qdisc_lock(q);
 670
 671                spin_lock_bh(root_lock);
 672
 673                val = (test_bit(__QDISC_STATE_RUNNING, &q->state) ||
 674                       test_bit(__QDISC_STATE_SCHED, &q->state));
 675
 676                spin_unlock_bh(root_lock);
 677
 678                if (val)
 679                        return true;
 680        }
 681        return false;
 682}
 683
 684void dev_deactivate(struct net_device *dev)
 685{
 686        netdev_for_each_tx_queue(dev, dev_deactivate_queue, &noop_qdisc);
 687        dev_deactivate_queue(dev, &dev->rx_queue, &noop_qdisc);
 688
 689        dev_watchdog_down(dev);
 690
 691        /* Wait for outstanding qdisc-less dev_queue_xmit calls. */
 692        synchronize_rcu();
 693
 694        /* Wait for outstanding qdisc_run calls. */
 695        while (some_qdisc_is_busy(dev))
 696                yield();
 697}
 698
 699static void dev_init_scheduler_queue(struct net_device *dev,
 700                                     struct netdev_queue *dev_queue,
 701                                     void *_qdisc)
 702{
 703        struct Qdisc *qdisc = _qdisc;
 704
 705        dev_queue->qdisc = qdisc;
 706        dev_queue->qdisc_sleeping = qdisc;
 707}
 708
 709void dev_init_scheduler(struct net_device *dev)
 710{
 711        netdev_for_each_tx_queue(dev, dev_init_scheduler_queue, &noop_qdisc);
 712        dev_init_scheduler_queue(dev, &dev->rx_queue, &noop_qdisc);
 713
 714        setup_timer(&dev->watchdog_timer, dev_watchdog, (unsigned long)dev);
 715}
 716
 717static void shutdown_scheduler_queue(struct net_device *dev,
 718                                     struct netdev_queue *dev_queue,
 719                                     void *_qdisc_default)
 720{
 721        struct Qdisc *qdisc = dev_queue->qdisc_sleeping;
 722        struct Qdisc *qdisc_default = _qdisc_default;
 723
 724        if (qdisc) {
 725                rcu_assign_pointer(dev_queue->qdisc, qdisc_default);
 726                dev_queue->qdisc_sleeping = qdisc_default;
 727
 728                qdisc_destroy(qdisc);
 729        }
 730}
 731
 732void dev_shutdown(struct net_device *dev)
 733{
 734        netdev_for_each_tx_queue(dev, shutdown_scheduler_queue, &noop_qdisc);
 735        shutdown_scheduler_queue(dev, &dev->rx_queue, &noop_qdisc);
 736        WARN_ON(timer_pending(&dev->watchdog_timer));
 737}
 738