summaryrefslogtreecommitdiffstats
path: root/net/sched
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2008-03-24 06:54:03 +0100
committerDavid S. Miller <davem@davemloft.net>2008-03-24 06:54:03 +0100
commit06802a819a0a2d31c952c0624cea6cd00e4e50da (patch)
tree8ccd7c668c7fbd8f08cb89426006040217caf3f1 /net/sched
parent[CASSINI]: Use shorter list_splice_init() macro for brevity. (diff)
parentsch_htb: fix "too many events" situation (diff)
downloadlinux-06802a819a0a2d31c952c0624cea6cd00e4e50da.tar.xz
linux-06802a819a0a2d31c952c0624cea6cd00e4e50da.zip
Merge branch 'master' of ../net-2.6/
Conflicts: net/ipv6/ndisc.c
Diffstat (limited to 'net/sched')
-rw-r--r--net/sched/sch_htb.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/net/sched/sch_htb.c b/net/sched/sch_htb.c
index 795c761ad99f..66148cc4759e 100644
--- a/net/sched/sch_htb.c
+++ b/net/sched/sch_htb.c
@@ -711,9 +711,11 @@ static void htb_charge_class(struct htb_sched *q, struct htb_class *cl,
*/
static psched_time_t htb_do_events(struct htb_sched *q, int level)
{
- int i;
-
- for (i = 0; i < 500; i++) {
+ /* don't run for longer than 2 jiffies; 2 is used instead of
+ 1 to simplify things when jiffy is going to be incremented
+ too soon */
+ unsigned long stop_at = jiffies + 2;
+ while (time_before(jiffies, stop_at)) {
struct htb_class *cl;
long diff;
struct rb_node *p = rb_first(&q->wait_pq[level]);
@@ -731,9 +733,8 @@ static psched_time_t htb_do_events(struct htb_sched *q, int level)
if (cl->cmode != HTB_CAN_SEND)
htb_add_to_wait_tree(q, cl, diff);
}
- if (net_ratelimit())
- printk(KERN_WARNING "htb: too many events !\n");
- return q->now + PSCHED_TICKS_PER_SEC / 10;
+ /* too much load - let's continue on next jiffie */
+ return q->now + PSCHED_TICKS_PER_SEC / HZ;
}
/* Returns class->node+prio from id-tree where classe's id is >= id. NULL