X-Git-Url: http://git.pld-linux.org/?a=blobdiff_plain;f=kernel-esfq.patch;h=355a6444148e712c6ec3484bc91eb6e854d886fd;hb=7ed51edd772741a7eeac86b0b0fad99fa9681f80;hp=4f5457daa3fd720b977a01a0e37804f5e423daa6;hpb=2380c4865cc3612d22b7c8f21890de152daf79a1;p=packages%2Fkernel.git diff --git a/kernel-esfq.patch b/kernel-esfq.patch index 4f5457da..355a6444 100644 --- a/kernel-esfq.patch +++ b/kernel-esfq.patch @@ -1,6 +1,6 @@ -diff -Naur linux-2.6.24.orig/include/linux/pkt_sched.h linux-2.6.24/include/linux/pkt_sched.h ---- linux-2.6.24.orig/include/linux/pkt_sched.h 2008-01-24 14:58:37.000000000 -0800 -+++ linux-2.6.24/include/linux/pkt_sched.h 2008-01-28 00:27:12.000000000 -0800 +diff -Naur linux-2.6.24.orig/include/uapi/linux/pkt_sched.h linux-2.6.24/include/uapi/linux/pkt_sched.h +--- linux-2.6.24.orig/include/uapi/linux/pkt_sched.h 2008-01-24 14:58:37.000000000 -0800 ++++ linux-2.6.24/include/uapi/linux/pkt_sched.h 2008-01-28 00:27:12.000000000 -0800 @@ -157,6 +157,33 @@ * to change these parameters in compile time. */ @@ -90,7 +90,7 @@ diff -Naur linux-2.6.24.orig/net/sched/Makefile linux-2.6.24/net/sched/Makefile diff -Naur linux-2.6.24.orig/net/sched/sch_esfq.c linux-2.6.24/net/sched/sch_esfq.c --- linux-2.6.24.orig/net/sched/sch_esfq.c 1969-12-31 16:00:00.000000000 -0800 +++ linux-2.6.24/net/sched/sch_esfq.c 2008-01-28 00:27:22.000000000 -0800 -@@ -0,0 +1,703 @@ +@@ -0,0 +1,700 @@ +/* + * net/sched/sch_esfq.c Extended Stochastic Fairness Queueing discipline. + * @@ -118,7 +118,7 @@ diff -Naur linux-2.6.24.orig/net/sched/sch_esfq.c linux-2.6.24/net/sched/sch_esf + +#include +#include -+#include ++ +#include +#include +#include @@ -268,7 +268,7 @@ diff -Naur linux-2.6.24.orig/net/sched/sch_esfq.c linux-2.6.24/net/sched/sch_esf + break; + } + default: -+ info.dst = (u32)(unsigned long)skb->dst; ++ info.dst = (u32)(unsigned long)skb_dst(skb); + info.src = (u32)(unsigned long)skb->sk; + info.proto = skb->protocol; + } @@ -465,20 +465,17 @@ diff -Naur linux-2.6.24.orig/net/sched/sch_esfq.c linux-2.6.24/net/sched/sch_esf + return NET_XMIT_CN; +} + -+ -+static int esfq_requeue(struct sk_buff *skb, struct Qdisc* sch) ++static struct sk_buff *esfq_peek(struct Qdisc* sch) +{ + struct esfq_sched_data *q = qdisc_priv(sch); -+ esfq_q_enqueue(skb, q, ESFQ_HEAD); -+ sch->qstats.backlog += skb->len; -+ if (++sch->q.qlen < q->limit - 1) { -+ sch->qstats.requeues++; -+ return 0; -+ } ++ esfq_index a; + -+ sch->qstats.drops++; -+ esfq_drop(sch); -+ return NET_XMIT_CN; ++ /* No active slots */ ++ if (q->tail == q->depth) ++ return NULL; ++ ++ a = q->next[q->tail]; ++ return skb_peek(&q->qs[a]); +} + +static struct sk_buff *esfq_q_dequeue(struct esfq_sched_data *q) @@ -566,7 +563,7 @@ diff -Naur linux-2.6.24.orig/net/sched/sch_esfq.c linux-2.6.24/net/sched/sch_esf + struct Qdisc *sch = (struct Qdisc*)arg; + struct esfq_sched_data *q = qdisc_priv(sch); + -+ q->perturbation = net_random()&0x1F; ++ q->perturbation = prandom_u32() & 0x1F; + + if (q->perturb_period) { + q->perturb_timer.expires = jiffies + q->perturb_period; @@ -756,8 +753,8 @@ diff -Naur linux-2.6.24.orig/net/sched/sch_esfq.c linux-2.6.24/net/sched/sch_esf + opt.flows = q->depth; + opt.hash_kind = q->hash_kind; + -+ NLA_PUT(skb, TCA_OPTIONS, sizeof(opt), &opt); -+ ++ if (nla_put(skb, TCA_OPTIONS, sizeof(opt), &opt)) ++ goto nla_put_failure; + return skb->len; + +nla_put_failure: @@ -773,7 +770,7 @@ diff -Naur linux-2.6.24.orig/net/sched/sch_esfq.c linux-2.6.24/net/sched/sch_esf + .priv_size = sizeof(struct esfq_sched_data), + .enqueue = esfq_enqueue, + .dequeue = esfq_dequeue, -+ .requeue = esfq_requeue, ++ .peek = esfq_peek, + .drop = esfq_drop, + .init = esfq_init, + .reset = esfq_reset,