2 * net/sched/sch_generic.c Generic packet scheduler routines.
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.
9 * Authors: Alexey Kuznetsov, <kuznet@ms2.inr.ac.ru>
10 * Jamal Hadi Salim, <hadi@cyberus.ca> 990601
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 <linux/slab.h>
28 #include <net/sch_generic.h>
29 #include <net/pkt_sched.h>
32 /* Main transmission queue. */
34 /* Modifications to data participating in scheduling must be protected with
35 * qdisc_lock(qdisc) spinlock.
37 * The idea is the following:
38 * - enqueue, dequeue are serialized via qdisc root lock
39 * - ingress filtering is also serialized via qdisc root lock
40 * - updates to tree and tree walking are only done under the rtnl mutex.
43 static inline int dev_requeue_skb(struct sk_buff
*skb
, struct Qdisc
*q
)
48 q
->q
.qlen
++; /* it's still part of the queue */
54 static inline struct sk_buff
*dequeue_skb(struct Qdisc
*q
)
56 struct sk_buff
*skb
= q
->gso_skb
;
57 const struct netdev_queue
*txq
= q
->dev_queue
;
60 /* check the reason of requeuing without tx lock first */
61 txq
= netdev_get_tx_queue(txq
->dev
, skb_get_queue_mapping(skb
));
62 if (!netif_xmit_frozen_or_stopped(txq
)) {
68 if (!(q
->flags
& TCQ_F_ONETXQUEUE
) || !netif_xmit_frozen_or_stopped(txq
))
75 static inline int handle_dev_cpu_collision(struct sk_buff
*skb
,
76 struct netdev_queue
*dev_queue
,
81 if (unlikely(dev_queue
->xmit_lock_owner
== smp_processor_id())) {
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.
89 net_warn_ratelimited("Dead loop on netdevice %s, fix it urgently!\n",
90 dev_queue
->dev
->name
);
94 * Another cpu is holding lock, requeue & delay xmits for
97 __this_cpu_inc(softnet_data
.cpu_collision
);
98 ret
= dev_requeue_skb(skb
, q
);
105 * Transmit one skb, and handle the return status as required. Holding the
106 * __QDISC_STATE_RUNNING bit guarantees that only one CPU can execute this
109 * Returns to the caller:
110 * 0 - queue is empty or throttled.
111 * >0 - queue is not empty.
113 int sch_direct_xmit(struct sk_buff
*skb
, struct Qdisc
*q
,
114 struct net_device
*dev
, struct netdev_queue
*txq
,
115 spinlock_t
*root_lock
)
117 int ret
= NETDEV_TX_BUSY
;
119 /* And release qdisc */
120 spin_unlock(root_lock
);
122 HARD_TX_LOCK(dev
, txq
, smp_processor_id());
123 if (!netif_xmit_frozen_or_stopped(txq
))
124 ret
= dev_hard_start_xmit(skb
, dev
, txq
);
126 HARD_TX_UNLOCK(dev
, txq
);
128 spin_lock(root_lock
);
130 if (dev_xmit_complete(ret
)) {
131 /* Driver sent out skb successfully or skb was consumed */
133 } else if (ret
== NETDEV_TX_LOCKED
) {
134 /* Driver try lock failed */
135 ret
= handle_dev_cpu_collision(skb
, txq
, q
);
137 /* Driver returned NETDEV_TX_BUSY - requeue skb */
138 if (unlikely(ret
!= NETDEV_TX_BUSY
))
139 net_warn_ratelimited("BUG %s code %d qlen %d\n",
140 dev
->name
, ret
, q
->q
.qlen
);
142 ret
= dev_requeue_skb(skb
, q
);
145 if (ret
&& netif_xmit_frozen_or_stopped(txq
))
152 * NOTE: Called under qdisc_lock(q) with locally disabled BH.
154 * __QDISC_STATE_RUNNING guarantees only one CPU can process
155 * this qdisc at a time. qdisc_lock(q) serializes queue accesses for
158 * netif_tx_lock serializes accesses to device driver.
160 * qdisc_lock(q) and netif_tx_lock are mutually exclusive,
161 * if one is grabbed, another must be free.
163 * Note, that this procedure can be called by a watchdog timer
165 * Returns to the caller:
166 * 0 - queue is empty or throttled.
167 * >0 - queue is not empty.
170 static inline int qdisc_restart(struct Qdisc
*q
)
172 struct netdev_queue
*txq
;
173 struct net_device
*dev
;
174 spinlock_t
*root_lock
;
178 skb
= dequeue_skb(q
);
181 WARN_ON_ONCE(skb_dst_is_noref(skb
));
182 root_lock
= qdisc_lock(q
);
184 txq
= netdev_get_tx_queue(dev
, skb_get_queue_mapping(skb
));
186 return sch_direct_xmit(skb
, q
, dev
, txq
, root_lock
);
189 void __qdisc_run(struct Qdisc
*q
)
191 int quota
= weight_p
;
193 while (qdisc_restart(q
)) {
195 * Ordered by possible occurrence: Postpone processing if
196 * 1. we've exceeded packet quota
197 * 2. another process needs the CPU;
199 if (--quota
<= 0 || need_resched()) {
208 unsigned long dev_trans_start(struct net_device
*dev
)
210 unsigned long val
, res
= dev
->trans_start
;
213 for (i
= 0; i
< dev
->num_tx_queues
; i
++) {
214 val
= netdev_get_tx_queue(dev
, i
)->trans_start
;
215 if (val
&& time_after(val
, res
))
218 dev
->trans_start
= res
;
221 EXPORT_SYMBOL(dev_trans_start
);
223 static void dev_watchdog(unsigned long arg
)
225 struct net_device
*dev
= (struct net_device
*)arg
;
228 if (!qdisc_tx_is_noop(dev
)) {
229 if (netif_device_present(dev
) &&
230 netif_running(dev
) &&
231 netif_carrier_ok(dev
)) {
232 int some_queue_timedout
= 0;
234 unsigned long trans_start
;
236 for (i
= 0; i
< dev
->num_tx_queues
; i
++) {
237 struct netdev_queue
*txq
;
239 txq
= netdev_get_tx_queue(dev
, i
);
241 * old device drivers set dev->trans_start
243 trans_start
= txq
->trans_start
? : dev
->trans_start
;
244 if (netif_xmit_stopped(txq
) &&
245 time_after(jiffies
, (trans_start
+
246 dev
->watchdog_timeo
))) {
247 some_queue_timedout
= 1;
248 txq
->trans_timeout
++;
253 if (some_queue_timedout
) {
254 WARN_ONCE(1, KERN_INFO
"NETDEV WATCHDOG: %s (%s): transmit queue %u timed out\n",
255 dev
->name
, netdev_drivername(dev
), i
);
256 dev
->netdev_ops
->ndo_tx_timeout(dev
);
258 if (!mod_timer(&dev
->watchdog_timer
,
259 round_jiffies(jiffies
+
260 dev
->watchdog_timeo
)))
264 netif_tx_unlock(dev
);
269 void __netdev_watchdog_up(struct net_device
*dev
)
271 if (dev
->netdev_ops
->ndo_tx_timeout
) {
272 if (dev
->watchdog_timeo
<= 0)
273 dev
->watchdog_timeo
= 5*HZ
;
274 if (!mod_timer(&dev
->watchdog_timer
,
275 round_jiffies(jiffies
+ dev
->watchdog_timeo
)))
280 static void dev_watchdog_up(struct net_device
*dev
)
282 __netdev_watchdog_up(dev
);
285 static void dev_watchdog_down(struct net_device
*dev
)
287 netif_tx_lock_bh(dev
);
288 if (del_timer(&dev
->watchdog_timer
))
290 netif_tx_unlock_bh(dev
);
294 * netif_carrier_on - set carrier
295 * @dev: network device
297 * Device has detected that carrier.
299 void netif_carrier_on(struct net_device
*dev
)
301 if (test_and_clear_bit(__LINK_STATE_NOCARRIER
, &dev
->state
)) {
302 if (dev
->reg_state
== NETREG_UNINITIALIZED
)
304 linkwatch_fire_event(dev
);
305 if (netif_running(dev
))
306 __netdev_watchdog_up(dev
);
309 EXPORT_SYMBOL(netif_carrier_on
);
312 * netif_carrier_off - clear carrier
313 * @dev: network device
315 * Device has detected loss of carrier.
317 void netif_carrier_off(struct net_device
*dev
)
319 if (!test_and_set_bit(__LINK_STATE_NOCARRIER
, &dev
->state
)) {
320 if (dev
->reg_state
== NETREG_UNINITIALIZED
)
322 linkwatch_fire_event(dev
);
325 EXPORT_SYMBOL(netif_carrier_off
);
327 /* "NOOP" scheduler: the best scheduler, recommended for all interfaces
328 under all circumstances. It is difficult to invent anything faster or
332 static int noop_enqueue(struct sk_buff
*skb
, struct Qdisc
* qdisc
)
338 static struct sk_buff
*noop_dequeue(struct Qdisc
* qdisc
)
343 struct Qdisc_ops noop_qdisc_ops __read_mostly
= {
346 .enqueue
= noop_enqueue
,
347 .dequeue
= noop_dequeue
,
348 .peek
= noop_dequeue
,
349 .owner
= THIS_MODULE
,
352 static struct netdev_queue noop_netdev_queue
= {
353 .qdisc
= &noop_qdisc
,
354 .qdisc_sleeping
= &noop_qdisc
,
357 struct Qdisc noop_qdisc
= {
358 .enqueue
= noop_enqueue
,
359 .dequeue
= noop_dequeue
,
360 .flags
= TCQ_F_BUILTIN
,
361 .ops
= &noop_qdisc_ops
,
362 .list
= LIST_HEAD_INIT(noop_qdisc
.list
),
363 .q
.lock
= __SPIN_LOCK_UNLOCKED(noop_qdisc
.q
.lock
),
364 .dev_queue
= &noop_netdev_queue
,
365 .busylock
= __SPIN_LOCK_UNLOCKED(noop_qdisc
.busylock
),
367 EXPORT_SYMBOL(noop_qdisc
);
369 static struct Qdisc_ops noqueue_qdisc_ops __read_mostly
= {
372 .enqueue
= noop_enqueue
,
373 .dequeue
= noop_dequeue
,
374 .peek
= noop_dequeue
,
375 .owner
= THIS_MODULE
,
378 static struct Qdisc noqueue_qdisc
;
379 static struct netdev_queue noqueue_netdev_queue
= {
380 .qdisc
= &noqueue_qdisc
,
381 .qdisc_sleeping
= &noqueue_qdisc
,
384 static struct Qdisc noqueue_qdisc
= {
386 .dequeue
= noop_dequeue
,
387 .flags
= TCQ_F_BUILTIN
,
388 .ops
= &noqueue_qdisc_ops
,
389 .list
= LIST_HEAD_INIT(noqueue_qdisc
.list
),
390 .q
.lock
= __SPIN_LOCK_UNLOCKED(noqueue_qdisc
.q
.lock
),
391 .dev_queue
= &noqueue_netdev_queue
,
392 .busylock
= __SPIN_LOCK_UNLOCKED(noqueue_qdisc
.busylock
),
396 static const u8 prio2band
[TC_PRIO_MAX
+ 1] = {
397 1, 2, 2, 2, 1, 2, 0, 0 , 1, 1, 1, 1, 1, 1, 1, 1
400 /* 3-band FIFO queue: old style, but should be a bit faster than
401 generic prio+fifo combination.
404 #define PFIFO_FAST_BANDS 3
407 * Private data for a pfifo_fast scheduler containing:
408 * - queues for the three band
409 * - bitmap indicating which of the bands contain skbs
411 struct pfifo_fast_priv
{
413 struct sk_buff_head q
[PFIFO_FAST_BANDS
];
417 * Convert a bitmap to the first band number where an skb is queued, where:
418 * bitmap=0 means there are no skbs on any band.
419 * bitmap=1 means there is an skb on band 0.
420 * bitmap=7 means there are skbs on all 3 bands, etc.
422 static const int bitmap2band
[] = {-1, 0, 1, 0, 2, 0, 1, 0};
424 static inline struct sk_buff_head
*band2list(struct pfifo_fast_priv
*priv
,
427 return priv
->q
+ band
;
430 static int pfifo_fast_enqueue(struct sk_buff
*skb
, struct Qdisc
*qdisc
)
432 if (skb_queue_len(&qdisc
->q
) < qdisc_dev(qdisc
)->tx_queue_len
) {
433 int band
= prio2band
[skb
->priority
& TC_PRIO_MAX
];
434 struct pfifo_fast_priv
*priv
= qdisc_priv(qdisc
);
435 struct sk_buff_head
*list
= band2list(priv
, band
);
437 priv
->bitmap
|= (1 << band
);
439 return __qdisc_enqueue_tail(skb
, qdisc
, list
);
442 return qdisc_drop(skb
, qdisc
);
445 static struct sk_buff
*pfifo_fast_dequeue(struct Qdisc
*qdisc
)
447 struct pfifo_fast_priv
*priv
= qdisc_priv(qdisc
);
448 int band
= bitmap2band
[priv
->bitmap
];
450 if (likely(band
>= 0)) {
451 struct sk_buff_head
*list
= band2list(priv
, band
);
452 struct sk_buff
*skb
= __qdisc_dequeue_head(qdisc
, list
);
455 if (skb_queue_empty(list
))
456 priv
->bitmap
&= ~(1 << band
);
464 static struct sk_buff
*pfifo_fast_peek(struct Qdisc
*qdisc
)
466 struct pfifo_fast_priv
*priv
= qdisc_priv(qdisc
);
467 int band
= bitmap2band
[priv
->bitmap
];
470 struct sk_buff_head
*list
= band2list(priv
, band
);
472 return skb_peek(list
);
478 static void pfifo_fast_reset(struct Qdisc
*qdisc
)
481 struct pfifo_fast_priv
*priv
= qdisc_priv(qdisc
);
483 for (prio
= 0; prio
< PFIFO_FAST_BANDS
; prio
++)
484 __qdisc_reset_queue(qdisc
, band2list(priv
, prio
));
487 qdisc
->qstats
.backlog
= 0;
491 static int pfifo_fast_dump(struct Qdisc
*qdisc
, struct sk_buff
*skb
)
493 struct tc_prio_qopt opt
= { .bands
= PFIFO_FAST_BANDS
};
495 memcpy(&opt
.priomap
, prio2band
, TC_PRIO_MAX
+ 1);
496 if (nla_put(skb
, TCA_OPTIONS
, sizeof(opt
), &opt
))
497 goto nla_put_failure
;
504 static int pfifo_fast_init(struct Qdisc
*qdisc
, struct nlattr
*opt
)
507 struct pfifo_fast_priv
*priv
= qdisc_priv(qdisc
);
509 for (prio
= 0; prio
< PFIFO_FAST_BANDS
; prio
++)
510 skb_queue_head_init(band2list(priv
, prio
));
512 /* Can by-pass the queue discipline */
513 qdisc
->flags
|= TCQ_F_CAN_BYPASS
;
517 struct Qdisc_ops pfifo_fast_ops __read_mostly
= {
519 .priv_size
= sizeof(struct pfifo_fast_priv
),
520 .enqueue
= pfifo_fast_enqueue
,
521 .dequeue
= pfifo_fast_dequeue
,
522 .peek
= pfifo_fast_peek
,
523 .init
= pfifo_fast_init
,
524 .reset
= pfifo_fast_reset
,
525 .dump
= pfifo_fast_dump
,
526 .owner
= THIS_MODULE
,
528 EXPORT_SYMBOL(pfifo_fast_ops
);
530 static struct lock_class_key qdisc_tx_busylock
;
532 struct Qdisc
*qdisc_alloc(struct netdev_queue
*dev_queue
,
533 struct Qdisc_ops
*ops
)
537 unsigned int size
= QDISC_ALIGN(sizeof(*sch
)) + ops
->priv_size
;
539 struct net_device
*dev
= dev_queue
->dev
;
541 p
= kzalloc_node(size
, GFP_KERNEL
,
542 netdev_queue_numa_node_read(dev_queue
));
546 sch
= (struct Qdisc
*) QDISC_ALIGN((unsigned long) p
);
547 /* if we got non aligned memory, ask more and do alignment ourself */
550 p
= kzalloc_node(size
+ QDISC_ALIGNTO
- 1, GFP_KERNEL
,
551 netdev_queue_numa_node_read(dev_queue
));
554 sch
= (struct Qdisc
*) QDISC_ALIGN((unsigned long) p
);
555 sch
->padded
= (char *) sch
- (char *) p
;
557 INIT_LIST_HEAD(&sch
->list
);
558 skb_queue_head_init(&sch
->q
);
560 spin_lock_init(&sch
->busylock
);
561 lockdep_set_class(&sch
->busylock
,
562 dev
->qdisc_tx_busylock
?: &qdisc_tx_busylock
);
565 sch
->enqueue
= ops
->enqueue
;
566 sch
->dequeue
= ops
->dequeue
;
567 sch
->dev_queue
= dev_queue
;
569 atomic_set(&sch
->refcnt
, 1);
576 struct Qdisc
*qdisc_create_dflt(struct netdev_queue
*dev_queue
,
577 struct Qdisc_ops
*ops
, unsigned int parentid
)
581 sch
= qdisc_alloc(dev_queue
, ops
);
584 sch
->parent
= parentid
;
586 if (!ops
->init
|| ops
->init(sch
, NULL
) == 0)
593 EXPORT_SYMBOL(qdisc_create_dflt
);
595 /* Under qdisc_lock(qdisc) and BH! */
597 void qdisc_reset(struct Qdisc
*qdisc
)
599 const struct Qdisc_ops
*ops
= qdisc
->ops
;
604 if (qdisc
->gso_skb
) {
605 kfree_skb(qdisc
->gso_skb
);
606 qdisc
->gso_skb
= NULL
;
610 EXPORT_SYMBOL(qdisc_reset
);
612 static void qdisc_rcu_free(struct rcu_head
*head
)
614 struct Qdisc
*qdisc
= container_of(head
, struct Qdisc
, rcu_head
);
616 kfree((char *) qdisc
- qdisc
->padded
);
619 void qdisc_destroy(struct Qdisc
*qdisc
)
621 const struct Qdisc_ops
*ops
= qdisc
->ops
;
623 if (qdisc
->flags
& TCQ_F_BUILTIN
||
624 !atomic_dec_and_test(&qdisc
->refcnt
))
627 #ifdef CONFIG_NET_SCHED
628 qdisc_list_del(qdisc
);
630 qdisc_put_stab(rtnl_dereference(qdisc
->stab
));
632 gen_kill_estimator(&qdisc
->bstats
, &qdisc
->rate_est
);
638 module_put(ops
->owner
);
639 dev_put(qdisc_dev(qdisc
));
641 kfree_skb(qdisc
->gso_skb
);
643 * gen_estimator est_timer() might access qdisc->q.lock,
644 * wait a RCU grace period before freeing qdisc.
646 call_rcu(&qdisc
->rcu_head
, qdisc_rcu_free
);
648 EXPORT_SYMBOL(qdisc_destroy
);
650 /* Attach toplevel qdisc to device queue. */
651 struct Qdisc
*dev_graft_qdisc(struct netdev_queue
*dev_queue
,
654 struct Qdisc
*oqdisc
= dev_queue
->qdisc_sleeping
;
655 spinlock_t
*root_lock
;
657 root_lock
= qdisc_lock(oqdisc
);
658 spin_lock_bh(root_lock
);
660 /* Prune old scheduler */
661 if (oqdisc
&& atomic_read(&oqdisc
->refcnt
) <= 1)
664 /* ... and graft new one */
667 dev_queue
->qdisc_sleeping
= qdisc
;
668 rcu_assign_pointer(dev_queue
->qdisc
, &noop_qdisc
);
670 spin_unlock_bh(root_lock
);
674 EXPORT_SYMBOL(dev_graft_qdisc
);
676 static void attach_one_default_qdisc(struct net_device
*dev
,
677 struct netdev_queue
*dev_queue
,
680 struct Qdisc
*qdisc
= &noqueue_qdisc
;
682 if (dev
->tx_queue_len
) {
683 qdisc
= qdisc_create_dflt(dev_queue
,
684 &pfifo_fast_ops
, TC_H_ROOT
);
686 netdev_info(dev
, "activation failed\n");
689 if (!netif_is_multiqueue(dev
))
690 qdisc
->flags
|= TCQ_F_ONETXQUEUE
;
692 dev_queue
->qdisc_sleeping
= qdisc
;
695 static void attach_default_qdiscs(struct net_device
*dev
)
697 struct netdev_queue
*txq
;
700 txq
= netdev_get_tx_queue(dev
, 0);
702 if (!netif_is_multiqueue(dev
) || dev
->tx_queue_len
== 0) {
703 netdev_for_each_tx_queue(dev
, attach_one_default_qdisc
, NULL
);
704 dev
->qdisc
= txq
->qdisc_sleeping
;
705 atomic_inc(&dev
->qdisc
->refcnt
);
707 qdisc
= qdisc_create_dflt(txq
, &mq_qdisc_ops
, TC_H_ROOT
);
709 qdisc
->ops
->attach(qdisc
);
715 static void transition_one_qdisc(struct net_device
*dev
,
716 struct netdev_queue
*dev_queue
,
717 void *_need_watchdog
)
719 struct Qdisc
*new_qdisc
= dev_queue
->qdisc_sleeping
;
720 int *need_watchdog_p
= _need_watchdog
;
722 if (!(new_qdisc
->flags
& TCQ_F_BUILTIN
))
723 clear_bit(__QDISC_STATE_DEACTIVATED
, &new_qdisc
->state
);
725 rcu_assign_pointer(dev_queue
->qdisc
, new_qdisc
);
726 if (need_watchdog_p
&& new_qdisc
!= &noqueue_qdisc
) {
727 dev_queue
->trans_start
= 0;
728 *need_watchdog_p
= 1;
732 void dev_activate(struct net_device
*dev
)
736 /* No queueing discipline is attached to device;
737 create default one i.e. pfifo_fast for devices,
738 which need queueing and noqueue_qdisc for
742 if (dev
->qdisc
== &noop_qdisc
)
743 attach_default_qdiscs(dev
);
745 if (!netif_carrier_ok(dev
))
746 /* Delay activation until next carrier-on event */
750 netdev_for_each_tx_queue(dev
, transition_one_qdisc
, &need_watchdog
);
751 if (dev_ingress_queue(dev
))
752 transition_one_qdisc(dev
, dev_ingress_queue(dev
), NULL
);
755 dev
->trans_start
= jiffies
;
756 dev_watchdog_up(dev
);
759 EXPORT_SYMBOL(dev_activate
);
761 static void dev_deactivate_queue(struct net_device
*dev
,
762 struct netdev_queue
*dev_queue
,
763 void *_qdisc_default
)
765 struct Qdisc
*qdisc_default
= _qdisc_default
;
768 qdisc
= dev_queue
->qdisc
;
770 spin_lock_bh(qdisc_lock(qdisc
));
772 if (!(qdisc
->flags
& TCQ_F_BUILTIN
))
773 set_bit(__QDISC_STATE_DEACTIVATED
, &qdisc
->state
);
775 rcu_assign_pointer(dev_queue
->qdisc
, qdisc_default
);
778 spin_unlock_bh(qdisc_lock(qdisc
));
782 static bool some_qdisc_is_busy(struct net_device
*dev
)
786 for (i
= 0; i
< dev
->num_tx_queues
; i
++) {
787 struct netdev_queue
*dev_queue
;
788 spinlock_t
*root_lock
;
792 dev_queue
= netdev_get_tx_queue(dev
, i
);
793 q
= dev_queue
->qdisc_sleeping
;
794 root_lock
= qdisc_lock(q
);
796 spin_lock_bh(root_lock
);
798 val
= (qdisc_is_running(q
) ||
799 test_bit(__QDISC_STATE_SCHED
, &q
->state
));
801 spin_unlock_bh(root_lock
);
810 * dev_deactivate_many - deactivate transmissions on several devices
811 * @head: list of devices to deactivate
813 * This function returns only when all outstanding transmissions
814 * have completed, unless all devices are in dismantle phase.
816 void dev_deactivate_many(struct list_head
*head
)
818 struct net_device
*dev
;
819 bool sync_needed
= false;
821 list_for_each_entry(dev
, head
, unreg_list
) {
822 netdev_for_each_tx_queue(dev
, dev_deactivate_queue
,
824 if (dev_ingress_queue(dev
))
825 dev_deactivate_queue(dev
, dev_ingress_queue(dev
),
828 dev_watchdog_down(dev
);
829 sync_needed
|= !dev
->dismantle
;
832 /* Wait for outstanding qdisc-less dev_queue_xmit calls.
833 * This is avoided if all devices are in dismantle phase :
834 * Caller will call synchronize_net() for us
839 /* Wait for outstanding qdisc_run calls. */
840 list_for_each_entry(dev
, head
, unreg_list
)
841 while (some_qdisc_is_busy(dev
))
845 void dev_deactivate(struct net_device
*dev
)
849 list_add(&dev
->unreg_list
, &single
);
850 dev_deactivate_many(&single
);
853 EXPORT_SYMBOL(dev_deactivate
);
855 static void dev_init_scheduler_queue(struct net_device
*dev
,
856 struct netdev_queue
*dev_queue
,
859 struct Qdisc
*qdisc
= _qdisc
;
861 dev_queue
->qdisc
= qdisc
;
862 dev_queue
->qdisc_sleeping
= qdisc
;
865 void dev_init_scheduler(struct net_device
*dev
)
867 dev
->qdisc
= &noop_qdisc
;
868 netdev_for_each_tx_queue(dev
, dev_init_scheduler_queue
, &noop_qdisc
);
869 if (dev_ingress_queue(dev
))
870 dev_init_scheduler_queue(dev
, dev_ingress_queue(dev
), &noop_qdisc
);
872 setup_timer(&dev
->watchdog_timer
, dev_watchdog
, (unsigned long)dev
);
875 static void shutdown_scheduler_queue(struct net_device
*dev
,
876 struct netdev_queue
*dev_queue
,
877 void *_qdisc_default
)
879 struct Qdisc
*qdisc
= dev_queue
->qdisc_sleeping
;
880 struct Qdisc
*qdisc_default
= _qdisc_default
;
883 rcu_assign_pointer(dev_queue
->qdisc
, qdisc_default
);
884 dev_queue
->qdisc_sleeping
= qdisc_default
;
886 qdisc_destroy(qdisc
);
890 void dev_shutdown(struct net_device
*dev
)
892 netdev_for_each_tx_queue(dev
, shutdown_scheduler_queue
, &noop_qdisc
);
893 if (dev_ingress_queue(dev
))
894 shutdown_scheduler_queue(dev
, dev_ingress_queue(dev
), &noop_qdisc
);
895 qdisc_destroy(dev
->qdisc
);
896 dev
->qdisc
= &noop_qdisc
;
898 WARN_ON(timer_pending(&dev
->watchdog_timer
));
901 void psched_ratecfg_precompute(struct psched_ratecfg
*r
,
902 const struct tc_ratespec
*conf
)
904 memset(r
, 0, sizeof(*r
));
905 r
->overhead
= conf
->overhead
;
906 r
->rate_bytes_ps
= conf
->rate
;
909 * The deal here is to replace a divide by a reciprocal one
910 * in fast path (a reciprocal divide is a multiply and a shift)
912 * Normal formula would be :
913 * time_in_ns = (NSEC_PER_SEC * len) / rate_bps
915 * We compute mult/shift to use instead :
916 * time_in_ns = (len * mult) >> shift;
918 * We try to get the highest possible mult value for accuracy,
919 * but have to make sure no overflows will ever happen.
921 if (r
->rate_bytes_ps
> 0) {
922 u64 factor
= NSEC_PER_SEC
;
925 r
->mult
= div64_u64(factor
, r
->rate_bytes_ps
);
926 if (r
->mult
& (1U << 31) || factor
& (1ULL << 63))
933 EXPORT_SYMBOL(psched_ratecfg_precompute
);