mq, mqprio: Use gnet_stats_add_queue().
gnet_stats_add_basic() and gnet_stats_add_queue() add up the statistics so they can be used directly for both the per-CPU and global case. gnet_stats_add_queue() copies either Qdisc's per-CPU gnet_stats_queue::qlen or the global member. The global gnet_stats_queue::qlen isn't touched in the per-CPU case so there is no need to consider it in the global-case. In the per-CPU case, the sum of global gnet_stats_queue::qlen and the per-CPU gnet_stats_queue::qlen was assigned to sch->q.qlen and sch->qstats.qlen. Now both fields are copied individually. Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
448e163f8b
Коммит
7361df4606
|
@ -130,7 +130,6 @@ static int mq_dump(struct Qdisc *sch, struct sk_buff *skb)
|
|||
struct net_device *dev = qdisc_dev(sch);
|
||||
struct Qdisc *qdisc;
|
||||
unsigned int ntx;
|
||||
__u32 qlen = 0;
|
||||
|
||||
sch->q.qlen = 0;
|
||||
memset(&sch->bstats, 0, sizeof(sch->bstats));
|
||||
|
@ -145,24 +144,11 @@ static int mq_dump(struct Qdisc *sch, struct sk_buff *skb)
|
|||
qdisc = netdev_get_tx_queue(dev, ntx)->qdisc_sleeping;
|
||||
spin_lock_bh(qdisc_lock(qdisc));
|
||||
|
||||
if (qdisc_is_percpu_stats(qdisc)) {
|
||||
qlen = qdisc_qlen_sum(qdisc);
|
||||
gnet_stats_add_basic(NULL, &sch->bstats,
|
||||
qdisc->cpu_bstats, &qdisc->bstats);
|
||||
__gnet_stats_copy_queue(&sch->qstats,
|
||||
qdisc->cpu_qstats,
|
||||
&qdisc->qstats, qlen);
|
||||
sch->q.qlen += qlen;
|
||||
} else {
|
||||
sch->q.qlen += qdisc->q.qlen;
|
||||
sch->bstats.bytes += qdisc->bstats.bytes;
|
||||
sch->bstats.packets += qdisc->bstats.packets;
|
||||
sch->qstats.qlen += qdisc->qstats.qlen;
|
||||
sch->qstats.backlog += qdisc->qstats.backlog;
|
||||
sch->qstats.drops += qdisc->qstats.drops;
|
||||
sch->qstats.requeues += qdisc->qstats.requeues;
|
||||
sch->qstats.overlimits += qdisc->qstats.overlimits;
|
||||
}
|
||||
gnet_stats_add_basic(NULL, &sch->bstats, qdisc->cpu_bstats,
|
||||
&qdisc->bstats);
|
||||
gnet_stats_add_queue(&sch->qstats, qdisc->cpu_qstats,
|
||||
&qdisc->qstats);
|
||||
sch->q.qlen += qdisc_qlen(qdisc);
|
||||
|
||||
spin_unlock_bh(qdisc_lock(qdisc));
|
||||
}
|
||||
|
|
|
@ -402,24 +402,11 @@ static int mqprio_dump(struct Qdisc *sch, struct sk_buff *skb)
|
|||
qdisc = netdev_get_tx_queue(dev, ntx)->qdisc_sleeping;
|
||||
spin_lock_bh(qdisc_lock(qdisc));
|
||||
|
||||
if (qdisc_is_percpu_stats(qdisc)) {
|
||||
__u32 qlen = qdisc_qlen_sum(qdisc);
|
||||
|
||||
gnet_stats_add_basic(NULL, &sch->bstats,
|
||||
qdisc->cpu_bstats, &qdisc->bstats);
|
||||
__gnet_stats_copy_queue(&sch->qstats,
|
||||
qdisc->cpu_qstats,
|
||||
&qdisc->qstats, qlen);
|
||||
sch->q.qlen += qlen;
|
||||
} else {
|
||||
sch->q.qlen += qdisc->q.qlen;
|
||||
sch->bstats.bytes += qdisc->bstats.bytes;
|
||||
sch->bstats.packets += qdisc->bstats.packets;
|
||||
sch->qstats.backlog += qdisc->qstats.backlog;
|
||||
sch->qstats.drops += qdisc->qstats.drops;
|
||||
sch->qstats.requeues += qdisc->qstats.requeues;
|
||||
sch->qstats.overlimits += qdisc->qstats.overlimits;
|
||||
}
|
||||
gnet_stats_add_basic(NULL, &sch->bstats, qdisc->cpu_bstats,
|
||||
&qdisc->bstats);
|
||||
gnet_stats_add_queue(&sch->qstats, qdisc->cpu_qstats,
|
||||
&qdisc->qstats);
|
||||
sch->q.qlen += qdisc_qlen(qdisc);
|
||||
|
||||
spin_unlock_bh(qdisc_lock(qdisc));
|
||||
}
|
||||
|
@ -511,7 +498,7 @@ static int mqprio_dump_class_stats(struct Qdisc *sch, unsigned long cl,
|
|||
{
|
||||
if (cl >= TC_H_MIN_PRIORITY) {
|
||||
int i;
|
||||
__u32 qlen = 0;
|
||||
__u32 qlen;
|
||||
struct gnet_stats_queue qstats = {0};
|
||||
struct gnet_stats_basic_packed bstats = {0};
|
||||
struct net_device *dev = qdisc_dev(sch);
|
||||
|
@ -531,27 +518,15 @@ static int mqprio_dump_class_stats(struct Qdisc *sch, unsigned long cl,
|
|||
|
||||
spin_lock_bh(qdisc_lock(qdisc));
|
||||
|
||||
if (qdisc_is_percpu_stats(qdisc)) {
|
||||
qlen = qdisc_qlen_sum(qdisc);
|
||||
gnet_stats_add_basic(NULL, &bstats, qdisc->cpu_bstats,
|
||||
&qdisc->bstats);
|
||||
gnet_stats_add_queue(&qstats, qdisc->cpu_qstats,
|
||||
&qdisc->qstats);
|
||||
sch->q.qlen += qdisc_qlen(qdisc);
|
||||
|
||||
gnet_stats_add_basic(NULL, &bstats,
|
||||
qdisc->cpu_bstats,
|
||||
&qdisc->bstats);
|
||||
__gnet_stats_copy_queue(&qstats,
|
||||
qdisc->cpu_qstats,
|
||||
&qdisc->qstats,
|
||||
qlen);
|
||||
} else {
|
||||
qlen += qdisc->q.qlen;
|
||||
bstats.bytes += qdisc->bstats.bytes;
|
||||
bstats.packets += qdisc->bstats.packets;
|
||||
qstats.backlog += qdisc->qstats.backlog;
|
||||
qstats.drops += qdisc->qstats.drops;
|
||||
qstats.requeues += qdisc->qstats.requeues;
|
||||
qstats.overlimits += qdisc->qstats.overlimits;
|
||||
}
|
||||
spin_unlock_bh(qdisc_lock(qdisc));
|
||||
}
|
||||
qlen = qdisc_qlen(sch) + qstats.qlen;
|
||||
|
||||
/* Reclaim root sleeping lock before completing stats */
|
||||
if (d->lock)
|
||||
|
|
Загрузка…
Ссылка в новой задаче