diff options
author | Glenn Elliott <gelliott@cs.unc.edu> | 2012-03-04 19:47:13 -0500 |
---|---|---|
committer | Glenn Elliott <gelliott@cs.unc.edu> | 2012-03-04 19:47:13 -0500 |
commit | c71c03bda1e86c9d5198c5d83f712e695c4f2a1e (patch) | |
tree | ecb166cb3e2b7e2adb3b5e292245fefd23381ac8 /net/sched/sch_tbf.c | |
parent | ea53c912f8a86a8567697115b6a0d8152beee5c8 (diff) | |
parent | 6a00f206debf8a5c8899055726ad127dbeeed098 (diff) |
Merge branch 'mpi-master' into wip-k-fmlpwip-k-fmlp
Conflicts:
litmus/sched_cedf.c
Diffstat (limited to 'net/sched/sch_tbf.c')
-rw-r--r-- | net/sched/sch_tbf.c | 42 |
1 files changed, 21 insertions, 21 deletions
diff --git a/net/sched/sch_tbf.c b/net/sched/sch_tbf.c index 641a30d64635..1dcfb5223a86 100644 --- a/net/sched/sch_tbf.c +++ b/net/sched/sch_tbf.c | |||
@@ -97,8 +97,7 @@ | |||
97 | changed the limit is not effective anymore. | 97 | changed the limit is not effective anymore. |
98 | */ | 98 | */ |
99 | 99 | ||
100 | struct tbf_sched_data | 100 | struct tbf_sched_data { |
101 | { | ||
102 | /* Parameters */ | 101 | /* Parameters */ |
103 | u32 limit; /* Maximal length of backlog: bytes */ | 102 | u32 limit; /* Maximal length of backlog: bytes */ |
104 | u32 buffer; /* Token bucket depth/rate: MUST BE >= MTU/B */ | 103 | u32 buffer; /* Token bucket depth/rate: MUST BE >= MTU/B */ |
@@ -115,10 +114,10 @@ struct tbf_sched_data | |||
115 | struct qdisc_watchdog watchdog; /* Watchdog timer */ | 114 | struct qdisc_watchdog watchdog; /* Watchdog timer */ |
116 | }; | 115 | }; |
117 | 116 | ||
118 | #define L2T(q,L) qdisc_l2t((q)->R_tab,L) | 117 | #define L2T(q, L) qdisc_l2t((q)->R_tab, L) |
119 | #define L2T_P(q,L) qdisc_l2t((q)->P_tab,L) | 118 | #define L2T_P(q, L) qdisc_l2t((q)->P_tab, L) |
120 | 119 | ||
121 | static int tbf_enqueue(struct sk_buff *skb, struct Qdisc* sch) | 120 | static int tbf_enqueue(struct sk_buff *skb, struct Qdisc *sch) |
122 | { | 121 | { |
123 | struct tbf_sched_data *q = qdisc_priv(sch); | 122 | struct tbf_sched_data *q = qdisc_priv(sch); |
124 | int ret; | 123 | int ret; |
@@ -134,12 +133,10 @@ static int tbf_enqueue(struct sk_buff *skb, struct Qdisc* sch) | |||
134 | } | 133 | } |
135 | 134 | ||
136 | sch->q.qlen++; | 135 | sch->q.qlen++; |
137 | sch->bstats.bytes += qdisc_pkt_len(skb); | ||
138 | sch->bstats.packets++; | ||
139 | return NET_XMIT_SUCCESS; | 136 | return NET_XMIT_SUCCESS; |
140 | } | 137 | } |
141 | 138 | ||
142 | static unsigned int tbf_drop(struct Qdisc* sch) | 139 | static unsigned int tbf_drop(struct Qdisc *sch) |
143 | { | 140 | { |
144 | struct tbf_sched_data *q = qdisc_priv(sch); | 141 | struct tbf_sched_data *q = qdisc_priv(sch); |
145 | unsigned int len = 0; | 142 | unsigned int len = 0; |
@@ -151,7 +148,7 @@ static unsigned int tbf_drop(struct Qdisc* sch) | |||
151 | return len; | 148 | return len; |
152 | } | 149 | } |
153 | 150 | ||
154 | static struct sk_buff *tbf_dequeue(struct Qdisc* sch) | 151 | static struct sk_buff *tbf_dequeue(struct Qdisc *sch) |
155 | { | 152 | { |
156 | struct tbf_sched_data *q = qdisc_priv(sch); | 153 | struct tbf_sched_data *q = qdisc_priv(sch); |
157 | struct sk_buff *skb; | 154 | struct sk_buff *skb; |
@@ -187,7 +184,8 @@ static struct sk_buff *tbf_dequeue(struct Qdisc* sch) | |||
187 | q->tokens = toks; | 184 | q->tokens = toks; |
188 | q->ptokens = ptoks; | 185 | q->ptokens = ptoks; |
189 | sch->q.qlen--; | 186 | sch->q.qlen--; |
190 | sch->flags &= ~TCQ_F_THROTTLED; | 187 | qdisc_unthrottled(sch); |
188 | qdisc_bstats_update(sch, skb); | ||
191 | return skb; | 189 | return skb; |
192 | } | 190 | } |
193 | 191 | ||
@@ -210,7 +208,7 @@ static struct sk_buff *tbf_dequeue(struct Qdisc* sch) | |||
210 | return NULL; | 208 | return NULL; |
211 | } | 209 | } |
212 | 210 | ||
213 | static void tbf_reset(struct Qdisc* sch) | 211 | static void tbf_reset(struct Qdisc *sch) |
214 | { | 212 | { |
215 | struct tbf_sched_data *q = qdisc_priv(sch); | 213 | struct tbf_sched_data *q = qdisc_priv(sch); |
216 | 214 | ||
@@ -228,7 +226,7 @@ static const struct nla_policy tbf_policy[TCA_TBF_MAX + 1] = { | |||
228 | [TCA_TBF_PTAB] = { .type = NLA_BINARY, .len = TC_RTAB_SIZE }, | 226 | [TCA_TBF_PTAB] = { .type = NLA_BINARY, .len = TC_RTAB_SIZE }, |
229 | }; | 227 | }; |
230 | 228 | ||
231 | static int tbf_change(struct Qdisc* sch, struct nlattr *opt) | 229 | static int tbf_change(struct Qdisc *sch, struct nlattr *opt) |
232 | { | 230 | { |
233 | int err; | 231 | int err; |
234 | struct tbf_sched_data *q = qdisc_priv(sch); | 232 | struct tbf_sched_data *q = qdisc_priv(sch); |
@@ -237,7 +235,7 @@ static int tbf_change(struct Qdisc* sch, struct nlattr *opt) | |||
237 | struct qdisc_rate_table *rtab = NULL; | 235 | struct qdisc_rate_table *rtab = NULL; |
238 | struct qdisc_rate_table *ptab = NULL; | 236 | struct qdisc_rate_table *ptab = NULL; |
239 | struct Qdisc *child = NULL; | 237 | struct Qdisc *child = NULL; |
240 | int max_size,n; | 238 | int max_size, n; |
241 | 239 | ||
242 | err = nla_parse_nested(tb, TCA_TBF_PTAB, opt, tbf_policy); | 240 | err = nla_parse_nested(tb, TCA_TBF_PTAB, opt, tbf_policy); |
243 | if (err < 0) | 241 | if (err < 0) |
@@ -260,15 +258,18 @@ static int tbf_change(struct Qdisc* sch, struct nlattr *opt) | |||
260 | } | 258 | } |
261 | 259 | ||
262 | for (n = 0; n < 256; n++) | 260 | for (n = 0; n < 256; n++) |
263 | if (rtab->data[n] > qopt->buffer) break; | 261 | if (rtab->data[n] > qopt->buffer) |
264 | max_size = (n << qopt->rate.cell_log)-1; | 262 | break; |
263 | max_size = (n << qopt->rate.cell_log) - 1; | ||
265 | if (ptab) { | 264 | if (ptab) { |
266 | int size; | 265 | int size; |
267 | 266 | ||
268 | for (n = 0; n < 256; n++) | 267 | for (n = 0; n < 256; n++) |
269 | if (ptab->data[n] > qopt->mtu) break; | 268 | if (ptab->data[n] > qopt->mtu) |
270 | size = (n << qopt->peakrate.cell_log)-1; | 269 | break; |
271 | if (size < max_size) max_size = size; | 270 | size = (n << qopt->peakrate.cell_log) - 1; |
271 | if (size < max_size) | ||
272 | max_size = size; | ||
272 | } | 273 | } |
273 | if (max_size < 0) | 274 | if (max_size < 0) |
274 | goto done; | 275 | goto done; |
@@ -311,7 +312,7 @@ done: | |||
311 | return err; | 312 | return err; |
312 | } | 313 | } |
313 | 314 | ||
314 | static int tbf_init(struct Qdisc* sch, struct nlattr *opt) | 315 | static int tbf_init(struct Qdisc *sch, struct nlattr *opt) |
315 | { | 316 | { |
316 | struct tbf_sched_data *q = qdisc_priv(sch); | 317 | struct tbf_sched_data *q = qdisc_priv(sch); |
317 | 318 | ||
@@ -423,8 +424,7 @@ static void tbf_walk(struct Qdisc *sch, struct qdisc_walker *walker) | |||
423 | } | 424 | } |
424 | } | 425 | } |
425 | 426 | ||
426 | static const struct Qdisc_class_ops tbf_class_ops = | 427 | static const struct Qdisc_class_ops tbf_class_ops = { |
427 | { | ||
428 | .graft = tbf_graft, | 428 | .graft = tbf_graft, |
429 | .leaf = tbf_leaf, | 429 | .leaf = tbf_leaf, |
430 | .get = tbf_get, | 430 | .get = tbf_get, |