diff options
Diffstat (limited to 'include/net/sch_generic.h')
| -rw-r--r-- | include/net/sch_generic.h | 20 | 
1 files changed, 16 insertions, 4 deletions
diff --git a/include/net/sch_generic.h b/include/net/sch_generic.h index 03ca5d82675..433604bb3fe 100644 --- a/include/net/sch_generic.h +++ b/include/net/sch_generic.h @@ -313,12 +313,24 @@ extern void qdisc_calculate_pkt_len(struct sk_buff *skb,  extern void tcf_destroy(struct tcf_proto *tp);  extern void tcf_destroy_chain(struct tcf_proto **fl); -/* Reset all TX qdiscs of a device.  */ +/* Reset all TX qdiscs greater then index of a device.  */ +static inline void qdisc_reset_all_tx_gt(struct net_device *dev, unsigned int i) +{ +	struct Qdisc *qdisc; + +	for (; i < dev->num_tx_queues; i++) { +		qdisc = netdev_get_tx_queue(dev, i)->qdisc; +		if (qdisc) { +			spin_lock_bh(qdisc_lock(qdisc)); +			qdisc_reset(qdisc); +			spin_unlock_bh(qdisc_lock(qdisc)); +		} +	} +} +  static inline void qdisc_reset_all_tx(struct net_device *dev)  { -	unsigned int i; -	for (i = 0; i < dev->num_tx_queues; i++) -		qdisc_reset(netdev_get_tx_queue(dev, i)->qdisc); +	qdisc_reset_all_tx_gt(dev, 0);  }  /* Are all TX queues of the device empty?  */  |