aboutsummaryrefslogtreecommitdiffstats
path: root/net/sched/sch_htb.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/sched/sch_htb.c')
-rw-r--r--net/sched/sch_htb.c18
1 files changed, 8 insertions, 10 deletions
diff --git a/net/sched/sch_htb.c b/net/sched/sch_htb.c
index 73094e7f4169..c0b80b75cdff 100644
--- a/net/sched/sch_htb.c
+++ b/net/sched/sch_htb.c
@@ -72,8 +72,6 @@
72#define HTB_EWMAC 2 /* rate average over HTB_EWMAC*HTB_HSIZE sec */ 72#define HTB_EWMAC 2 /* rate average over HTB_EWMAC*HTB_HSIZE sec */
73#define HTB_RATECM 1 /* whether to use rate computer */ 73#define HTB_RATECM 1 /* whether to use rate computer */
74#define HTB_HYSTERESIS 1/* whether to use mode hysteresis for speedup */ 74#define HTB_HYSTERESIS 1/* whether to use mode hysteresis for speedup */
75#define HTB_QLOCK(S) spin_lock_bh(&(S)->dev->queue_lock)
76#define HTB_QUNLOCK(S) spin_unlock_bh(&(S)->dev->queue_lock)
77#define HTB_VER 0x30011 /* major must be matched with number suplied by TC as version */ 75#define HTB_VER 0x30011 /* major must be matched with number suplied by TC as version */
78 76
79#if HTB_VER >> 16 != TC_HTB_PROTOVER 77#if HTB_VER >> 16 != TC_HTB_PROTOVER
@@ -667,7 +665,7 @@ static void htb_rate_timer(unsigned long arg)
667 struct list_head *p; 665 struct list_head *p;
668 666
669 /* lock queue so that we can muck with it */ 667 /* lock queue so that we can muck with it */
670 HTB_QLOCK(sch); 668 spin_lock_bh(&sch->dev->queue_lock);
671 669
672 q->rttim.expires = jiffies + HZ; 670 q->rttim.expires = jiffies + HZ;
673 add_timer(&q->rttim); 671 add_timer(&q->rttim);
@@ -681,7 +679,7 @@ static void htb_rate_timer(unsigned long arg)
681 RT_GEN (cl->sum_bytes,cl->rate_bytes); 679 RT_GEN (cl->sum_bytes,cl->rate_bytes);
682 RT_GEN (cl->sum_packets,cl->rate_packets); 680 RT_GEN (cl->sum_packets,cl->rate_packets);
683 } 681 }
684 HTB_QUNLOCK(sch); 682 spin_unlock_bh(&sch->dev->queue_lock);
685} 683}
686#endif 684#endif
687 685
@@ -1089,7 +1087,7 @@ static int htb_dump(struct Qdisc *sch, struct sk_buff *skb)
1089 unsigned char *b = skb->tail; 1087 unsigned char *b = skb->tail;
1090 struct rtattr *rta; 1088 struct rtattr *rta;
1091 struct tc_htb_glob gopt; 1089 struct tc_htb_glob gopt;
1092 HTB_QLOCK(sch); 1090 spin_lock_bh(&sch->dev->queue_lock);
1093 gopt.direct_pkts = q->direct_pkts; 1091 gopt.direct_pkts = q->direct_pkts;
1094 1092
1095 gopt.version = HTB_VER; 1093 gopt.version = HTB_VER;
@@ -1100,10 +1098,10 @@ static int htb_dump(struct Qdisc *sch, struct sk_buff *skb)
1100 RTA_PUT(skb, TCA_OPTIONS, 0, NULL); 1098 RTA_PUT(skb, TCA_OPTIONS, 0, NULL);
1101 RTA_PUT(skb, TCA_HTB_INIT, sizeof(gopt), &gopt); 1099 RTA_PUT(skb, TCA_HTB_INIT, sizeof(gopt), &gopt);
1102 rta->rta_len = skb->tail - b; 1100 rta->rta_len = skb->tail - b;
1103 HTB_QUNLOCK(sch); 1101 spin_unlock_bh(&sch->dev->queue_lock);
1104 return skb->len; 1102 return skb->len;
1105rtattr_failure: 1103rtattr_failure:
1106 HTB_QUNLOCK(sch); 1104 spin_unlock_bh(&sch->dev->queue_lock);
1107 skb_trim(skb, skb->tail - skb->data); 1105 skb_trim(skb, skb->tail - skb->data);
1108 return -1; 1106 return -1;
1109} 1107}
@@ -1116,7 +1114,7 @@ static int htb_dump_class(struct Qdisc *sch, unsigned long arg,
1116 struct rtattr *rta; 1114 struct rtattr *rta;
1117 struct tc_htb_opt opt; 1115 struct tc_htb_opt opt;
1118 1116
1119 HTB_QLOCK(sch); 1117 spin_lock_bh(&sch->dev->queue_lock);
1120 tcm->tcm_parent = cl->parent ? cl->parent->classid : TC_H_ROOT; 1118 tcm->tcm_parent = cl->parent ? cl->parent->classid : TC_H_ROOT;
1121 tcm->tcm_handle = cl->classid; 1119 tcm->tcm_handle = cl->classid;
1122 if (!cl->level && cl->un.leaf.q) 1120 if (!cl->level && cl->un.leaf.q)
@@ -1133,10 +1131,10 @@ static int htb_dump_class(struct Qdisc *sch, unsigned long arg,
1133 opt.level = cl->level; 1131 opt.level = cl->level;
1134 RTA_PUT(skb, TCA_HTB_PARMS, sizeof(opt), &opt); 1132 RTA_PUT(skb, TCA_HTB_PARMS, sizeof(opt), &opt);
1135 rta->rta_len = skb->tail - b; 1133 rta->rta_len = skb->tail - b;
1136 HTB_QUNLOCK(sch); 1134 spin_unlock_bh(&sch->dev->queue_lock);
1137 return skb->len; 1135 return skb->len;
1138rtattr_failure: 1136rtattr_failure:
1139 HTB_QUNLOCK(sch); 1137 spin_unlock_bh(&sch->dev->queue_lock);
1140 skb_trim(skb, b - skb->data); 1138 skb_trim(skb, b - skb->data);
1141 return -1; 1139 return -1;
1142} 1140}