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