|
@@ -292,11 +292,31 @@ static inline void qdisc_cb_private_validate(const struct sk_buff *skb, int sz)
|
|
|
BUILD_BUG_ON(sizeof(qcb->data) < sz);
|
|
|
}
|
|
|
|
|
|
+static inline int qdisc_qlen_cpu(const struct Qdisc *q)
|
|
|
+{
|
|
|
+ return this_cpu_ptr(q->cpu_qstats)->qlen;
|
|
|
+}
|
|
|
+
|
|
|
static inline int qdisc_qlen(const struct Qdisc *q)
|
|
|
{
|
|
|
return q->q.qlen;
|
|
|
}
|
|
|
|
|
|
+static inline int qdisc_qlen_sum(const struct Qdisc *q)
|
|
|
+{
|
|
|
+ __u32 qlen = 0;
|
|
|
+ int i;
|
|
|
+
|
|
|
+ if (q->flags & TCQ_F_NOLOCK) {
|
|
|
+ for_each_possible_cpu(i)
|
|
|
+ qlen += per_cpu_ptr(q->cpu_qstats, i)->qlen;
|
|
|
+ } else {
|
|
|
+ qlen = q->q.qlen;
|
|
|
+ }
|
|
|
+
|
|
|
+ return qlen;
|
|
|
+}
|
|
|
+
|
|
|
static inline struct qdisc_skb_cb *qdisc_skb_cb(const struct sk_buff *skb)
|
|
|
{
|
|
|
return (struct qdisc_skb_cb *)skb->cb;
|