Root/target/linux/generic-2.4/patches/212-htb_time_fix.patch

1--- a/net/sched/sch_htb.c
2+++ b/net/sched/sch_htb.c
3@@ -369,7 +369,7 @@ static void htb_debug_dump (struct htb_s
4         struct list_head *l;
5         list_for_each (l,q->hash+i) {
6             struct htb_class *cl = list_entry(l,struct htb_class,hlist);
7- long diff = PSCHED_TDIFF_SAFE(q->now, cl->t_c, (u32)cl->mbuffer, 0);
8+ long long diff = PSCHED_TDIFF_SAFE(q->now, cl->t_c, (u32)cl->mbuffer, 0);
9             printk(KERN_DEBUG "htb*c%x m=%d t=%ld c=%ld pq=%lu df=%ld ql=%d "
10                     "pa=%x f:",
11                 cl->classid,cl->cmode,cl->tokens,cl->ctokens,
12@@ -617,7 +617,7 @@ static void htb_deactivate_prios(struct
13  * mode transitions per time unit. The speed gain is about 1/6.
14  */
15 static __inline__ enum htb_cmode
16-htb_class_mode(struct htb_class *cl,long *diff)
17+htb_class_mode(struct htb_class *cl,long long *diff)
18 {
19     long toks;
20 
21@@ -650,7 +650,7 @@ htb_class_mode(struct htb_class *cl,long
22  * to mode other than HTB_CAN_SEND (see htb_add_to_wait_tree).
23  */
24 static void
25-htb_change_class_mode(struct htb_sched *q, struct htb_class *cl, long *diff)
26+htb_change_class_mode(struct htb_sched *q, struct htb_class *cl, long long *diff)
27 {
28     enum htb_cmode new_mode = htb_class_mode(cl,diff);
29     
30@@ -815,7 +815,8 @@ static void htb_rate_timer(unsigned long
31 static void htb_charge_class(struct htb_sched *q,struct htb_class *cl,
32         int level,int bytes)
33 {
34- long toks,diff;
35+ long long diff;
36+ long toks;
37     enum htb_cmode old_mode;
38     HTB_DBG(5,1,"htb_chrg_cl cl=%X lev=%d len=%d\n",cl->classid,level,bytes);
39 
40@@ -831,7 +832,7 @@ static void htb_charge_class(struct htb_
41 #ifdef HTB_DEBUG
42         if (diff > cl->mbuffer || diff < 0 || PSCHED_TLESS(q->now, cl->t_c)) {
43             if (net_ratelimit())
44- printk(KERN_ERR "HTB: bad diff in charge, cl=%X diff=%lX now=%Lu then=%Lu j=%lu\n",
45+ printk(KERN_ERR "HTB: bad diff in charge, cl=%X diff=%Ld now=%Lu then=%Lu j=%lu\n",
46                        cl->classid, diff,
47                        (unsigned long long) q->now,
48                        (unsigned long long) cl->t_c,
49@@ -848,7 +849,7 @@ static void htb_charge_class(struct htb_
50         }
51         HTB_ACCNT (ctokens,cbuffer,ceil);
52         cl->t_c = q->now;
53- HTB_DBG(5,2,"htb_chrg_clp cl=%X diff=%ld tok=%ld ctok=%ld\n",cl->classid,diff,cl->tokens,cl->ctokens);
54+ HTB_DBG(5,2,"htb_chrg_clp cl=%X diff=%Ld tok=%ld ctok=%ld\n",cl->classid,diff,cl->tokens,cl->ctokens);
55 
56         old_mode = cl->cmode; diff = 0;
57         htb_change_class_mode(q,cl,&diff);
58@@ -887,7 +888,7 @@ static long htb_do_events(struct htb_sch
59             level,q->wait_pq[level].rb_node,q->row_mask[level]);
60     for (i = 0; i < 500; i++) {
61         struct htb_class *cl;
62- long diff;
63+ long long diff;
64         rb_node_t *p = q->wait_pq[level].rb_node;
65         if (!p) return 0;
66         while (p->rb_left) p = p->rb_left;
67@@ -902,7 +903,7 @@ static long htb_do_events(struct htb_sch
68 #ifdef HTB_DEBUG
69         if (diff > cl->mbuffer || diff < 0 || PSCHED_TLESS(q->now, cl->t_c)) {
70             if (net_ratelimit())
71- printk(KERN_ERR "HTB: bad diff in events, cl=%X diff=%lX now=%Lu then=%Lu j=%lu\n",
72+ printk(KERN_ERR "HTB: bad diff in events, cl=%X diff=%Ld now=%Lu then=%Lu j=%lu\n",
73                        cl->classid, diff,
74                        (unsigned long long) q->now,
75                        (unsigned long long) cl->t_c,
76

Archive Download this file



interactive