diff options
author | Alex Shi <alex.shi@linaro.org> | 2016-05-20 12:16:43 +0800 |
---|---|---|
committer | Alex Shi <alex.shi@linaro.org> | 2016-05-20 12:16:43 +0800 |
commit | 1d53a9c6e6c7bc32ecfbbb024ab7a1955122c526 (patch) | |
tree | 977cfcbda4ef5173a9455e66350b610e96f1eeef /include/net/sch_generic.h | |
parent | a8a1fcae2dcc97748b7cafa7cb2745de1f35a8a6 (diff) | |
parent | 510d0a3f869611dcd001a2b7627fa5dded4579af (diff) |
Merge branch 'linux-linaro-lsk-v4.4' into linux-linaro-lsk-v4.4-rtlsk-v4.4-16.05-rt
Diffstat (limited to 'include/net/sch_generic.h')
-rw-r--r-- | include/net/sch_generic.h | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/include/net/sch_generic.h b/include/net/sch_generic.h index b2a8e6338576..86df0835f6b5 100644 --- a/include/net/sch_generic.h +++ b/include/net/sch_generic.h @@ -396,7 +396,8 @@ struct Qdisc *dev_graft_qdisc(struct netdev_queue *dev_queue, struct Qdisc *qdisc); void qdisc_reset(struct Qdisc *qdisc); void qdisc_destroy(struct Qdisc *qdisc); -void qdisc_tree_decrease_qlen(struct Qdisc *qdisc, unsigned int n); +void qdisc_tree_reduce_backlog(struct Qdisc *qdisc, unsigned int n, + unsigned int len); struct Qdisc *qdisc_alloc(struct netdev_queue *dev_queue, const struct Qdisc_ops *ops); struct Qdisc *qdisc_create_dflt(struct netdev_queue *dev_queue, @@ -698,6 +699,23 @@ static inline void qdisc_reset_queue(struct Qdisc *sch) sch->qstats.backlog = 0; } +static inline struct Qdisc *qdisc_replace(struct Qdisc *sch, struct Qdisc *new, + struct Qdisc **pold) +{ + struct Qdisc *old; + + sch_tree_lock(sch); + old = *pold; + *pold = new; + if (old != NULL) { + qdisc_tree_reduce_backlog(old, old->q.qlen, old->qstats.backlog); + qdisc_reset(old); + } + sch_tree_unlock(sch); + + return old; +} + static inline unsigned int __qdisc_queue_drop(struct Qdisc *sch, struct sk_buff_head *list) { |