xref: /openbmc/linux/net/sched/sch_generic.c (revision 74ba9207)
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 <linux/slab.h>
28 #include <linux/if_vlan.h>
29 #include <linux/skb_array.h>
30 #include <linux/if_macvlan.h>
31 #include <net/sch_generic.h>
32 #include <net/pkt_sched.h>
33 #include <net/dst.h>
34 #include <trace/events/qdisc.h>
35 #include <trace/events/net.h>
36 #include <net/xfrm.h>
37 
38 /* Qdisc to use by default */
39 const struct Qdisc_ops *default_qdisc_ops = &pfifo_fast_ops;
40 EXPORT_SYMBOL(default_qdisc_ops);
41 
42 /* Main transmission queue. */
43 
44 /* Modifications to data participating in scheduling must be protected with
45  * qdisc_lock(qdisc) spinlock.
46  *
47  * The idea is the following:
48  * - enqueue, dequeue are serialized via qdisc root lock
49  * - ingress filtering is also serialized via qdisc root lock
50  * - updates to tree and tree walking are only done under the rtnl mutex.
51  */
52 
53 static inline struct sk_buff *__skb_dequeue_bad_txq(struct Qdisc *q)
54 {
55 	const struct netdev_queue *txq = q->dev_queue;
56 	spinlock_t *lock = NULL;
57 	struct sk_buff *skb;
58 
59 	if (q->flags & TCQ_F_NOLOCK) {
60 		lock = qdisc_lock(q);
61 		spin_lock(lock);
62 	}
63 
64 	skb = skb_peek(&q->skb_bad_txq);
65 	if (skb) {
66 		/* check the reason of requeuing without tx lock first */
67 		txq = skb_get_tx_queue(txq->dev, skb);
68 		if (!netif_xmit_frozen_or_stopped(txq)) {
69 			skb = __skb_dequeue(&q->skb_bad_txq);
70 			if (qdisc_is_percpu_stats(q)) {
71 				qdisc_qstats_cpu_backlog_dec(q, skb);
72 				qdisc_qstats_cpu_qlen_dec(q);
73 			} else {
74 				qdisc_qstats_backlog_dec(q, skb);
75 				q->q.qlen--;
76 			}
77 		} else {
78 			skb = NULL;
79 		}
80 	}
81 
82 	if (lock)
83 		spin_unlock(lock);
84 
85 	return skb;
86 }
87 
88 static inline struct sk_buff *qdisc_dequeue_skb_bad_txq(struct Qdisc *q)
89 {
90 	struct sk_buff *skb = skb_peek(&q->skb_bad_txq);
91 
92 	if (unlikely(skb))
93 		skb = __skb_dequeue_bad_txq(q);
94 
95 	return skb;
96 }
97 
98 static inline void qdisc_enqueue_skb_bad_txq(struct Qdisc *q,
99 					     struct sk_buff *skb)
100 {
101 	spinlock_t *lock = NULL;
102 
103 	if (q->flags & TCQ_F_NOLOCK) {
104 		lock = qdisc_lock(q);
105 		spin_lock(lock);
106 	}
107 
108 	__skb_queue_tail(&q->skb_bad_txq, skb);
109 
110 	if (qdisc_is_percpu_stats(q)) {
111 		qdisc_qstats_cpu_backlog_inc(q, skb);
112 		qdisc_qstats_cpu_qlen_inc(q);
113 	} else {
114 		qdisc_qstats_backlog_inc(q, skb);
115 		q->q.qlen++;
116 	}
117 
118 	if (lock)
119 		spin_unlock(lock);
120 }
121 
122 static inline void dev_requeue_skb(struct sk_buff *skb, struct Qdisc *q)
123 {
124 	spinlock_t *lock = NULL;
125 
126 	if (q->flags & TCQ_F_NOLOCK) {
127 		lock = qdisc_lock(q);
128 		spin_lock(lock);
129 	}
130 
131 	while (skb) {
132 		struct sk_buff *next = skb->next;
133 
134 		__skb_queue_tail(&q->gso_skb, skb);
135 
136 		/* it's still part of the queue */
137 		if (qdisc_is_percpu_stats(q)) {
138 			qdisc_qstats_cpu_requeues_inc(q);
139 			qdisc_qstats_cpu_backlog_inc(q, skb);
140 			qdisc_qstats_cpu_qlen_inc(q);
141 		} else {
142 			q->qstats.requeues++;
143 			qdisc_qstats_backlog_inc(q, skb);
144 			q->q.qlen++;
145 		}
146 
147 		skb = next;
148 	}
149 	if (lock)
150 		spin_unlock(lock);
151 	__netif_schedule(q);
152 }
153 
154 static void try_bulk_dequeue_skb(struct Qdisc *q,
155 				 struct sk_buff *skb,
156 				 const struct netdev_queue *txq,
157 				 int *packets)
158 {
159 	int bytelimit = qdisc_avail_bulklimit(txq) - skb->len;
160 
161 	while (bytelimit > 0) {
162 		struct sk_buff *nskb = q->dequeue(q);
163 
164 		if (!nskb)
165 			break;
166 
167 		bytelimit -= nskb->len; /* covers GSO len */
168 		skb->next = nskb;
169 		skb = nskb;
170 		(*packets)++; /* GSO counts as one pkt */
171 	}
172 	skb_mark_not_on_list(skb);
173 }
174 
175 /* This variant of try_bulk_dequeue_skb() makes sure
176  * all skbs in the chain are for the same txq
177  */
178 static void try_bulk_dequeue_skb_slow(struct Qdisc *q,
179 				      struct sk_buff *skb,
180 				      int *packets)
181 {
182 	int mapping = skb_get_queue_mapping(skb);
183 	struct sk_buff *nskb;
184 	int cnt = 0;
185 
186 	do {
187 		nskb = q->dequeue(q);
188 		if (!nskb)
189 			break;
190 		if (unlikely(skb_get_queue_mapping(nskb) != mapping)) {
191 			qdisc_enqueue_skb_bad_txq(q, nskb);
192 			break;
193 		}
194 		skb->next = nskb;
195 		skb = nskb;
196 	} while (++cnt < 8);
197 	(*packets) += cnt;
198 	skb_mark_not_on_list(skb);
199 }
200 
201 /* Note that dequeue_skb can possibly return a SKB list (via skb->next).
202  * A requeued skb (via q->gso_skb) can also be a SKB list.
203  */
204 static struct sk_buff *dequeue_skb(struct Qdisc *q, bool *validate,
205 				   int *packets)
206 {
207 	const struct netdev_queue *txq = q->dev_queue;
208 	struct sk_buff *skb = NULL;
209 
210 	*packets = 1;
211 	if (unlikely(!skb_queue_empty(&q->gso_skb))) {
212 		spinlock_t *lock = NULL;
213 
214 		if (q->flags & TCQ_F_NOLOCK) {
215 			lock = qdisc_lock(q);
216 			spin_lock(lock);
217 		}
218 
219 		skb = skb_peek(&q->gso_skb);
220 
221 		/* skb may be null if another cpu pulls gso_skb off in between
222 		 * empty check and lock.
223 		 */
224 		if (!skb) {
225 			if (lock)
226 				spin_unlock(lock);
227 			goto validate;
228 		}
229 
230 		/* skb in gso_skb were already validated */
231 		*validate = false;
232 		if (xfrm_offload(skb))
233 			*validate = true;
234 		/* check the reason of requeuing without tx lock first */
235 		txq = skb_get_tx_queue(txq->dev, skb);
236 		if (!netif_xmit_frozen_or_stopped(txq)) {
237 			skb = __skb_dequeue(&q->gso_skb);
238 			if (qdisc_is_percpu_stats(q)) {
239 				qdisc_qstats_cpu_backlog_dec(q, skb);
240 				qdisc_qstats_cpu_qlen_dec(q);
241 			} else {
242 				qdisc_qstats_backlog_dec(q, skb);
243 				q->q.qlen--;
244 			}
245 		} else {
246 			skb = NULL;
247 		}
248 		if (lock)
249 			spin_unlock(lock);
250 		goto trace;
251 	}
252 validate:
253 	*validate = true;
254 
255 	if ((q->flags & TCQ_F_ONETXQUEUE) &&
256 	    netif_xmit_frozen_or_stopped(txq))
257 		return skb;
258 
259 	skb = qdisc_dequeue_skb_bad_txq(q);
260 	if (unlikely(skb))
261 		goto bulk;
262 	skb = q->dequeue(q);
263 	if (skb) {
264 bulk:
265 		if (qdisc_may_bulk(q))
266 			try_bulk_dequeue_skb(q, skb, txq, packets);
267 		else
268 			try_bulk_dequeue_skb_slow(q, skb, packets);
269 	}
270 trace:
271 	trace_qdisc_dequeue(q, txq, *packets, skb);
272 	return skb;
273 }
274 
275 /*
276  * Transmit possibly several skbs, and handle the return status as
277  * required. Owning running seqcount bit guarantees that
278  * only one CPU can execute this function.
279  *
280  * Returns to the caller:
281  *				false  - hardware queue frozen backoff
282  *				true   - feel free to send more pkts
283  */
284 bool sch_direct_xmit(struct sk_buff *skb, struct Qdisc *q,
285 		     struct net_device *dev, struct netdev_queue *txq,
286 		     spinlock_t *root_lock, bool validate)
287 {
288 	int ret = NETDEV_TX_BUSY;
289 	bool again = false;
290 
291 	/* And release qdisc */
292 	if (root_lock)
293 		spin_unlock(root_lock);
294 
295 	/* Note that we validate skb (GSO, checksum, ...) outside of locks */
296 	if (validate)
297 		skb = validate_xmit_skb_list(skb, dev, &again);
298 
299 #ifdef CONFIG_XFRM_OFFLOAD
300 	if (unlikely(again)) {
301 		if (root_lock)
302 			spin_lock(root_lock);
303 
304 		dev_requeue_skb(skb, q);
305 		return false;
306 	}
307 #endif
308 
309 	if (likely(skb)) {
310 		HARD_TX_LOCK(dev, txq, smp_processor_id());
311 		if (!netif_xmit_frozen_or_stopped(txq))
312 			skb = dev_hard_start_xmit(skb, dev, txq, &ret);
313 
314 		HARD_TX_UNLOCK(dev, txq);
315 	} else {
316 		if (root_lock)
317 			spin_lock(root_lock);
318 		return true;
319 	}
320 
321 	if (root_lock)
322 		spin_lock(root_lock);
323 
324 	if (!dev_xmit_complete(ret)) {
325 		/* Driver returned NETDEV_TX_BUSY - requeue skb */
326 		if (unlikely(ret != NETDEV_TX_BUSY))
327 			net_warn_ratelimited("BUG %s code %d qlen %d\n",
328 					     dev->name, ret, q->q.qlen);
329 
330 		dev_requeue_skb(skb, q);
331 		return false;
332 	}
333 
334 	return true;
335 }
336 
337 /*
338  * NOTE: Called under qdisc_lock(q) with locally disabled BH.
339  *
340  * running seqcount guarantees only one CPU can process
341  * this qdisc at a time. qdisc_lock(q) serializes queue accesses for
342  * this queue.
343  *
344  *  netif_tx_lock serializes accesses to device driver.
345  *
346  *  qdisc_lock(q) and netif_tx_lock are mutually exclusive,
347  *  if one is grabbed, another must be free.
348  *
349  * Note, that this procedure can be called by a watchdog timer
350  *
351  * Returns to the caller:
352  *				0  - queue is empty or throttled.
353  *				>0 - queue is not empty.
354  *
355  */
356 static inline bool qdisc_restart(struct Qdisc *q, int *packets)
357 {
358 	spinlock_t *root_lock = NULL;
359 	struct netdev_queue *txq;
360 	struct net_device *dev;
361 	struct sk_buff *skb;
362 	bool validate;
363 
364 	/* Dequeue packet */
365 	skb = dequeue_skb(q, &validate, packets);
366 	if (unlikely(!skb))
367 		return false;
368 
369 	if (!(q->flags & TCQ_F_NOLOCK))
370 		root_lock = qdisc_lock(q);
371 
372 	dev = qdisc_dev(q);
373 	txq = skb_get_tx_queue(dev, skb);
374 
375 	return sch_direct_xmit(skb, q, dev, txq, root_lock, validate);
376 }
377 
378 void __qdisc_run(struct Qdisc *q)
379 {
380 	int quota = dev_tx_weight;
381 	int packets;
382 
383 	while (qdisc_restart(q, &packets)) {
384 		/*
385 		 * Ordered by possible occurrence: Postpone processing if
386 		 * 1. we've exceeded packet quota
387 		 * 2. another process needs the CPU;
388 		 */
389 		quota -= packets;
390 		if (quota <= 0 || need_resched()) {
391 			__netif_schedule(q);
392 			break;
393 		}
394 	}
395 }
396 
397 unsigned long dev_trans_start(struct net_device *dev)
398 {
399 	unsigned long val, res;
400 	unsigned int i;
401 
402 	if (is_vlan_dev(dev))
403 		dev = vlan_dev_real_dev(dev);
404 	else if (netif_is_macvlan(dev))
405 		dev = macvlan_dev_real_dev(dev);
406 	res = netdev_get_tx_queue(dev, 0)->trans_start;
407 	for (i = 1; i < dev->num_tx_queues; i++) {
408 		val = netdev_get_tx_queue(dev, i)->trans_start;
409 		if (val && time_after(val, res))
410 			res = val;
411 	}
412 
413 	return res;
414 }
415 EXPORT_SYMBOL(dev_trans_start);
416 
417 static void dev_watchdog(struct timer_list *t)
418 {
419 	struct net_device *dev = from_timer(dev, t, watchdog_timer);
420 
421 	netif_tx_lock(dev);
422 	if (!qdisc_tx_is_noop(dev)) {
423 		if (netif_device_present(dev) &&
424 		    netif_running(dev) &&
425 		    netif_carrier_ok(dev)) {
426 			int some_queue_timedout = 0;
427 			unsigned int i;
428 			unsigned long trans_start;
429 
430 			for (i = 0; i < dev->num_tx_queues; i++) {
431 				struct netdev_queue *txq;
432 
433 				txq = netdev_get_tx_queue(dev, i);
434 				trans_start = txq->trans_start;
435 				if (netif_xmit_stopped(txq) &&
436 				    time_after(jiffies, (trans_start +
437 							 dev->watchdog_timeo))) {
438 					some_queue_timedout = 1;
439 					txq->trans_timeout++;
440 					break;
441 				}
442 			}
443 
444 			if (some_queue_timedout) {
445 				trace_net_dev_xmit_timeout(dev, i);
446 				WARN_ONCE(1, KERN_INFO "NETDEV WATCHDOG: %s (%s): transmit queue %u timed out\n",
447 				       dev->name, netdev_drivername(dev), i);
448 				dev->netdev_ops->ndo_tx_timeout(dev);
449 			}
450 			if (!mod_timer(&dev->watchdog_timer,
451 				       round_jiffies(jiffies +
452 						     dev->watchdog_timeo)))
453 				dev_hold(dev);
454 		}
455 	}
456 	netif_tx_unlock(dev);
457 
458 	dev_put(dev);
459 }
460 
461 void __netdev_watchdog_up(struct net_device *dev)
462 {
463 	if (dev->netdev_ops->ndo_tx_timeout) {
464 		if (dev->watchdog_timeo <= 0)
465 			dev->watchdog_timeo = 5*HZ;
466 		if (!mod_timer(&dev->watchdog_timer,
467 			       round_jiffies(jiffies + dev->watchdog_timeo)))
468 			dev_hold(dev);
469 	}
470 }
471 
472 static void dev_watchdog_up(struct net_device *dev)
473 {
474 	__netdev_watchdog_up(dev);
475 }
476 
477 static void dev_watchdog_down(struct net_device *dev)
478 {
479 	netif_tx_lock_bh(dev);
480 	if (del_timer(&dev->watchdog_timer))
481 		dev_put(dev);
482 	netif_tx_unlock_bh(dev);
483 }
484 
485 /**
486  *	netif_carrier_on - set carrier
487  *	@dev: network device
488  *
489  * Device has detected acquisition of carrier.
490  */
491 void netif_carrier_on(struct net_device *dev)
492 {
493 	if (test_and_clear_bit(__LINK_STATE_NOCARRIER, &dev->state)) {
494 		if (dev->reg_state == NETREG_UNINITIALIZED)
495 			return;
496 		atomic_inc(&dev->carrier_up_count);
497 		linkwatch_fire_event(dev);
498 		if (netif_running(dev))
499 			__netdev_watchdog_up(dev);
500 	}
501 }
502 EXPORT_SYMBOL(netif_carrier_on);
503 
504 /**
505  *	netif_carrier_off - clear carrier
506  *	@dev: network device
507  *
508  * Device has detected loss of carrier.
509  */
510 void netif_carrier_off(struct net_device *dev)
511 {
512 	if (!test_and_set_bit(__LINK_STATE_NOCARRIER, &dev->state)) {
513 		if (dev->reg_state == NETREG_UNINITIALIZED)
514 			return;
515 		atomic_inc(&dev->carrier_down_count);
516 		linkwatch_fire_event(dev);
517 	}
518 }
519 EXPORT_SYMBOL(netif_carrier_off);
520 
521 /* "NOOP" scheduler: the best scheduler, recommended for all interfaces
522    under all circumstances. It is difficult to invent anything faster or
523    cheaper.
524  */
525 
526 static int noop_enqueue(struct sk_buff *skb, struct Qdisc *qdisc,
527 			struct sk_buff **to_free)
528 {
529 	__qdisc_drop(skb, to_free);
530 	return NET_XMIT_CN;
531 }
532 
533 static struct sk_buff *noop_dequeue(struct Qdisc *qdisc)
534 {
535 	return NULL;
536 }
537 
538 struct Qdisc_ops noop_qdisc_ops __read_mostly = {
539 	.id		=	"noop",
540 	.priv_size	=	0,
541 	.enqueue	=	noop_enqueue,
542 	.dequeue	=	noop_dequeue,
543 	.peek		=	noop_dequeue,
544 	.owner		=	THIS_MODULE,
545 };
546 
547 static struct netdev_queue noop_netdev_queue = {
548 	RCU_POINTER_INITIALIZER(qdisc, &noop_qdisc),
549 	.qdisc_sleeping	=	&noop_qdisc,
550 };
551 
552 struct Qdisc noop_qdisc = {
553 	.enqueue	=	noop_enqueue,
554 	.dequeue	=	noop_dequeue,
555 	.flags		=	TCQ_F_BUILTIN,
556 	.ops		=	&noop_qdisc_ops,
557 	.q.lock		=	__SPIN_LOCK_UNLOCKED(noop_qdisc.q.lock),
558 	.dev_queue	=	&noop_netdev_queue,
559 	.running	=	SEQCNT_ZERO(noop_qdisc.running),
560 	.busylock	=	__SPIN_LOCK_UNLOCKED(noop_qdisc.busylock),
561 	.gso_skb = {
562 		.next = (struct sk_buff *)&noop_qdisc.gso_skb,
563 		.prev = (struct sk_buff *)&noop_qdisc.gso_skb,
564 		.qlen = 0,
565 		.lock = __SPIN_LOCK_UNLOCKED(noop_qdisc.gso_skb.lock),
566 	},
567 	.skb_bad_txq = {
568 		.next = (struct sk_buff *)&noop_qdisc.skb_bad_txq,
569 		.prev = (struct sk_buff *)&noop_qdisc.skb_bad_txq,
570 		.qlen = 0,
571 		.lock = __SPIN_LOCK_UNLOCKED(noop_qdisc.skb_bad_txq.lock),
572 	},
573 };
574 EXPORT_SYMBOL(noop_qdisc);
575 
576 static int noqueue_init(struct Qdisc *qdisc, struct nlattr *opt,
577 			struct netlink_ext_ack *extack)
578 {
579 	/* register_qdisc() assigns a default of noop_enqueue if unset,
580 	 * but __dev_queue_xmit() treats noqueue only as such
581 	 * if this is NULL - so clear it here. */
582 	qdisc->enqueue = NULL;
583 	return 0;
584 }
585 
586 struct Qdisc_ops noqueue_qdisc_ops __read_mostly = {
587 	.id		=	"noqueue",
588 	.priv_size	=	0,
589 	.init		=	noqueue_init,
590 	.enqueue	=	noop_enqueue,
591 	.dequeue	=	noop_dequeue,
592 	.peek		=	noop_dequeue,
593 	.owner		=	THIS_MODULE,
594 };
595 
596 static const u8 prio2band[TC_PRIO_MAX + 1] = {
597 	1, 2, 2, 2, 1, 2, 0, 0 , 1, 1, 1, 1, 1, 1, 1, 1
598 };
599 
600 /* 3-band FIFO queue: old style, but should be a bit faster than
601    generic prio+fifo combination.
602  */
603 
604 #define PFIFO_FAST_BANDS 3
605 
606 /*
607  * Private data for a pfifo_fast scheduler containing:
608  *	- rings for priority bands
609  */
610 struct pfifo_fast_priv {
611 	struct skb_array q[PFIFO_FAST_BANDS];
612 };
613 
614 static inline struct skb_array *band2list(struct pfifo_fast_priv *priv,
615 					  int band)
616 {
617 	return &priv->q[band];
618 }
619 
620 static int pfifo_fast_enqueue(struct sk_buff *skb, struct Qdisc *qdisc,
621 			      struct sk_buff **to_free)
622 {
623 	int band = prio2band[skb->priority & TC_PRIO_MAX];
624 	struct pfifo_fast_priv *priv = qdisc_priv(qdisc);
625 	struct skb_array *q = band2list(priv, band);
626 	unsigned int pkt_len = qdisc_pkt_len(skb);
627 	int err;
628 
629 	err = skb_array_produce(q, skb);
630 
631 	if (unlikely(err))
632 		return qdisc_drop_cpu(skb, qdisc, to_free);
633 
634 	qdisc_update_stats_at_enqueue(qdisc, pkt_len);
635 	return NET_XMIT_SUCCESS;
636 }
637 
638 static struct sk_buff *pfifo_fast_dequeue(struct Qdisc *qdisc)
639 {
640 	struct pfifo_fast_priv *priv = qdisc_priv(qdisc);
641 	struct sk_buff *skb = NULL;
642 	int band;
643 
644 	for (band = 0; band < PFIFO_FAST_BANDS && !skb; band++) {
645 		struct skb_array *q = band2list(priv, band);
646 
647 		if (__skb_array_empty(q))
648 			continue;
649 
650 		skb = __skb_array_consume(q);
651 	}
652 	if (likely(skb)) {
653 		qdisc_update_stats_at_dequeue(qdisc, skb);
654 	} else {
655 		qdisc->empty = true;
656 	}
657 
658 	return skb;
659 }
660 
661 static struct sk_buff *pfifo_fast_peek(struct Qdisc *qdisc)
662 {
663 	struct pfifo_fast_priv *priv = qdisc_priv(qdisc);
664 	struct sk_buff *skb = NULL;
665 	int band;
666 
667 	for (band = 0; band < PFIFO_FAST_BANDS && !skb; band++) {
668 		struct skb_array *q = band2list(priv, band);
669 
670 		skb = __skb_array_peek(q);
671 	}
672 
673 	return skb;
674 }
675 
676 static void pfifo_fast_reset(struct Qdisc *qdisc)
677 {
678 	int i, band;
679 	struct pfifo_fast_priv *priv = qdisc_priv(qdisc);
680 
681 	for (band = 0; band < PFIFO_FAST_BANDS; band++) {
682 		struct skb_array *q = band2list(priv, band);
683 		struct sk_buff *skb;
684 
685 		/* NULL ring is possible if destroy path is due to a failed
686 		 * skb_array_init() in pfifo_fast_init() case.
687 		 */
688 		if (!q->ring.queue)
689 			continue;
690 
691 		while ((skb = __skb_array_consume(q)) != NULL)
692 			kfree_skb(skb);
693 	}
694 
695 	for_each_possible_cpu(i) {
696 		struct gnet_stats_queue *q = per_cpu_ptr(qdisc->cpu_qstats, i);
697 
698 		q->backlog = 0;
699 		q->qlen = 0;
700 	}
701 }
702 
703 static int pfifo_fast_dump(struct Qdisc *qdisc, struct sk_buff *skb)
704 {
705 	struct tc_prio_qopt opt = { .bands = PFIFO_FAST_BANDS };
706 
707 	memcpy(&opt.priomap, prio2band, TC_PRIO_MAX + 1);
708 	if (nla_put(skb, TCA_OPTIONS, sizeof(opt), &opt))
709 		goto nla_put_failure;
710 	return skb->len;
711 
712 nla_put_failure:
713 	return -1;
714 }
715 
716 static int pfifo_fast_init(struct Qdisc *qdisc, struct nlattr *opt,
717 			   struct netlink_ext_ack *extack)
718 {
719 	unsigned int qlen = qdisc_dev(qdisc)->tx_queue_len;
720 	struct pfifo_fast_priv *priv = qdisc_priv(qdisc);
721 	int prio;
722 
723 	/* guard against zero length rings */
724 	if (!qlen)
725 		return -EINVAL;
726 
727 	for (prio = 0; prio < PFIFO_FAST_BANDS; prio++) {
728 		struct skb_array *q = band2list(priv, prio);
729 		int err;
730 
731 		err = skb_array_init(q, qlen, GFP_KERNEL);
732 		if (err)
733 			return -ENOMEM;
734 	}
735 
736 	/* Can by-pass the queue discipline */
737 	qdisc->flags |= TCQ_F_CAN_BYPASS;
738 	return 0;
739 }
740 
741 static void pfifo_fast_destroy(struct Qdisc *sch)
742 {
743 	struct pfifo_fast_priv *priv = qdisc_priv(sch);
744 	int prio;
745 
746 	for (prio = 0; prio < PFIFO_FAST_BANDS; prio++) {
747 		struct skb_array *q = band2list(priv, prio);
748 
749 		/* NULL ring is possible if destroy path is due to a failed
750 		 * skb_array_init() in pfifo_fast_init() case.
751 		 */
752 		if (!q->ring.queue)
753 			continue;
754 		/* Destroy ring but no need to kfree_skb because a call to
755 		 * pfifo_fast_reset() has already done that work.
756 		 */
757 		ptr_ring_cleanup(&q->ring, NULL);
758 	}
759 }
760 
761 static int pfifo_fast_change_tx_queue_len(struct Qdisc *sch,
762 					  unsigned int new_len)
763 {
764 	struct pfifo_fast_priv *priv = qdisc_priv(sch);
765 	struct skb_array *bands[PFIFO_FAST_BANDS];
766 	int prio;
767 
768 	for (prio = 0; prio < PFIFO_FAST_BANDS; prio++) {
769 		struct skb_array *q = band2list(priv, prio);
770 
771 		bands[prio] = q;
772 	}
773 
774 	return skb_array_resize_multiple(bands, PFIFO_FAST_BANDS, new_len,
775 					 GFP_KERNEL);
776 }
777 
778 struct Qdisc_ops pfifo_fast_ops __read_mostly = {
779 	.id		=	"pfifo_fast",
780 	.priv_size	=	sizeof(struct pfifo_fast_priv),
781 	.enqueue	=	pfifo_fast_enqueue,
782 	.dequeue	=	pfifo_fast_dequeue,
783 	.peek		=	pfifo_fast_peek,
784 	.init		=	pfifo_fast_init,
785 	.destroy	=	pfifo_fast_destroy,
786 	.reset		=	pfifo_fast_reset,
787 	.dump		=	pfifo_fast_dump,
788 	.change_tx_queue_len =  pfifo_fast_change_tx_queue_len,
789 	.owner		=	THIS_MODULE,
790 	.static_flags	=	TCQ_F_NOLOCK | TCQ_F_CPUSTATS,
791 };
792 EXPORT_SYMBOL(pfifo_fast_ops);
793 
794 static struct lock_class_key qdisc_tx_busylock;
795 static struct lock_class_key qdisc_running_key;
796 
797 struct Qdisc *qdisc_alloc(struct netdev_queue *dev_queue,
798 			  const struct Qdisc_ops *ops,
799 			  struct netlink_ext_ack *extack)
800 {
801 	void *p;
802 	struct Qdisc *sch;
803 	unsigned int size = QDISC_ALIGN(sizeof(*sch)) + ops->priv_size;
804 	int err = -ENOBUFS;
805 	struct net_device *dev;
806 
807 	if (!dev_queue) {
808 		NL_SET_ERR_MSG(extack, "No device queue given");
809 		err = -EINVAL;
810 		goto errout;
811 	}
812 
813 	dev = dev_queue->dev;
814 	p = kzalloc_node(size, GFP_KERNEL,
815 			 netdev_queue_numa_node_read(dev_queue));
816 
817 	if (!p)
818 		goto errout;
819 	sch = (struct Qdisc *) QDISC_ALIGN((unsigned long) p);
820 	/* if we got non aligned memory, ask more and do alignment ourself */
821 	if (sch != p) {
822 		kfree(p);
823 		p = kzalloc_node(size + QDISC_ALIGNTO - 1, GFP_KERNEL,
824 				 netdev_queue_numa_node_read(dev_queue));
825 		if (!p)
826 			goto errout;
827 		sch = (struct Qdisc *) QDISC_ALIGN((unsigned long) p);
828 		sch->padded = (char *) sch - (char *) p;
829 	}
830 	__skb_queue_head_init(&sch->gso_skb);
831 	__skb_queue_head_init(&sch->skb_bad_txq);
832 	qdisc_skb_head_init(&sch->q);
833 	spin_lock_init(&sch->q.lock);
834 
835 	if (ops->static_flags & TCQ_F_CPUSTATS) {
836 		sch->cpu_bstats =
837 			netdev_alloc_pcpu_stats(struct gnet_stats_basic_cpu);
838 		if (!sch->cpu_bstats)
839 			goto errout1;
840 
841 		sch->cpu_qstats = alloc_percpu(struct gnet_stats_queue);
842 		if (!sch->cpu_qstats) {
843 			free_percpu(sch->cpu_bstats);
844 			goto errout1;
845 		}
846 	}
847 
848 	spin_lock_init(&sch->busylock);
849 	lockdep_set_class(&sch->busylock,
850 			  dev->qdisc_tx_busylock ?: &qdisc_tx_busylock);
851 
852 	/* seqlock has the same scope of busylock, for NOLOCK qdisc */
853 	spin_lock_init(&sch->seqlock);
854 	lockdep_set_class(&sch->busylock,
855 			  dev->qdisc_tx_busylock ?: &qdisc_tx_busylock);
856 
857 	seqcount_init(&sch->running);
858 	lockdep_set_class(&sch->running,
859 			  dev->qdisc_running_key ?: &qdisc_running_key);
860 
861 	sch->ops = ops;
862 	sch->flags = ops->static_flags;
863 	sch->enqueue = ops->enqueue;
864 	sch->dequeue = ops->dequeue;
865 	sch->dev_queue = dev_queue;
866 	sch->empty = true;
867 	dev_hold(dev);
868 	refcount_set(&sch->refcnt, 1);
869 
870 	return sch;
871 errout1:
872 	kfree(p);
873 errout:
874 	return ERR_PTR(err);
875 }
876 
877 struct Qdisc *qdisc_create_dflt(struct netdev_queue *dev_queue,
878 				const struct Qdisc_ops *ops,
879 				unsigned int parentid,
880 				struct netlink_ext_ack *extack)
881 {
882 	struct Qdisc *sch;
883 
884 	if (!try_module_get(ops->owner)) {
885 		NL_SET_ERR_MSG(extack, "Failed to increase module reference counter");
886 		return NULL;
887 	}
888 
889 	sch = qdisc_alloc(dev_queue, ops, extack);
890 	if (IS_ERR(sch)) {
891 		module_put(ops->owner);
892 		return NULL;
893 	}
894 	sch->parent = parentid;
895 
896 	if (!ops->init || ops->init(sch, NULL, extack) == 0)
897 		return sch;
898 
899 	qdisc_put(sch);
900 	return NULL;
901 }
902 EXPORT_SYMBOL(qdisc_create_dflt);
903 
904 /* Under qdisc_lock(qdisc) and BH! */
905 
906 void qdisc_reset(struct Qdisc *qdisc)
907 {
908 	const struct Qdisc_ops *ops = qdisc->ops;
909 	struct sk_buff *skb, *tmp;
910 
911 	if (ops->reset)
912 		ops->reset(qdisc);
913 
914 	skb_queue_walk_safe(&qdisc->gso_skb, skb, tmp) {
915 		__skb_unlink(skb, &qdisc->gso_skb);
916 		kfree_skb_list(skb);
917 	}
918 
919 	skb_queue_walk_safe(&qdisc->skb_bad_txq, skb, tmp) {
920 		__skb_unlink(skb, &qdisc->skb_bad_txq);
921 		kfree_skb_list(skb);
922 	}
923 
924 	qdisc->q.qlen = 0;
925 	qdisc->qstats.backlog = 0;
926 }
927 EXPORT_SYMBOL(qdisc_reset);
928 
929 void qdisc_free(struct Qdisc *qdisc)
930 {
931 	if (qdisc_is_percpu_stats(qdisc)) {
932 		free_percpu(qdisc->cpu_bstats);
933 		free_percpu(qdisc->cpu_qstats);
934 	}
935 
936 	kfree((char *) qdisc - qdisc->padded);
937 }
938 
939 static void qdisc_free_cb(struct rcu_head *head)
940 {
941 	struct Qdisc *q = container_of(head, struct Qdisc, rcu);
942 
943 	qdisc_free(q);
944 }
945 
946 static void qdisc_destroy(struct Qdisc *qdisc)
947 {
948 	const struct Qdisc_ops  *ops = qdisc->ops;
949 	struct sk_buff *skb, *tmp;
950 
951 #ifdef CONFIG_NET_SCHED
952 	qdisc_hash_del(qdisc);
953 
954 	qdisc_put_stab(rtnl_dereference(qdisc->stab));
955 #endif
956 	gen_kill_estimator(&qdisc->rate_est);
957 	if (ops->reset)
958 		ops->reset(qdisc);
959 	if (ops->destroy)
960 		ops->destroy(qdisc);
961 
962 	module_put(ops->owner);
963 	dev_put(qdisc_dev(qdisc));
964 
965 	skb_queue_walk_safe(&qdisc->gso_skb, skb, tmp) {
966 		__skb_unlink(skb, &qdisc->gso_skb);
967 		kfree_skb_list(skb);
968 	}
969 
970 	skb_queue_walk_safe(&qdisc->skb_bad_txq, skb, tmp) {
971 		__skb_unlink(skb, &qdisc->skb_bad_txq);
972 		kfree_skb_list(skb);
973 	}
974 
975 	call_rcu(&qdisc->rcu, qdisc_free_cb);
976 }
977 
978 void qdisc_put(struct Qdisc *qdisc)
979 {
980 	if (qdisc->flags & TCQ_F_BUILTIN ||
981 	    !refcount_dec_and_test(&qdisc->refcnt))
982 		return;
983 
984 	qdisc_destroy(qdisc);
985 }
986 EXPORT_SYMBOL(qdisc_put);
987 
988 /* Version of qdisc_put() that is called with rtnl mutex unlocked.
989  * Intended to be used as optimization, this function only takes rtnl lock if
990  * qdisc reference counter reached zero.
991  */
992 
993 void qdisc_put_unlocked(struct Qdisc *qdisc)
994 {
995 	if (qdisc->flags & TCQ_F_BUILTIN ||
996 	    !refcount_dec_and_rtnl_lock(&qdisc->refcnt))
997 		return;
998 
999 	qdisc_destroy(qdisc);
1000 	rtnl_unlock();
1001 }
1002 EXPORT_SYMBOL(qdisc_put_unlocked);
1003 
1004 /* Attach toplevel qdisc to device queue. */
1005 struct Qdisc *dev_graft_qdisc(struct netdev_queue *dev_queue,
1006 			      struct Qdisc *qdisc)
1007 {
1008 	struct Qdisc *oqdisc = dev_queue->qdisc_sleeping;
1009 	spinlock_t *root_lock;
1010 
1011 	root_lock = qdisc_lock(oqdisc);
1012 	spin_lock_bh(root_lock);
1013 
1014 	/* ... and graft new one */
1015 	if (qdisc == NULL)
1016 		qdisc = &noop_qdisc;
1017 	dev_queue->qdisc_sleeping = qdisc;
1018 	rcu_assign_pointer(dev_queue->qdisc, &noop_qdisc);
1019 
1020 	spin_unlock_bh(root_lock);
1021 
1022 	return oqdisc;
1023 }
1024 EXPORT_SYMBOL(dev_graft_qdisc);
1025 
1026 static void attach_one_default_qdisc(struct net_device *dev,
1027 				     struct netdev_queue *dev_queue,
1028 				     void *_unused)
1029 {
1030 	struct Qdisc *qdisc;
1031 	const struct Qdisc_ops *ops = default_qdisc_ops;
1032 
1033 	if (dev->priv_flags & IFF_NO_QUEUE)
1034 		ops = &noqueue_qdisc_ops;
1035 
1036 	qdisc = qdisc_create_dflt(dev_queue, ops, TC_H_ROOT, NULL);
1037 	if (!qdisc) {
1038 		netdev_info(dev, "activation failed\n");
1039 		return;
1040 	}
1041 	if (!netif_is_multiqueue(dev))
1042 		qdisc->flags |= TCQ_F_ONETXQUEUE | TCQ_F_NOPARENT;
1043 	dev_queue->qdisc_sleeping = qdisc;
1044 }
1045 
1046 static void attach_default_qdiscs(struct net_device *dev)
1047 {
1048 	struct netdev_queue *txq;
1049 	struct Qdisc *qdisc;
1050 
1051 	txq = netdev_get_tx_queue(dev, 0);
1052 
1053 	if (!netif_is_multiqueue(dev) ||
1054 	    dev->priv_flags & IFF_NO_QUEUE) {
1055 		netdev_for_each_tx_queue(dev, attach_one_default_qdisc, NULL);
1056 		dev->qdisc = txq->qdisc_sleeping;
1057 		qdisc_refcount_inc(dev->qdisc);
1058 	} else {
1059 		qdisc = qdisc_create_dflt(txq, &mq_qdisc_ops, TC_H_ROOT, NULL);
1060 		if (qdisc) {
1061 			dev->qdisc = qdisc;
1062 			qdisc->ops->attach(qdisc);
1063 		}
1064 	}
1065 #ifdef CONFIG_NET_SCHED
1066 	if (dev->qdisc != &noop_qdisc)
1067 		qdisc_hash_add(dev->qdisc, false);
1068 #endif
1069 }
1070 
1071 static void transition_one_qdisc(struct net_device *dev,
1072 				 struct netdev_queue *dev_queue,
1073 				 void *_need_watchdog)
1074 {
1075 	struct Qdisc *new_qdisc = dev_queue->qdisc_sleeping;
1076 	int *need_watchdog_p = _need_watchdog;
1077 
1078 	if (!(new_qdisc->flags & TCQ_F_BUILTIN))
1079 		clear_bit(__QDISC_STATE_DEACTIVATED, &new_qdisc->state);
1080 
1081 	rcu_assign_pointer(dev_queue->qdisc, new_qdisc);
1082 	if (need_watchdog_p) {
1083 		dev_queue->trans_start = 0;
1084 		*need_watchdog_p = 1;
1085 	}
1086 }
1087 
1088 void dev_activate(struct net_device *dev)
1089 {
1090 	int need_watchdog;
1091 
1092 	/* No queueing discipline is attached to device;
1093 	 * create default one for devices, which need queueing
1094 	 * and noqueue_qdisc for virtual interfaces
1095 	 */
1096 
1097 	if (dev->qdisc == &noop_qdisc)
1098 		attach_default_qdiscs(dev);
1099 
1100 	if (!netif_carrier_ok(dev))
1101 		/* Delay activation until next carrier-on event */
1102 		return;
1103 
1104 	need_watchdog = 0;
1105 	netdev_for_each_tx_queue(dev, transition_one_qdisc, &need_watchdog);
1106 	if (dev_ingress_queue(dev))
1107 		transition_one_qdisc(dev, dev_ingress_queue(dev), NULL);
1108 
1109 	if (need_watchdog) {
1110 		netif_trans_update(dev);
1111 		dev_watchdog_up(dev);
1112 	}
1113 }
1114 EXPORT_SYMBOL(dev_activate);
1115 
1116 static void dev_deactivate_queue(struct net_device *dev,
1117 				 struct netdev_queue *dev_queue,
1118 				 void *_qdisc_default)
1119 {
1120 	struct Qdisc *qdisc_default = _qdisc_default;
1121 	struct Qdisc *qdisc;
1122 
1123 	qdisc = rtnl_dereference(dev_queue->qdisc);
1124 	if (qdisc) {
1125 		bool nolock = qdisc->flags & TCQ_F_NOLOCK;
1126 
1127 		if (nolock)
1128 			spin_lock_bh(&qdisc->seqlock);
1129 		spin_lock_bh(qdisc_lock(qdisc));
1130 
1131 		if (!(qdisc->flags & TCQ_F_BUILTIN))
1132 			set_bit(__QDISC_STATE_DEACTIVATED, &qdisc->state);
1133 
1134 		rcu_assign_pointer(dev_queue->qdisc, qdisc_default);
1135 		qdisc_reset(qdisc);
1136 
1137 		spin_unlock_bh(qdisc_lock(qdisc));
1138 		if (nolock)
1139 			spin_unlock_bh(&qdisc->seqlock);
1140 	}
1141 }
1142 
1143 static bool some_qdisc_is_busy(struct net_device *dev)
1144 {
1145 	unsigned int i;
1146 
1147 	for (i = 0; i < dev->num_tx_queues; i++) {
1148 		struct netdev_queue *dev_queue;
1149 		spinlock_t *root_lock;
1150 		struct Qdisc *q;
1151 		int val;
1152 
1153 		dev_queue = netdev_get_tx_queue(dev, i);
1154 		q = dev_queue->qdisc_sleeping;
1155 
1156 		root_lock = qdisc_lock(q);
1157 		spin_lock_bh(root_lock);
1158 
1159 		val = (qdisc_is_running(q) ||
1160 		       test_bit(__QDISC_STATE_SCHED, &q->state));
1161 
1162 		spin_unlock_bh(root_lock);
1163 
1164 		if (val)
1165 			return true;
1166 	}
1167 	return false;
1168 }
1169 
1170 static void dev_qdisc_reset(struct net_device *dev,
1171 			    struct netdev_queue *dev_queue,
1172 			    void *none)
1173 {
1174 	struct Qdisc *qdisc = dev_queue->qdisc_sleeping;
1175 
1176 	if (qdisc)
1177 		qdisc_reset(qdisc);
1178 }
1179 
1180 /**
1181  * 	dev_deactivate_many - deactivate transmissions on several devices
1182  * 	@head: list of devices to deactivate
1183  *
1184  *	This function returns only when all outstanding transmissions
1185  *	have completed, unless all devices are in dismantle phase.
1186  */
1187 void dev_deactivate_many(struct list_head *head)
1188 {
1189 	struct net_device *dev;
1190 
1191 	list_for_each_entry(dev, head, close_list) {
1192 		netdev_for_each_tx_queue(dev, dev_deactivate_queue,
1193 					 &noop_qdisc);
1194 		if (dev_ingress_queue(dev))
1195 			dev_deactivate_queue(dev, dev_ingress_queue(dev),
1196 					     &noop_qdisc);
1197 
1198 		dev_watchdog_down(dev);
1199 	}
1200 
1201 	/* Wait for outstanding qdisc-less dev_queue_xmit calls.
1202 	 * This is avoided if all devices are in dismantle phase :
1203 	 * Caller will call synchronize_net() for us
1204 	 */
1205 	synchronize_net();
1206 
1207 	/* Wait for outstanding qdisc_run calls. */
1208 	list_for_each_entry(dev, head, close_list) {
1209 		while (some_qdisc_is_busy(dev))
1210 			yield();
1211 		/* The new qdisc is assigned at this point so we can safely
1212 		 * unwind stale skb lists and qdisc statistics
1213 		 */
1214 		netdev_for_each_tx_queue(dev, dev_qdisc_reset, NULL);
1215 		if (dev_ingress_queue(dev))
1216 			dev_qdisc_reset(dev, dev_ingress_queue(dev), NULL);
1217 	}
1218 }
1219 
1220 void dev_deactivate(struct net_device *dev)
1221 {
1222 	LIST_HEAD(single);
1223 
1224 	list_add(&dev->close_list, &single);
1225 	dev_deactivate_many(&single);
1226 	list_del(&single);
1227 }
1228 EXPORT_SYMBOL(dev_deactivate);
1229 
1230 static int qdisc_change_tx_queue_len(struct net_device *dev,
1231 				     struct netdev_queue *dev_queue)
1232 {
1233 	struct Qdisc *qdisc = dev_queue->qdisc_sleeping;
1234 	const struct Qdisc_ops *ops = qdisc->ops;
1235 
1236 	if (ops->change_tx_queue_len)
1237 		return ops->change_tx_queue_len(qdisc, dev->tx_queue_len);
1238 	return 0;
1239 }
1240 
1241 int dev_qdisc_change_tx_queue_len(struct net_device *dev)
1242 {
1243 	bool up = dev->flags & IFF_UP;
1244 	unsigned int i;
1245 	int ret = 0;
1246 
1247 	if (up)
1248 		dev_deactivate(dev);
1249 
1250 	for (i = 0; i < dev->num_tx_queues; i++) {
1251 		ret = qdisc_change_tx_queue_len(dev, &dev->_tx[i]);
1252 
1253 		/* TODO: revert changes on a partial failure */
1254 		if (ret)
1255 			break;
1256 	}
1257 
1258 	if (up)
1259 		dev_activate(dev);
1260 	return ret;
1261 }
1262 
1263 static void dev_init_scheduler_queue(struct net_device *dev,
1264 				     struct netdev_queue *dev_queue,
1265 				     void *_qdisc)
1266 {
1267 	struct Qdisc *qdisc = _qdisc;
1268 
1269 	rcu_assign_pointer(dev_queue->qdisc, qdisc);
1270 	dev_queue->qdisc_sleeping = qdisc;
1271 }
1272 
1273 void dev_init_scheduler(struct net_device *dev)
1274 {
1275 	dev->qdisc = &noop_qdisc;
1276 	netdev_for_each_tx_queue(dev, dev_init_scheduler_queue, &noop_qdisc);
1277 	if (dev_ingress_queue(dev))
1278 		dev_init_scheduler_queue(dev, dev_ingress_queue(dev), &noop_qdisc);
1279 
1280 	timer_setup(&dev->watchdog_timer, dev_watchdog, 0);
1281 }
1282 
1283 static void shutdown_scheduler_queue(struct net_device *dev,
1284 				     struct netdev_queue *dev_queue,
1285 				     void *_qdisc_default)
1286 {
1287 	struct Qdisc *qdisc = dev_queue->qdisc_sleeping;
1288 	struct Qdisc *qdisc_default = _qdisc_default;
1289 
1290 	if (qdisc) {
1291 		rcu_assign_pointer(dev_queue->qdisc, qdisc_default);
1292 		dev_queue->qdisc_sleeping = qdisc_default;
1293 
1294 		qdisc_put(qdisc);
1295 	}
1296 }
1297 
1298 void dev_shutdown(struct net_device *dev)
1299 {
1300 	netdev_for_each_tx_queue(dev, shutdown_scheduler_queue, &noop_qdisc);
1301 	if (dev_ingress_queue(dev))
1302 		shutdown_scheduler_queue(dev, dev_ingress_queue(dev), &noop_qdisc);
1303 	qdisc_put(dev->qdisc);
1304 	dev->qdisc = &noop_qdisc;
1305 
1306 	WARN_ON(timer_pending(&dev->watchdog_timer));
1307 }
1308 
1309 void psched_ratecfg_precompute(struct psched_ratecfg *r,
1310 			       const struct tc_ratespec *conf,
1311 			       u64 rate64)
1312 {
1313 	memset(r, 0, sizeof(*r));
1314 	r->overhead = conf->overhead;
1315 	r->rate_bytes_ps = max_t(u64, conf->rate, rate64);
1316 	r->linklayer = (conf->linklayer & TC_LINKLAYER_MASK);
1317 	r->mult = 1;
1318 	/*
1319 	 * The deal here is to replace a divide by a reciprocal one
1320 	 * in fast path (a reciprocal divide is a multiply and a shift)
1321 	 *
1322 	 * Normal formula would be :
1323 	 *  time_in_ns = (NSEC_PER_SEC * len) / rate_bps
1324 	 *
1325 	 * We compute mult/shift to use instead :
1326 	 *  time_in_ns = (len * mult) >> shift;
1327 	 *
1328 	 * We try to get the highest possible mult value for accuracy,
1329 	 * but have to make sure no overflows will ever happen.
1330 	 */
1331 	if (r->rate_bytes_ps > 0) {
1332 		u64 factor = NSEC_PER_SEC;
1333 
1334 		for (;;) {
1335 			r->mult = div64_u64(factor, r->rate_bytes_ps);
1336 			if (r->mult & (1U << 31) || factor & (1ULL << 63))
1337 				break;
1338 			factor <<= 1;
1339 			r->shift++;
1340 		}
1341 	}
1342 }
1343 EXPORT_SYMBOL(psched_ratecfg_precompute);
1344 
1345 static void mini_qdisc_rcu_func(struct rcu_head *head)
1346 {
1347 }
1348 
1349 void mini_qdisc_pair_swap(struct mini_Qdisc_pair *miniqp,
1350 			  struct tcf_proto *tp_head)
1351 {
1352 	/* Protected with chain0->filter_chain_lock.
1353 	 * Can't access chain directly because tp_head can be NULL.
1354 	 */
1355 	struct mini_Qdisc *miniq_old =
1356 		rcu_dereference_protected(*miniqp->p_miniq, 1);
1357 	struct mini_Qdisc *miniq;
1358 
1359 	if (!tp_head) {
1360 		RCU_INIT_POINTER(*miniqp->p_miniq, NULL);
1361 		/* Wait for flying RCU callback before it is freed. */
1362 		rcu_barrier();
1363 		return;
1364 	}
1365 
1366 	miniq = !miniq_old || miniq_old == &miniqp->miniq2 ?
1367 		&miniqp->miniq1 : &miniqp->miniq2;
1368 
1369 	/* We need to make sure that readers won't see the miniq
1370 	 * we are about to modify. So wait until previous call_rcu callback
1371 	 * is done.
1372 	 */
1373 	rcu_barrier();
1374 	miniq->filter_list = tp_head;
1375 	rcu_assign_pointer(*miniqp->p_miniq, miniq);
1376 
1377 	if (miniq_old)
1378 		/* This is counterpart of the rcu barriers above. We need to
1379 		 * block potential new user of miniq_old until all readers
1380 		 * are not seeing it.
1381 		 */
1382 		call_rcu(&miniq_old->rcu, mini_qdisc_rcu_func);
1383 }
1384 EXPORT_SYMBOL(mini_qdisc_pair_swap);
1385 
1386 void mini_qdisc_pair_init(struct mini_Qdisc_pair *miniqp, struct Qdisc *qdisc,
1387 			  struct mini_Qdisc __rcu **p_miniq)
1388 {
1389 	miniqp->miniq1.cpu_bstats = qdisc->cpu_bstats;
1390 	miniqp->miniq1.cpu_qstats = qdisc->cpu_qstats;
1391 	miniqp->miniq2.cpu_bstats = qdisc->cpu_bstats;
1392 	miniqp->miniq2.cpu_qstats = qdisc->cpu_qstats;
1393 	miniqp->p_miniq = p_miniq;
1394 }
1395 EXPORT_SYMBOL(mini_qdisc_pair_init);
1396