linux/include/net/sch_generic.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2#ifndef __NET_SCHED_GENERIC_H
   3#define __NET_SCHED_GENERIC_H
   4
   5#include <linux/netdevice.h>
   6#include <linux/types.h>
   7#include <linux/rcupdate.h>
   8#include <linux/pkt_sched.h>
   9#include <linux/pkt_cls.h>
  10#include <linux/percpu.h>
  11#include <linux/dynamic_queue_limits.h>
  12#include <linux/list.h>
  13#include <linux/refcount.h>
  14#include <linux/workqueue.h>
  15#include <linux/mutex.h>
  16#include <linux/rwsem.h>
  17#include <linux/atomic.h>
  18#include <linux/hashtable.h>
  19#include <net/gen_stats.h>
  20#include <net/rtnetlink.h>
  21#include <net/flow_offload.h>
  22
  23struct Qdisc_ops;
  24struct qdisc_walker;
  25struct tcf_walker;
  26struct module;
  27struct bpf_flow_keys;
  28
  29struct qdisc_rate_table {
  30        struct tc_ratespec rate;
  31        u32             data[256];
  32        struct qdisc_rate_table *next;
  33        int             refcnt;
  34};
  35
  36enum qdisc_state_t {
  37        __QDISC_STATE_SCHED,
  38        __QDISC_STATE_DEACTIVATED,
  39};
  40
  41struct qdisc_size_table {
  42        struct rcu_head         rcu;
  43        struct list_head        list;
  44        struct tc_sizespec      szopts;
  45        int                     refcnt;
  46        u16                     data[];
  47};
  48
  49/* similar to sk_buff_head, but skb->prev pointer is undefined. */
  50struct qdisc_skb_head {
  51        struct sk_buff  *head;
  52        struct sk_buff  *tail;
  53        __u32           qlen;
  54        spinlock_t      lock;
  55};
  56
  57struct Qdisc {
  58        int                     (*enqueue)(struct sk_buff *skb,
  59                                           struct Qdisc *sch,
  60                                           struct sk_buff **to_free);
  61        struct sk_buff *        (*dequeue)(struct Qdisc *sch);
  62        unsigned int            flags;
  63#define TCQ_F_BUILTIN           1
  64#define TCQ_F_INGRESS           2
  65#define TCQ_F_CAN_BYPASS        4
  66#define TCQ_F_MQROOT            8
  67#define TCQ_F_ONETXQUEUE        0x10 /* dequeue_skb() can assume all skbs are for
  68                                      * q->dev_queue : It can test
  69                                      * netif_xmit_frozen_or_stopped() before
  70                                      * dequeueing next packet.
  71                                      * Its true for MQ/MQPRIO slaves, or non
  72                                      * multiqueue device.
  73                                      */
  74#define TCQ_F_WARN_NONWC        (1 << 16)
  75#define TCQ_F_CPUSTATS          0x20 /* run using percpu statistics */
  76#define TCQ_F_NOPARENT          0x40 /* root of its hierarchy :
  77                                      * qdisc_tree_decrease_qlen() should stop.
  78                                      */
  79#define TCQ_F_INVISIBLE         0x80 /* invisible by default in dump */
  80#define TCQ_F_NOLOCK            0x100 /* qdisc does not require locking */
  81#define TCQ_F_OFFLOADED         0x200 /* qdisc is offloaded to HW */
  82        u32                     limit;
  83        const struct Qdisc_ops  *ops;
  84        struct qdisc_size_table __rcu *stab;
  85        struct hlist_node       hash;
  86        u32                     handle;
  87        u32                     parent;
  88
  89        struct netdev_queue     *dev_queue;
  90
  91        struct net_rate_estimator __rcu *rate_est;
  92        struct gnet_stats_basic_cpu __percpu *cpu_bstats;
  93        struct gnet_stats_queue __percpu *cpu_qstats;
  94        int                     padded;
  95        refcount_t              refcnt;
  96
  97        /*
  98         * For performance sake on SMP, we put highly modified fields at the end
  99         */
 100        struct sk_buff_head     gso_skb ____cacheline_aligned_in_smp;
 101        struct qdisc_skb_head   q;
 102        struct gnet_stats_basic_packed bstats;
 103        seqcount_t              running;
 104        struct gnet_stats_queue qstats;
 105        unsigned long           state;
 106        struct Qdisc            *next_sched;
 107        struct sk_buff_head     skb_bad_txq;
 108
 109        spinlock_t              busylock ____cacheline_aligned_in_smp;
 110        spinlock_t              seqlock;
 111
 112        /* for NOLOCK qdisc, true if there are no enqueued skbs */
 113        bool                    empty;
 114        struct rcu_head         rcu;
 115};
 116
 117static inline void qdisc_refcount_inc(struct Qdisc *qdisc)
 118{
 119        if (qdisc->flags & TCQ_F_BUILTIN)
 120                return;
 121        refcount_inc(&qdisc->refcnt);
 122}
 123
 124/* Intended to be used by unlocked users, when concurrent qdisc release is
 125 * possible.
 126 */
 127
 128static inline struct Qdisc *qdisc_refcount_inc_nz(struct Qdisc *qdisc)
 129{
 130        if (qdisc->flags & TCQ_F_BUILTIN)
 131                return qdisc;
 132        if (refcount_inc_not_zero(&qdisc->refcnt))
 133                return qdisc;
 134        return NULL;
 135}
 136
 137static inline bool qdisc_is_running(struct Qdisc *qdisc)
 138{
 139        if (qdisc->flags & TCQ_F_NOLOCK)
 140                return spin_is_locked(&qdisc->seqlock);
 141        return (raw_read_seqcount(&qdisc->running) & 1) ? true : false;
 142}
 143
 144static inline bool qdisc_is_percpu_stats(const struct Qdisc *q)
 145{
 146        return q->flags & TCQ_F_CPUSTATS;
 147}
 148
 149static inline bool qdisc_is_empty(const struct Qdisc *qdisc)
 150{
 151        if (qdisc_is_percpu_stats(qdisc))
 152                return READ_ONCE(qdisc->empty);
 153        return !READ_ONCE(qdisc->q.qlen);
 154}
 155
 156static inline bool qdisc_run_begin(struct Qdisc *qdisc)
 157{
 158        if (qdisc->flags & TCQ_F_NOLOCK) {
 159                if (!spin_trylock(&qdisc->seqlock))
 160                        return false;
 161                WRITE_ONCE(qdisc->empty, false);
 162        } else if (qdisc_is_running(qdisc)) {
 163                return false;
 164        }
 165        /* Variant of write_seqcount_begin() telling lockdep a trylock
 166         * was attempted.
 167         */
 168        raw_write_seqcount_begin(&qdisc->running);
 169        seqcount_acquire(&qdisc->running.dep_map, 0, 1, _RET_IP_);
 170        return true;
 171}
 172
 173static inline void qdisc_run_end(struct Qdisc *qdisc)
 174{
 175        write_seqcount_end(&qdisc->running);
 176        if (qdisc->flags & TCQ_F_NOLOCK)
 177                spin_unlock(&qdisc->seqlock);
 178}
 179
 180static inline bool qdisc_may_bulk(const struct Qdisc *qdisc)
 181{
 182        return qdisc->flags & TCQ_F_ONETXQUEUE;
 183}
 184
 185static inline int qdisc_avail_bulklimit(const struct netdev_queue *txq)
 186{
 187#ifdef CONFIG_BQL
 188        /* Non-BQL migrated drivers will return 0, too. */
 189        return dql_avail(&txq->dql);
 190#else
 191        return 0;
 192#endif
 193}
 194
 195struct Qdisc_class_ops {
 196        unsigned int            flags;
 197        /* Child qdisc manipulation */
 198        struct netdev_queue *   (*select_queue)(struct Qdisc *, struct tcmsg *);
 199        int                     (*graft)(struct Qdisc *, unsigned long cl,
 200                                        struct Qdisc *, struct Qdisc **,
 201                                        struct netlink_ext_ack *extack);
 202        struct Qdisc *          (*leaf)(struct Qdisc *, unsigned long cl);
 203        void                    (*qlen_notify)(struct Qdisc *, unsigned long);
 204
 205        /* Class manipulation routines */
 206        unsigned long           (*find)(struct Qdisc *, u32 classid);
 207        int                     (*change)(struct Qdisc *, u32, u32,
 208                                        struct nlattr **, unsigned long *,
 209                                        struct netlink_ext_ack *);
 210        int                     (*delete)(struct Qdisc *, unsigned long);
 211        void                    (*walk)(struct Qdisc *, struct qdisc_walker * arg);
 212
 213        /* Filter manipulation */
 214        struct tcf_block *      (*tcf_block)(struct Qdisc *sch,
 215                                             unsigned long arg,
 216                                             struct netlink_ext_ack *extack);
 217        unsigned long           (*bind_tcf)(struct Qdisc *, unsigned long,
 218                                        u32 classid);
 219        void                    (*unbind_tcf)(struct Qdisc *, unsigned long);
 220
 221        /* rtnetlink specific */
 222        int                     (*dump)(struct Qdisc *, unsigned long,
 223                                        struct sk_buff *skb, struct tcmsg*);
 224        int                     (*dump_stats)(struct Qdisc *, unsigned long,
 225                                        struct gnet_dump *);
 226};
 227
 228/* Qdisc_class_ops flag values */
 229
 230/* Implements API that doesn't require rtnl lock */
 231enum qdisc_class_ops_flags {
 232        QDISC_CLASS_OPS_DOIT_UNLOCKED = 1,
 233};
 234
 235struct Qdisc_ops {
 236        struct Qdisc_ops        *next;
 237        const struct Qdisc_class_ops    *cl_ops;
 238        char                    id[IFNAMSIZ];
 239        int                     priv_size;
 240        unsigned int            static_flags;
 241
 242        int                     (*enqueue)(struct sk_buff *skb,
 243                                           struct Qdisc *sch,
 244                                           struct sk_buff **to_free);
 245        struct sk_buff *        (*dequeue)(struct Qdisc *);
 246        struct sk_buff *        (*peek)(struct Qdisc *);
 247
 248        int                     (*init)(struct Qdisc *sch, struct nlattr *arg,
 249                                        struct netlink_ext_ack *extack);
 250        void                    (*reset)(struct Qdisc *);
 251        void                    (*destroy)(struct Qdisc *);
 252        int                     (*change)(struct Qdisc *sch,
 253                                          struct nlattr *arg,
 254                                          struct netlink_ext_ack *extack);
 255        void                    (*attach)(struct Qdisc *sch);
 256        int                     (*change_tx_queue_len)(struct Qdisc *, unsigned int);
 257
 258        int                     (*dump)(struct Qdisc *, struct sk_buff *);
 259        int                     (*dump_stats)(struct Qdisc *, struct gnet_dump *);
 260
 261        void                    (*ingress_block_set)(struct Qdisc *sch,
 262                                                     u32 block_index);
 263        void                    (*egress_block_set)(struct Qdisc *sch,
 264                                                    u32 block_index);
 265        u32                     (*ingress_block_get)(struct Qdisc *sch);
 266        u32                     (*egress_block_get)(struct Qdisc *sch);
 267
 268        struct module           *owner;
 269};
 270
 271
 272struct tcf_result {
 273        union {
 274                struct {
 275                        unsigned long   class;
 276                        u32             classid;
 277                };
 278                const struct tcf_proto *goto_tp;
 279
 280                /* used in the skb_tc_reinsert function */
 281                struct {
 282                        bool            ingress;
 283                        struct gnet_stats_queue *qstats;
 284                };
 285        };
 286};
 287
 288struct tcf_chain;
 289
 290struct tcf_proto_ops {
 291        struct list_head        head;
 292        char                    kind[IFNAMSIZ];
 293
 294        int                     (*classify)(struct sk_buff *,
 295                                            const struct tcf_proto *,
 296                                            struct tcf_result *);
 297        int                     (*init)(struct tcf_proto*);
 298        void                    (*destroy)(struct tcf_proto *tp, bool rtnl_held,
 299                                           struct netlink_ext_ack *extack);
 300
 301        void*                   (*get)(struct tcf_proto*, u32 handle);
 302        void                    (*put)(struct tcf_proto *tp, void *f);
 303        int                     (*change)(struct net *net, struct sk_buff *,
 304                                        struct tcf_proto*, unsigned long,
 305                                        u32 handle, struct nlattr **,
 306                                        void **, bool, bool,
 307                                        struct netlink_ext_ack *);
 308        int                     (*delete)(struct tcf_proto *tp, void *arg,
 309                                          bool *last, bool rtnl_held,
 310                                          struct netlink_ext_ack *);
 311        bool                    (*delete_empty)(struct tcf_proto *tp);
 312        void                    (*walk)(struct tcf_proto *tp,
 313                                        struct tcf_walker *arg, bool rtnl_held);
 314        int                     (*reoffload)(struct tcf_proto *tp, bool add,
 315                                             flow_setup_cb_t *cb, void *cb_priv,
 316                                             struct netlink_ext_ack *extack);
 317        void                    (*hw_add)(struct tcf_proto *tp,
 318                                          void *type_data);
 319        void                    (*hw_del)(struct tcf_proto *tp,
 320                                          void *type_data);
 321        void                    (*bind_class)(void *, u32, unsigned long,
 322                                              void *, unsigned long);
 323        void *                  (*tmplt_create)(struct net *net,
 324                                                struct tcf_chain *chain,
 325                                                struct nlattr **tca,
 326                                                struct netlink_ext_ack *extack);
 327        void                    (*tmplt_destroy)(void *tmplt_priv);
 328
 329        /* rtnetlink specific */
 330        int                     (*dump)(struct net*, struct tcf_proto*, void *,
 331                                        struct sk_buff *skb, struct tcmsg*,
 332                                        bool);
 333        int                     (*tmplt_dump)(struct sk_buff *skb,
 334                                              struct net *net,
 335                                              void *tmplt_priv);
 336
 337        struct module           *owner;
 338        int                     flags;
 339};
 340
 341/* Classifiers setting TCF_PROTO_OPS_DOIT_UNLOCKED in tcf_proto_ops->flags
 342 * are expected to implement tcf_proto_ops->delete_empty(), otherwise race
 343 * conditions can occur when filters are inserted/deleted simultaneously.
 344 */
 345enum tcf_proto_ops_flags {
 346        TCF_PROTO_OPS_DOIT_UNLOCKED = 1,
 347};
 348
 349struct tcf_proto {
 350        /* Fast access part */
 351        struct tcf_proto __rcu  *next;
 352        void __rcu              *root;
 353
 354        /* called under RCU BH lock*/
 355        int                     (*classify)(struct sk_buff *,
 356                                            const struct tcf_proto *,
 357                                            struct tcf_result *);
 358        __be16                  protocol;
 359
 360        /* All the rest */
 361        u32                     prio;
 362        void                    *data;
 363        const struct tcf_proto_ops      *ops;
 364        struct tcf_chain        *chain;
 365        /* Lock protects tcf_proto shared state and can be used by unlocked
 366         * classifiers to protect their private data.
 367         */
 368        spinlock_t              lock;
 369        bool                    deleting;
 370        refcount_t              refcnt;
 371        struct rcu_head         rcu;
 372        struct hlist_node       destroy_ht_node;
 373};
 374
 375struct qdisc_skb_cb {
 376        struct {
 377                unsigned int            pkt_len;
 378                u16                     slave_dev_queue_mapping;
 379                u16                     tc_classid;
 380        };
 381#define QDISC_CB_PRIV_LEN 20
 382        unsigned char           data[QDISC_CB_PRIV_LEN];
 383};
 384
 385typedef void tcf_chain_head_change_t(struct tcf_proto *tp_head, void *priv);
 386
 387struct tcf_chain {
 388        /* Protects filter_chain. */
 389        struct mutex filter_chain_lock;
 390        struct tcf_proto __rcu *filter_chain;
 391        struct list_head list;
 392        struct tcf_block *block;
 393        u32 index; /* chain index */
 394        unsigned int refcnt;
 395        unsigned int action_refcnt;
 396        bool explicitly_created;
 397        bool flushing;
 398        const struct tcf_proto_ops *tmplt_ops;
 399        void *tmplt_priv;
 400        struct rcu_head rcu;
 401};
 402
 403struct tcf_block {
 404        /* Lock protects tcf_block and lifetime-management data of chains
 405         * attached to the block (refcnt, action_refcnt, explicitly_created).
 406         */
 407        struct mutex lock;
 408        struct list_head chain_list;
 409        u32 index; /* block index for shared blocks */
 410        u32 classid; /* which class this block belongs to */
 411        refcount_t refcnt;
 412        struct net *net;
 413        struct Qdisc *q;
 414        struct rw_semaphore cb_lock; /* protects cb_list and offload counters */
 415        struct flow_block flow_block;
 416        struct list_head owner_list;
 417        bool keep_dst;
 418        atomic_t offloadcnt; /* Number of oddloaded filters */
 419        unsigned int nooffloaddevcnt; /* Number of devs unable to do offload */
 420        unsigned int lockeddevcnt; /* Number of devs that require rtnl lock. */
 421        struct {
 422                struct tcf_chain *chain;
 423                struct list_head filter_chain_list;
 424        } chain0;
 425        struct rcu_head rcu;
 426        DECLARE_HASHTABLE(proto_destroy_ht, 7);
 427        struct mutex proto_destroy_lock; /* Lock for proto_destroy hashtable. */
 428};
 429
 430#ifdef CONFIG_PROVE_LOCKING
 431static inline bool lockdep_tcf_chain_is_locked(struct tcf_chain *chain)
 432{
 433        return lockdep_is_held(&chain->filter_chain_lock);
 434}
 435
 436static inline bool lockdep_tcf_proto_is_locked(struct tcf_proto *tp)
 437{
 438        return lockdep_is_held(&tp->lock);
 439}
 440#else
 441static inline bool lockdep_tcf_chain_is_locked(struct tcf_block *chain)
 442{
 443        return true;
 444}
 445
 446static inline bool lockdep_tcf_proto_is_locked(struct tcf_proto *tp)
 447{
 448        return true;
 449}
 450#endif /* #ifdef CONFIG_PROVE_LOCKING */
 451
 452#define tcf_chain_dereference(p, chain)                                 \
 453        rcu_dereference_protected(p, lockdep_tcf_chain_is_locked(chain))
 454
 455#define tcf_proto_dereference(p, tp)                                    \
 456        rcu_dereference_protected(p, lockdep_tcf_proto_is_locked(tp))
 457
 458static inline void qdisc_cb_private_validate(const struct sk_buff *skb, int sz)
 459{
 460        struct qdisc_skb_cb *qcb;
 461
 462        BUILD_BUG_ON(sizeof(skb->cb) < offsetof(struct qdisc_skb_cb, data) + sz);
 463        BUILD_BUG_ON(sizeof(qcb->data) < sz);
 464}
 465
 466static inline int qdisc_qlen_cpu(const struct Qdisc *q)
 467{
 468        return this_cpu_ptr(q->cpu_qstats)->qlen;
 469}
 470
 471static inline int qdisc_qlen(const struct Qdisc *q)
 472{
 473        return q->q.qlen;
 474}
 475
 476static inline int qdisc_qlen_sum(const struct Qdisc *q)
 477{
 478        __u32 qlen = q->qstats.qlen;
 479        int i;
 480
 481        if (qdisc_is_percpu_stats(q)) {
 482                for_each_possible_cpu(i)
 483                        qlen += per_cpu_ptr(q->cpu_qstats, i)->qlen;
 484        } else {
 485                qlen += q->q.qlen;
 486        }
 487
 488        return qlen;
 489}
 490
 491static inline struct qdisc_skb_cb *qdisc_skb_cb(const struct sk_buff *skb)
 492{
 493        return (struct qdisc_skb_cb *)skb->cb;
 494}
 495
 496static inline spinlock_t *qdisc_lock(struct Qdisc *qdisc)
 497{
 498        return &qdisc->q.lock;
 499}
 500
 501static inline struct Qdisc *qdisc_root(const struct Qdisc *qdisc)
 502{
 503        struct Qdisc *q = rcu_dereference_rtnl(qdisc->dev_queue->qdisc);
 504
 505        return q;
 506}
 507
 508static inline struct Qdisc *qdisc_root_bh(const struct Qdisc *qdisc)
 509{
 510        return rcu_dereference_bh(qdisc->dev_queue->qdisc);
 511}
 512
 513static inline struct Qdisc *qdisc_root_sleeping(const struct Qdisc *qdisc)
 514{
 515        return qdisc->dev_queue->qdisc_sleeping;
 516}
 517
 518/* The qdisc root lock is a mechanism by which to top level
 519 * of a qdisc tree can be locked from any qdisc node in the
 520 * forest.  This allows changing the configuration of some
 521 * aspect of the qdisc tree while blocking out asynchronous
 522 * qdisc access in the packet processing paths.
 523 *
 524 * It is only legal to do this when the root will not change
 525 * on us.  Otherwise we'll potentially lock the wrong qdisc
 526 * root.  This is enforced by holding the RTNL semaphore, which
 527 * all users of this lock accessor must do.
 528 */
 529static inline spinlock_t *qdisc_root_lock(const struct Qdisc *qdisc)
 530{
 531        struct Qdisc *root = qdisc_root(qdisc);
 532
 533        ASSERT_RTNL();
 534        return qdisc_lock(root);
 535}
 536
 537static inline spinlock_t *qdisc_root_sleeping_lock(const struct Qdisc *qdisc)
 538{
 539        struct Qdisc *root = qdisc_root_sleeping(qdisc);
 540
 541        ASSERT_RTNL();
 542        return qdisc_lock(root);
 543}
 544
 545static inline seqcount_t *qdisc_root_sleeping_running(const struct Qdisc *qdisc)
 546{
 547        struct Qdisc *root = qdisc_root_sleeping(qdisc);
 548
 549        ASSERT_RTNL();
 550        return &root->running;
 551}
 552
 553static inline struct net_device *qdisc_dev(const struct Qdisc *qdisc)
 554{
 555        return qdisc->dev_queue->dev;
 556}
 557
 558static inline void sch_tree_lock(const struct Qdisc *q)
 559{
 560        spin_lock_bh(qdisc_root_sleeping_lock(q));
 561}
 562
 563static inline void sch_tree_unlock(const struct Qdisc *q)
 564{
 565        spin_unlock_bh(qdisc_root_sleeping_lock(q));
 566}
 567
 568extern struct Qdisc noop_qdisc;
 569extern struct Qdisc_ops noop_qdisc_ops;
 570extern struct Qdisc_ops pfifo_fast_ops;
 571extern struct Qdisc_ops mq_qdisc_ops;
 572extern struct Qdisc_ops noqueue_qdisc_ops;
 573extern const struct Qdisc_ops *default_qdisc_ops;
 574static inline const struct Qdisc_ops *
 575get_default_qdisc_ops(const struct net_device *dev, int ntx)
 576{
 577        return ntx < dev->real_num_tx_queues ?
 578                        default_qdisc_ops : &pfifo_fast_ops;
 579}
 580
 581struct Qdisc_class_common {
 582        u32                     classid;
 583        struct hlist_node       hnode;
 584};
 585
 586struct Qdisc_class_hash {
 587        struct hlist_head       *hash;
 588        unsigned int            hashsize;
 589        unsigned int            hashmask;
 590        unsigned int            hashelems;
 591};
 592
 593static inline unsigned int qdisc_class_hash(u32 id, u32 mask)
 594{
 595        id ^= id >> 8;
 596        id ^= id >> 4;
 597        return id & mask;
 598}
 599
 600static inline struct Qdisc_class_common *
 601qdisc_class_find(const struct Qdisc_class_hash *hash, u32 id)
 602{
 603        struct Qdisc_class_common *cl;
 604        unsigned int h;
 605
 606        if (!id)
 607                return NULL;
 608
 609        h = qdisc_class_hash(id, hash->hashmask);
 610        hlist_for_each_entry(cl, &hash->hash[h], hnode) {
 611                if (cl->classid == id)
 612                        return cl;
 613        }
 614        return NULL;
 615}
 616
 617static inline int tc_classid_to_hwtc(struct net_device *dev, u32 classid)
 618{
 619        u32 hwtc = TC_H_MIN(classid) - TC_H_MIN_PRIORITY;
 620
 621        return (hwtc < netdev_get_num_tc(dev)) ? hwtc : -EINVAL;
 622}
 623
 624int qdisc_class_hash_init(struct Qdisc_class_hash *);
 625void qdisc_class_hash_insert(struct Qdisc_class_hash *,
 626                             struct Qdisc_class_common *);
 627void qdisc_class_hash_remove(struct Qdisc_class_hash *,
 628                             struct Qdisc_class_common *);
 629void qdisc_class_hash_grow(struct Qdisc *, struct Qdisc_class_hash *);
 630void qdisc_class_hash_destroy(struct Qdisc_class_hash *);
 631
 632int dev_qdisc_change_tx_queue_len(struct net_device *dev);
 633void dev_init_scheduler(struct net_device *dev);
 634void dev_shutdown(struct net_device *dev);
 635void dev_activate(struct net_device *dev);
 636void dev_deactivate(struct net_device *dev);
 637void dev_deactivate_many(struct list_head *head);
 638struct Qdisc *dev_graft_qdisc(struct netdev_queue *dev_queue,
 639                              struct Qdisc *qdisc);
 640void qdisc_reset(struct Qdisc *qdisc);
 641void qdisc_put(struct Qdisc *qdisc);
 642void qdisc_put_unlocked(struct Qdisc *qdisc);
 643void qdisc_tree_reduce_backlog(struct Qdisc *qdisc, int n, int len);
 644#ifdef CONFIG_NET_SCHED
 645int qdisc_offload_dump_helper(struct Qdisc *q, enum tc_setup_type type,
 646                              void *type_data);
 647void qdisc_offload_graft_helper(struct net_device *dev, struct Qdisc *sch,
 648                                struct Qdisc *new, struct Qdisc *old,
 649                                enum tc_setup_type type, void *type_data,
 650                                struct netlink_ext_ack *extack);
 651#else
 652static inline int
 653qdisc_offload_dump_helper(struct Qdisc *q, enum tc_setup_type type,
 654                          void *type_data)
 655{
 656        q->flags &= ~TCQ_F_OFFLOADED;
 657        return 0;
 658}
 659
 660static inline void
 661qdisc_offload_graft_helper(struct net_device *dev, struct Qdisc *sch,
 662                           struct Qdisc *new, struct Qdisc *old,
 663                           enum tc_setup_type type, void *type_data,
 664                           struct netlink_ext_ack *extack)
 665{
 666}
 667#endif
 668struct Qdisc *qdisc_alloc(struct netdev_queue *dev_queue,
 669                          const struct Qdisc_ops *ops,
 670                          struct netlink_ext_ack *extack);
 671void qdisc_free(struct Qdisc *qdisc);
 672struct Qdisc *qdisc_create_dflt(struct netdev_queue *dev_queue,
 673                                const struct Qdisc_ops *ops, u32 parentid,
 674                                struct netlink_ext_ack *extack);
 675void __qdisc_calculate_pkt_len(struct sk_buff *skb,
 676                               const struct qdisc_size_table *stab);
 677int skb_do_redirect(struct sk_buff *);
 678
 679static inline bool skb_at_tc_ingress(const struct sk_buff *skb)
 680{
 681#ifdef CONFIG_NET_CLS_ACT
 682        return skb->tc_at_ingress;
 683#else
 684        return false;
 685#endif
 686}
 687
 688static inline bool skb_skip_tc_classify(struct sk_buff *skb)
 689{
 690#ifdef CONFIG_NET_CLS_ACT
 691        if (skb->tc_skip_classify) {
 692                skb->tc_skip_classify = 0;
 693                return true;
 694        }
 695#endif
 696        return false;
 697}
 698
 699/* Reset all TX qdiscs greater than index of a device.  */
 700static inline void qdisc_reset_all_tx_gt(struct net_device *dev, unsigned int i)
 701{
 702        struct Qdisc *qdisc;
 703
 704        for (; i < dev->num_tx_queues; i++) {
 705                qdisc = rtnl_dereference(netdev_get_tx_queue(dev, i)->qdisc);
 706                if (qdisc) {
 707                        spin_lock_bh(qdisc_lock(qdisc));
 708                        qdisc_reset(qdisc);
 709                        spin_unlock_bh(qdisc_lock(qdisc));
 710                }
 711        }
 712}
 713
 714static inline void qdisc_reset_all_tx(struct net_device *dev)
 715{
 716        qdisc_reset_all_tx_gt(dev, 0);
 717}
 718
 719/* Are all TX queues of the device empty?  */
 720static inline bool qdisc_all_tx_empty(const struct net_device *dev)
 721{
 722        unsigned int i;
 723
 724        rcu_read_lock();
 725        for (i = 0; i < dev->num_tx_queues; i++) {
 726                struct netdev_queue *txq = netdev_get_tx_queue(dev, i);
 727                const struct Qdisc *q = rcu_dereference(txq->qdisc);
 728
 729                if (!qdisc_is_empty(q)) {
 730                        rcu_read_unlock();
 731                        return false;
 732                }
 733        }
 734        rcu_read_unlock();
 735        return true;
 736}
 737
 738/* Are any of the TX qdiscs changing?  */
 739static inline bool qdisc_tx_changing(const struct net_device *dev)
 740{
 741        unsigned int i;
 742
 743        for (i = 0; i < dev->num_tx_queues; i++) {
 744                struct netdev_queue *txq = netdev_get_tx_queue(dev, i);
 745                if (rcu_access_pointer(txq->qdisc) != txq->qdisc_sleeping)
 746                        return true;
 747        }
 748        return false;
 749}
 750
 751/* Is the device using the noop qdisc on all queues?  */
 752static inline bool qdisc_tx_is_noop(const struct net_device *dev)
 753{
 754        unsigned int i;
 755
 756        for (i = 0; i < dev->num_tx_queues; i++) {
 757                struct netdev_queue *txq = netdev_get_tx_queue(dev, i);
 758                if (rcu_access_pointer(txq->qdisc) != &noop_qdisc)
 759                        return false;
 760        }
 761        return true;
 762}
 763
 764static inline unsigned int qdisc_pkt_len(const struct sk_buff *skb)
 765{
 766        return qdisc_skb_cb(skb)->pkt_len;
 767}
 768
 769/* additional qdisc xmit flags (NET_XMIT_MASK in linux/netdevice.h) */
 770enum net_xmit_qdisc_t {
 771        __NET_XMIT_STOLEN = 0x00010000,
 772        __NET_XMIT_BYPASS = 0x00020000,
 773};
 774
 775#ifdef CONFIG_NET_CLS_ACT
 776#define net_xmit_drop_count(e)  ((e) & __NET_XMIT_STOLEN ? 0 : 1)
 777#else
 778#define net_xmit_drop_count(e)  (1)
 779#endif
 780
 781static inline void qdisc_calculate_pkt_len(struct sk_buff *skb,
 782                                           const struct Qdisc *sch)
 783{
 784#ifdef CONFIG_NET_SCHED
 785        struct qdisc_size_table *stab = rcu_dereference_bh(sch->stab);
 786
 787        if (stab)
 788                __qdisc_calculate_pkt_len(skb, stab);
 789#endif
 790}
 791
 792static inline int qdisc_enqueue(struct sk_buff *skb, struct Qdisc *sch,
 793                                struct sk_buff **to_free)
 794{
 795        qdisc_calculate_pkt_len(skb, sch);
 796        return sch->enqueue(skb, sch, to_free);
 797}
 798
 799static inline void _bstats_update(struct gnet_stats_basic_packed *bstats,
 800                                  __u64 bytes, __u32 packets)
 801{
 802        bstats->bytes += bytes;
 803        bstats->packets += packets;
 804}
 805
 806static inline void bstats_update(struct gnet_stats_basic_packed *bstats,
 807                                 const struct sk_buff *skb)
 808{
 809        _bstats_update(bstats,
 810                       qdisc_pkt_len(skb),
 811                       skb_is_gso(skb) ? skb_shinfo(skb)->gso_segs : 1);
 812}
 813
 814static inline void _bstats_cpu_update(struct gnet_stats_basic_cpu *bstats,
 815                                      __u64 bytes, __u32 packets)
 816{
 817        u64_stats_update_begin(&bstats->syncp);
 818        _bstats_update(&bstats->bstats, bytes, packets);
 819        u64_stats_update_end(&bstats->syncp);
 820}
 821
 822static inline void bstats_cpu_update(struct gnet_stats_basic_cpu *bstats,
 823                                     const struct sk_buff *skb)
 824{
 825        u64_stats_update_begin(&bstats->syncp);
 826        bstats_update(&bstats->bstats, skb);
 827        u64_stats_update_end(&bstats->syncp);
 828}
 829
 830static inline void qdisc_bstats_cpu_update(struct Qdisc *sch,
 831                                           const struct sk_buff *skb)
 832{
 833        bstats_cpu_update(this_cpu_ptr(sch->cpu_bstats), skb);
 834}
 835
 836static inline void qdisc_bstats_update(struct Qdisc *sch,
 837                                       const struct sk_buff *skb)
 838{
 839        bstats_update(&sch->bstats, skb);
 840}
 841
 842static inline void qdisc_qstats_backlog_dec(struct Qdisc *sch,
 843                                            const struct sk_buff *skb)
 844{
 845        sch->qstats.backlog -= qdisc_pkt_len(skb);
 846}
 847
 848static inline void qdisc_qstats_cpu_backlog_dec(struct Qdisc *sch,
 849                                                const struct sk_buff *skb)
 850{
 851        this_cpu_sub(sch->cpu_qstats->backlog, qdisc_pkt_len(skb));
 852}
 853
 854static inline void qdisc_qstats_backlog_inc(struct Qdisc *sch,
 855                                            const struct sk_buff *skb)
 856{
 857        sch->qstats.backlog += qdisc_pkt_len(skb);
 858}
 859
 860static inline void qdisc_qstats_cpu_backlog_inc(struct Qdisc *sch,
 861                                                const struct sk_buff *skb)
 862{
 863        this_cpu_add(sch->cpu_qstats->backlog, qdisc_pkt_len(skb));
 864}
 865
 866static inline void qdisc_qstats_cpu_qlen_inc(struct Qdisc *sch)
 867{
 868        this_cpu_inc(sch->cpu_qstats->qlen);
 869}
 870
 871static inline void qdisc_qstats_cpu_qlen_dec(struct Qdisc *sch)
 872{
 873        this_cpu_dec(sch->cpu_qstats->qlen);
 874}
 875
 876static inline void qdisc_qstats_cpu_requeues_inc(struct Qdisc *sch)
 877{
 878        this_cpu_inc(sch->cpu_qstats->requeues);
 879}
 880
 881static inline void __qdisc_qstats_drop(struct Qdisc *sch, int count)
 882{
 883        sch->qstats.drops += count;
 884}
 885
 886static inline void qstats_drop_inc(struct gnet_stats_queue *qstats)
 887{
 888        qstats->drops++;
 889}
 890
 891static inline void qstats_overlimit_inc(struct gnet_stats_queue *qstats)
 892{
 893        qstats->overlimits++;
 894}
 895
 896static inline void qdisc_qstats_drop(struct Qdisc *sch)
 897{
 898        qstats_drop_inc(&sch->qstats);
 899}
 900
 901static inline void qdisc_qstats_cpu_drop(struct Qdisc *sch)
 902{
 903        this_cpu_inc(sch->cpu_qstats->drops);
 904}
 905
 906static inline void qdisc_qstats_overlimit(struct Qdisc *sch)
 907{
 908        sch->qstats.overlimits++;
 909}
 910
 911static inline int qdisc_qstats_copy(struct gnet_dump *d, struct Qdisc *sch)
 912{
 913        __u32 qlen = qdisc_qlen_sum(sch);
 914
 915        return gnet_stats_copy_queue(d, sch->cpu_qstats, &sch->qstats, qlen);
 916}
 917
 918static inline void qdisc_qstats_qlen_backlog(struct Qdisc *sch,  __u32 *qlen,
 919                                             __u32 *backlog)
 920{
 921        struct gnet_stats_queue qstats = { 0 };
 922        __u32 len = qdisc_qlen_sum(sch);
 923
 924        __gnet_stats_copy_queue(&qstats, sch->cpu_qstats, &sch->qstats, len);
 925        *qlen = qstats.qlen;
 926        *backlog = qstats.backlog;
 927}
 928
 929static inline void qdisc_tree_flush_backlog(struct Qdisc *sch)
 930{
 931        __u32 qlen, backlog;
 932
 933        qdisc_qstats_qlen_backlog(sch, &qlen, &backlog);
 934        qdisc_tree_reduce_backlog(sch, qlen, backlog);
 935}
 936
 937static inline void qdisc_purge_queue(struct Qdisc *sch)
 938{
 939        __u32 qlen, backlog;
 940
 941        qdisc_qstats_qlen_backlog(sch, &qlen, &backlog);
 942        qdisc_reset(sch);
 943        qdisc_tree_reduce_backlog(sch, qlen, backlog);
 944}
 945
 946static inline void qdisc_skb_head_init(struct qdisc_skb_head *qh)
 947{
 948        qh->head = NULL;
 949        qh->tail = NULL;
 950        qh->qlen = 0;
 951}
 952
 953static inline void __qdisc_enqueue_tail(struct sk_buff *skb,
 954                                        struct qdisc_skb_head *qh)
 955{
 956        struct sk_buff *last = qh->tail;
 957
 958        if (last) {
 959                skb->next = NULL;
 960                last->next = skb;
 961                qh->tail = skb;
 962        } else {
 963                qh->tail = skb;
 964                qh->head = skb;
 965        }
 966        qh->qlen++;
 967}
 968
 969static inline int qdisc_enqueue_tail(struct sk_buff *skb, struct Qdisc *sch)
 970{
 971        __qdisc_enqueue_tail(skb, &sch->q);
 972        qdisc_qstats_backlog_inc(sch, skb);
 973        return NET_XMIT_SUCCESS;
 974}
 975
 976static inline void __qdisc_enqueue_head(struct sk_buff *skb,
 977                                        struct qdisc_skb_head *qh)
 978{
 979        skb->next = qh->head;
 980
 981        if (!qh->head)
 982                qh->tail = skb;
 983        qh->head = skb;
 984        qh->qlen++;
 985}
 986
 987static inline struct sk_buff *__qdisc_dequeue_head(struct qdisc_skb_head *qh)
 988{
 989        struct sk_buff *skb = qh->head;
 990
 991        if (likely(skb != NULL)) {
 992                qh->head = skb->next;
 993                qh->qlen--;
 994                if (qh->head == NULL)
 995                        qh->tail = NULL;
 996                skb->next = NULL;
 997        }
 998
 999        return skb;
1000}
1001
1002static inline struct sk_buff *qdisc_dequeue_head(struct Qdisc *sch)
1003{
1004        struct sk_buff *skb = __qdisc_dequeue_head(&sch->q);
1005
1006        if (likely(skb != NULL)) {
1007                qdisc_qstats_backlog_dec(sch, skb);
1008                qdisc_bstats_update(sch, skb);
1009        }
1010
1011        return skb;
1012}
1013
1014/* Instead of calling kfree_skb() while root qdisc lock is held,
1015 * queue the skb for future freeing at end of __dev_xmit_skb()
1016 */
1017static inline void __qdisc_drop(struct sk_buff *skb, struct sk_buff **to_free)
1018{
1019        skb->next = *to_free;
1020        *to_free = skb;
1021}
1022
1023static inline void __qdisc_drop_all(struct sk_buff *skb,
1024                                    struct sk_buff **to_free)
1025{
1026        if (skb->prev)
1027                skb->prev->next = *to_free;
1028        else
1029                skb->next = *to_free;
1030        *to_free = skb;
1031}
1032
1033static inline unsigned int __qdisc_queue_drop_head(struct Qdisc *sch,
1034                                                   struct qdisc_skb_head *qh,
1035                                                   struct sk_buff **to_free)
1036{
1037        struct sk_buff *skb = __qdisc_dequeue_head(qh);
1038
1039        if (likely(skb != NULL)) {
1040                unsigned int len = qdisc_pkt_len(skb);
1041
1042                qdisc_qstats_backlog_dec(sch, skb);
1043                __qdisc_drop(skb, to_free);
1044                return len;
1045        }
1046
1047        return 0;
1048}
1049
1050static inline unsigned int qdisc_queue_drop_head(struct Qdisc *sch,
1051                                                 struct sk_buff **to_free)
1052{
1053        return __qdisc_queue_drop_head(sch, &sch->q, to_free);
1054}
1055
1056static inline struct sk_buff *qdisc_peek_head(struct Qdisc *sch)
1057{
1058        const struct qdisc_skb_head *qh = &sch->q;
1059
1060        return qh->head;
1061}
1062
1063/* generic pseudo peek method for non-work-conserving qdisc */
1064static inline struct sk_buff *qdisc_peek_dequeued(struct Qdisc *sch)
1065{
1066        struct sk_buff *skb = skb_peek(&sch->gso_skb);
1067
1068        /* we can reuse ->gso_skb because peek isn't called for root qdiscs */
1069        if (!skb) {
1070                skb = sch->dequeue(sch);
1071
1072                if (skb) {
1073                        __skb_queue_head(&sch->gso_skb, skb);
1074                        /* it's still part of the queue */
1075                        qdisc_qstats_backlog_inc(sch, skb);
1076                        sch->q.qlen++;
1077                }
1078        }
1079
1080        return skb;
1081}
1082
1083static inline void qdisc_update_stats_at_dequeue(struct Qdisc *sch,
1084                                                 struct sk_buff *skb)
1085{
1086        if (qdisc_is_percpu_stats(sch)) {
1087                qdisc_qstats_cpu_backlog_dec(sch, skb);
1088                qdisc_bstats_cpu_update(sch, skb);
1089                qdisc_qstats_cpu_qlen_dec(sch);
1090        } else {
1091                qdisc_qstats_backlog_dec(sch, skb);
1092                qdisc_bstats_update(sch, skb);
1093                sch->q.qlen--;
1094        }
1095}
1096
1097static inline void qdisc_update_stats_at_enqueue(struct Qdisc *sch,
1098                                                 unsigned int pkt_len)
1099{
1100        if (qdisc_is_percpu_stats(sch)) {
1101                qdisc_qstats_cpu_qlen_inc(sch);
1102                this_cpu_add(sch->cpu_qstats->backlog, pkt_len);
1103        } else {
1104                sch->qstats.backlog += pkt_len;
1105                sch->q.qlen++;
1106        }
1107}
1108
1109/* use instead of qdisc->dequeue() for all qdiscs queried with ->peek() */
1110static inline struct sk_buff *qdisc_dequeue_peeked(struct Qdisc *sch)
1111{
1112        struct sk_buff *skb = skb_peek(&sch->gso_skb);
1113
1114        if (skb) {
1115                skb = __skb_dequeue(&sch->gso_skb);
1116                if (qdisc_is_percpu_stats(sch)) {
1117                        qdisc_qstats_cpu_backlog_dec(sch, skb);
1118                        qdisc_qstats_cpu_qlen_dec(sch);
1119                } else {
1120                        qdisc_qstats_backlog_dec(sch, skb);
1121                        sch->q.qlen--;
1122                }
1123        } else {
1124                skb = sch->dequeue(sch);
1125        }
1126
1127        return skb;
1128}
1129
1130static inline void __qdisc_reset_queue(struct qdisc_skb_head *qh)
1131{
1132        /*
1133         * We do not know the backlog in bytes of this list, it
1134         * is up to the caller to correct it
1135         */
1136        ASSERT_RTNL();
1137        if (qh->qlen) {
1138                rtnl_kfree_skbs(qh->head, qh->tail);
1139
1140                qh->head = NULL;
1141                qh->tail = NULL;
1142                qh->qlen = 0;
1143        }
1144}
1145
1146static inline void qdisc_reset_queue(struct Qdisc *sch)
1147{
1148        __qdisc_reset_queue(&sch->q);
1149        sch->qstats.backlog = 0;
1150}
1151
1152static inline struct Qdisc *qdisc_replace(struct Qdisc *sch, struct Qdisc *new,
1153                                          struct Qdisc **pold)
1154{
1155        struct Qdisc *old;
1156
1157        sch_tree_lock(sch);
1158        old = *pold;
1159        *pold = new;
1160        if (old != NULL)
1161                qdisc_tree_flush_backlog(old);
1162        sch_tree_unlock(sch);
1163
1164        return old;
1165}
1166
1167static inline void rtnl_qdisc_drop(struct sk_buff *skb, struct Qdisc *sch)
1168{
1169        rtnl_kfree_skbs(skb, skb);
1170        qdisc_qstats_drop(sch);
1171}
1172
1173static inline int qdisc_drop_cpu(struct sk_buff *skb, struct Qdisc *sch,
1174                                 struct sk_buff **to_free)
1175{
1176        __qdisc_drop(skb, to_free);
1177        qdisc_qstats_cpu_drop(sch);
1178
1179        return NET_XMIT_DROP;
1180}
1181
1182static inline int qdisc_drop(struct sk_buff *skb, struct Qdisc *sch,
1183                             struct sk_buff **to_free)
1184{
1185        __qdisc_drop(skb, to_free);
1186        qdisc_qstats_drop(sch);
1187
1188        return NET_XMIT_DROP;
1189}
1190
1191static inline int qdisc_drop_all(struct sk_buff *skb, struct Qdisc *sch,
1192                                 struct sk_buff **to_free)
1193{
1194        __qdisc_drop_all(skb, to_free);
1195        qdisc_qstats_drop(sch);
1196
1197        return NET_XMIT_DROP;
1198}
1199
1200/* Length to Time (L2T) lookup in a qdisc_rate_table, to determine how
1201   long it will take to send a packet given its size.
1202 */
1203static inline u32 qdisc_l2t(struct qdisc_rate_table* rtab, unsigned int pktlen)
1204{
1205        int slot = pktlen + rtab->rate.cell_align + rtab->rate.overhead;
1206        if (slot < 0)
1207                slot = 0;
1208        slot >>= rtab->rate.cell_log;
1209        if (slot > 255)
1210                return rtab->data[255]*(slot >> 8) + rtab->data[slot & 0xFF];
1211        return rtab->data[slot];
1212}
1213
1214struct psched_ratecfg {
1215        u64     rate_bytes_ps; /* bytes per second */
1216        u32     mult;
1217        u16     overhead;
1218        u8      linklayer;
1219        u8      shift;
1220};
1221
1222static inline u64 psched_l2t_ns(const struct psched_ratecfg *r,
1223                                unsigned int len)
1224{
1225        len += r->overhead;
1226
1227        if (unlikely(r->linklayer == TC_LINKLAYER_ATM))
1228                return ((u64)(DIV_ROUND_UP(len,48)*53) * r->mult) >> r->shift;
1229
1230        return ((u64)len * r->mult) >> r->shift;
1231}
1232
1233void psched_ratecfg_precompute(struct psched_ratecfg *r,
1234                               const struct tc_ratespec *conf,
1235                               u64 rate64);
1236
1237static inline void psched_ratecfg_getrate(struct tc_ratespec *res,
1238                                          const struct psched_ratecfg *r)
1239{
1240        memset(res, 0, sizeof(*res));
1241
1242        /* legacy struct tc_ratespec has a 32bit @rate field
1243         * Qdisc using 64bit rate should add new attributes
1244         * in order to maintain compatibility.
1245         */
1246        res->rate = min_t(u64, r->rate_bytes_ps, ~0U);
1247
1248        res->overhead = r->overhead;
1249        res->linklayer = (r->linklayer & TC_LINKLAYER_MASK);
1250}
1251
1252/* Mini Qdisc serves for specific needs of ingress/clsact Qdisc.
1253 * The fast path only needs to access filter list and to update stats
1254 */
1255struct mini_Qdisc {
1256        struct tcf_proto *filter_list;
1257        struct tcf_block *block;
1258        struct gnet_stats_basic_cpu __percpu *cpu_bstats;
1259        struct gnet_stats_queue __percpu *cpu_qstats;
1260        struct rcu_head rcu;
1261};
1262
1263static inline void mini_qdisc_bstats_cpu_update(struct mini_Qdisc *miniq,
1264                                                const struct sk_buff *skb)
1265{
1266        bstats_cpu_update(this_cpu_ptr(miniq->cpu_bstats), skb);
1267}
1268
1269static inline void mini_qdisc_qstats_cpu_drop(struct mini_Qdisc *miniq)
1270{
1271        this_cpu_inc(miniq->cpu_qstats->drops);
1272}
1273
1274struct mini_Qdisc_pair {
1275        struct mini_Qdisc miniq1;
1276        struct mini_Qdisc miniq2;
1277        struct mini_Qdisc __rcu **p_miniq;
1278};
1279
1280void mini_qdisc_pair_swap(struct mini_Qdisc_pair *miniqp,
1281                          struct tcf_proto *tp_head);
1282void mini_qdisc_pair_init(struct mini_Qdisc_pair *miniqp, struct Qdisc *qdisc,
1283                          struct mini_Qdisc __rcu **p_miniq);
1284void mini_qdisc_pair_block_init(struct mini_Qdisc_pair *miniqp,
1285                                struct tcf_block *block);
1286
1287static inline int skb_tc_reinsert(struct sk_buff *skb, struct tcf_result *res)
1288{
1289        return res->ingress ? netif_receive_skb(skb) : dev_queue_xmit(skb);
1290}
1291
1292#endif
1293