aboutsummaryrefslogtreecommitdiffstats
path: root/net/sched/sch_cbq.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/sched/sch_cbq.c')
-rw-r--r--net/sched/sch_cbq.c17
1 files changed, 8 insertions, 9 deletions
diff --git a/net/sched/sch_cbq.c b/net/sched/sch_cbq.c
index 9e6cdab6af3b..2bb271b0efc3 100644
--- a/net/sched/sch_cbq.c
+++ b/net/sched/sch_cbq.c
@@ -738,7 +738,7 @@ cbq_update_toplevel(struct cbq_sched_data *q, struct cbq_class *cl,
738 if (cl && q->toplevel >= borrowed->level) { 738 if (cl && q->toplevel >= borrowed->level) {
739 if (cl->q->q.qlen > 1) { 739 if (cl->q->q.qlen > 1) {
740 do { 740 do {
741 if (PSCHED_IS_PASTPERFECT(borrowed->undertime)) { 741 if (borrowed->undertime == PSCHED_PASTPERFECT) {
742 q->toplevel = borrowed->level; 742 q->toplevel = borrowed->level;
743 return; 743 return;
744 } 744 }
@@ -824,7 +824,7 @@ cbq_update(struct cbq_sched_data *q)
824 } else { 824 } else {
825 /* Underlimit */ 825 /* Underlimit */
826 826
827 PSCHED_SET_PASTPERFECT(cl->undertime); 827 cl->undertime = PSCHED_PASTPERFECT;
828 if (avgidle > cl->maxidle) 828 if (avgidle > cl->maxidle)
829 cl->avgidle = cl->maxidle; 829 cl->avgidle = cl->maxidle;
830 else 830 else
@@ -845,7 +845,7 @@ cbq_under_limit(struct cbq_class *cl)
845 if (cl->tparent == NULL) 845 if (cl->tparent == NULL)
846 return cl; 846 return cl;
847 847
848 if (PSCHED_IS_PASTPERFECT(cl->undertime) || q->now >= cl->undertime) { 848 if (cl->undertime == PSCHED_PASTPERFECT || q->now >= cl->undertime) {
849 cl->delayed = 0; 849 cl->delayed = 0;
850 return cl; 850 return cl;
851 } 851 }
@@ -868,8 +868,7 @@ cbq_under_limit(struct cbq_class *cl)
868 } 868 }
869 if (cl->level > q->toplevel) 869 if (cl->level > q->toplevel)
870 return NULL; 870 return NULL;
871 } while (!PSCHED_IS_PASTPERFECT(cl->undertime) && 871 } while (cl->undertime != PSCHED_PASTPERFECT && q->now < cl->undertime);
872 q->now < cl->undertime);
873 872
874 cl->delayed = 0; 873 cl->delayed = 0;
875 return cl; 874 return cl;
@@ -1054,11 +1053,11 @@ cbq_dequeue(struct Qdisc *sch)
1054 */ 1053 */
1055 1054
1056 if (q->toplevel == TC_CBQ_MAXLEVEL && 1055 if (q->toplevel == TC_CBQ_MAXLEVEL &&
1057 PSCHED_IS_PASTPERFECT(q->link.undertime)) 1056 q->link.undertime == PSCHED_PASTPERFECT)
1058 break; 1057 break;
1059 1058
1060 q->toplevel = TC_CBQ_MAXLEVEL; 1059 q->toplevel = TC_CBQ_MAXLEVEL;
1061 PSCHED_SET_PASTPERFECT(q->link.undertime); 1060 q->link.undertime = PSCHED_PASTPERFECT;
1062 } 1061 }
1063 1062
1064 /* No packets in scheduler or nobody wants to give them to us :-( 1063 /* No packets in scheduler or nobody wants to give them to us :-(
@@ -1289,7 +1288,7 @@ cbq_reset(struct Qdisc* sch)
1289 qdisc_reset(cl->q); 1288 qdisc_reset(cl->q);
1290 1289
1291 cl->next_alive = NULL; 1290 cl->next_alive = NULL;
1292 PSCHED_SET_PASTPERFECT(cl->undertime); 1291 cl->undertime = PSCHED_PASTPERFECT;
1293 cl->avgidle = cl->maxidle; 1292 cl->avgidle = cl->maxidle;
1294 cl->deficit = cl->quantum; 1293 cl->deficit = cl->quantum;
1295 cl->cpriority = cl->priority; 1294 cl->cpriority = cl->priority;
@@ -1650,7 +1649,7 @@ cbq_dump_class_stats(struct Qdisc *sch, unsigned long arg,
1650 cl->xstats.avgidle = cl->avgidle; 1649 cl->xstats.avgidle = cl->avgidle;
1651 cl->xstats.undertime = 0; 1650 cl->xstats.undertime = 0;
1652 1651
1653 if (!PSCHED_IS_PASTPERFECT(cl->undertime)) 1652 if (cl->undertime != PSCHED_PASTPERFECT)
1654 cl->xstats.undertime = PSCHED_TDIFF(cl->undertime, q->now); 1653 cl->xstats.undertime = PSCHED_TDIFF(cl->undertime, q->now);
1655 1654
1656 if (gnet_stats_copy_basic(d, &cl->bstats) < 0 || 1655 if (gnet_stats_copy_basic(d, &cl->bstats) < 0 ||