]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - net/sched/sch_cake.c
Merge branch 'linus' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6
[linux.git] / net / sched / sch_cake.c
index 2277369feae58bfb9c70b449e7e096ae5f61dae1..1496e87cd07bb4ec9f43389ddb8f29562bdef93f 100644 (file)
@@ -173,8 +173,7 @@ struct cake_tin_data {
        u64     tin_rate_bps;
        u16     tin_rate_shft;
 
-       u16     tin_quantum_prio;
-       u16     tin_quantum_band;
+       u16     tin_quantum;
        s32     tin_deficit;
        u32     tin_backlog;
        u32     tin_dropped;
@@ -1683,8 +1682,7 @@ static s32 cake_enqueue(struct sk_buff *skb, struct Qdisc *sch,
                if (IS_ERR_OR_NULL(segs))
                        return qdisc_drop(skb, sch, to_free);
 
-               while (segs) {
-                       nskb = segs->next;
+               skb_list_walk_safe(segs, segs, nskb) {
                        skb_mark_not_on_list(segs);
                        qdisc_skb_cb(segs)->pkt_len = segs->len;
                        cobalt_set_enqueue_time(segs, now);
@@ -1697,7 +1695,6 @@ static s32 cake_enqueue(struct sk_buff *skb, struct Qdisc *sch,
                        slen += segs->len;
                        q->buffer_used += segs->truesize;
                        b->packets++;
-                       segs = nskb;
                }
 
                /* stats */
@@ -1919,7 +1916,7 @@ static struct sk_buff *cake_dequeue(struct Qdisc *sch)
                while (b->tin_deficit < 0 ||
                       !(b->sparse_flow_count + b->bulk_flow_count)) {
                        if (b->tin_deficit <= 0)
-                               b->tin_deficit += b->tin_quantum_band;
+                               b->tin_deficit += b->tin_quantum;
                        if (b->sparse_flow_count + b->bulk_flow_count)
                                empty = false;
 
@@ -2241,8 +2238,7 @@ static int cake_config_besteffort(struct Qdisc *sch)
 
        cake_set_rate(b, rate, mtu,
                      us_to_ns(q->target), us_to_ns(q->interval));
-       b->tin_quantum_band = 65535;
-       b->tin_quantum_prio = 65535;
+       b->tin_quantum = 65535;
 
        return 0;
 }
@@ -2253,8 +2249,7 @@ static int cake_config_precedence(struct Qdisc *sch)
        struct cake_sched_data *q = qdisc_priv(sch);
        u32 mtu = psched_mtu(qdisc_dev(sch));
        u64 rate = q->rate_bps;
-       u32 quantum1 = 256;
-       u32 quantum2 = 256;
+       u32 quantum = 256;
        u32 i;
 
        q->tin_cnt = 8;
@@ -2267,18 +2262,14 @@ static int cake_config_precedence(struct Qdisc *sch)
                cake_set_rate(b, rate, mtu, us_to_ns(q->target),
                              us_to_ns(q->interval));
 
-               b->tin_quantum_prio = max_t(u16, 1U, quantum1);
-               b->tin_quantum_band = max_t(u16, 1U, quantum2);
+               b->tin_quantum = max_t(u16, 1U, quantum);
 
                /* calculate next class's parameters */
                rate  *= 7;
                rate >>= 3;
 
-               quantum1  *= 3;
-               quantum1 >>= 1;
-
-               quantum2  *= 7;
-               quantum2 >>= 3;
+               quantum  *= 7;
+               quantum >>= 3;
        }
 
        return 0;
@@ -2347,8 +2338,7 @@ static int cake_config_diffserv8(struct Qdisc *sch)
        struct cake_sched_data *q = qdisc_priv(sch);
        u32 mtu = psched_mtu(qdisc_dev(sch));
        u64 rate = q->rate_bps;
-       u32 quantum1 = 256;
-       u32 quantum2 = 256;
+       u32 quantum = 256;
        u32 i;
 
        q->tin_cnt = 8;
@@ -2364,18 +2354,14 @@ static int cake_config_diffserv8(struct Qdisc *sch)
                cake_set_rate(b, rate, mtu, us_to_ns(q->target),
                              us_to_ns(q->interval));
 
-               b->tin_quantum_prio = max_t(u16, 1U, quantum1);
-               b->tin_quantum_band = max_t(u16, 1U, quantum2);
+               b->tin_quantum = max_t(u16, 1U, quantum);
 
                /* calculate next class's parameters */
                rate  *= 7;
                rate >>= 3;
 
-               quantum1  *= 3;
-               quantum1 >>= 1;
-
-               quantum2  *= 7;
-               quantum2 >>= 3;
+               quantum  *= 7;
+               quantum >>= 3;
        }
 
        return 0;
@@ -2414,17 +2400,11 @@ static int cake_config_diffserv4(struct Qdisc *sch)
        cake_set_rate(&q->tins[3], rate >> 2, mtu,
                      us_to_ns(q->target), us_to_ns(q->interval));
 
-       /* priority weights */
-       q->tins[0].tin_quantum_prio = quantum;
-       q->tins[1].tin_quantum_prio = quantum >> 4;
-       q->tins[2].tin_quantum_prio = quantum << 2;
-       q->tins[3].tin_quantum_prio = quantum << 4;
-
        /* bandwidth-sharing weights */
-       q->tins[0].tin_quantum_band = quantum;
-       q->tins[1].tin_quantum_band = quantum >> 4;
-       q->tins[2].tin_quantum_band = quantum >> 1;
-       q->tins[3].tin_quantum_band = quantum >> 2;
+       q->tins[0].tin_quantum = quantum;
+       q->tins[1].tin_quantum = quantum >> 4;
+       q->tins[2].tin_quantum = quantum >> 1;
+       q->tins[3].tin_quantum = quantum >> 2;
 
        return 0;
 }
@@ -2455,15 +2435,10 @@ static int cake_config_diffserv3(struct Qdisc *sch)
        cake_set_rate(&q->tins[2], rate >> 2, mtu,
                      us_to_ns(q->target), us_to_ns(q->interval));
 
-       /* priority weights */
-       q->tins[0].tin_quantum_prio = quantum;
-       q->tins[1].tin_quantum_prio = quantum >> 4;
-       q->tins[2].tin_quantum_prio = quantum << 4;
-
        /* bandwidth-sharing weights */
-       q->tins[0].tin_quantum_band = quantum;
-       q->tins[1].tin_quantum_band = quantum >> 4;
-       q->tins[2].tin_quantum_band = quantum >> 2;
+       q->tins[0].tin_quantum = quantum;
+       q->tins[1].tin_quantum = quantum >> 4;
+       q->tins[2].tin_quantum = quantum >> 2;
 
        return 0;
 }