Setting tag linux-2.6-27-38
[linux-2.6.git] / linux-2.6-680-htb-hysteresis-tso.patch
index c8c99de..46e0043 100644 (file)
@@ -1,76 +1,13 @@
-diff -Nurp linux-2.6.22-660/net/sched/sch_htb.c linux-2.6.22-670/net/sched/sch_htb.c
---- linux-2.6.22-660/net/sched/sch_htb.c       2007-07-09 01:32:17.000000000 +0200
-+++ linux-2.6.22-670/net/sched/sch_htb.c       2008-11-12 17:35:17.000000000 +0100
-@@ -71,7 +71,7 @@
- #define HTB_HSIZE 16          /* classid hash size */
- #define HTB_EWMAC 2           /* rate average over HTB_EWMAC*HTB_HSIZE sec */
- #define HTB_RATECM 1          /* whether to use rate computer */
--#define HTB_HYSTERESIS 1      /* whether to use mode hysteresis for speedup */
-+#define HTB_HYSTERESIS 0      /* whether to use mode hysteresis for speedup */
+diff --git a/net/sched/sch_htb.c b/net/sched/sch_htb.c
+index d2943a4..eff6918 100644
+--- a/net/sched/sch_htb.c
++++ b/net/sched/sch_htb.c
+@@ -51,7 +51,7 @@
+     one less than their parent.
+ */
+-static int htb_hysteresis __read_mostly = 0; /* whether to use mode hysteresis for speedup */
++static int htb_hysteresis __read_mostly = 1; /* whether to use mode hysteresis for speedup */
  #define HTB_VER 0x30011               /* major must be matched with number suplied by TC as version */
  
  #if HTB_VER >> 16 != TC_HTB_PROTOVER
-@@ -153,15 +153,12 @@ struct htb_class {
-                               /* of un.leaf originals should be done. */
- };
--/* TODO: maybe compute rate when size is too large .. or drop ? */
- static inline long L2T(struct htb_class *cl, struct qdisc_rate_table *rate,
-                          int size)
- {
-       int slot = size >> rate->rate.cell_log;
--      if (slot > 255) {
--              cl->xstats.giants++;
--              slot = 255;
--      }
-+      if (slot > 255)
-+              return (rate->data[255]*(slot >> 8) + rate->data[slot & 0xFF]);
-       return rate->data[slot];
- }
-@@ -634,13 +631,13 @@ static int htb_enqueue(struct sk_buff *s
-               cl->qstats.drops++;
-               return NET_XMIT_DROP;
-       } else {
--              cl->bstats.packets++;
-+              cl->bstats.packets += skb_is_gso(skb) ? skb_shinfo(skb)->gso_segs : 1;
-               cl->bstats.bytes += skb->len;
-               htb_activate(q, cl);
-       }
-       sch->q.qlen++;
--      sch->bstats.packets++;
-+      sch->bstats.packets += skb_is_gso(skb) ? skb_shinfo(skb)->gso_segs : 1;
-       sch->bstats.bytes += skb->len;
-       return NET_XMIT_SUCCESS;
- }
-@@ -717,8 +714,9 @@ static void htb_rate_timer(unsigned long
-  * In such case we remove class from event queue first.
-  */
- static void htb_charge_class(struct htb_sched *q, struct htb_class *cl,
--                           int level, int bytes)
-+                           int level, struct sk_buff *skb)
- {
-+      int bytes = skb->len;
-       long toks, diff;
-       enum htb_cmode old_mode;
-@@ -759,7 +757,8 @@ static void htb_charge_class(struct htb_
-               /* update byte stats except for leaves which are already updated */
-               if (cl->level) {
-                       cl->bstats.bytes += bytes;
--                      cl->bstats.packets++;
-+                      cl->bstats.packets +=
-+                              skb_is_gso(skb) ? skb_shinfo(skb)->gso_segs : 1;
-               }
-               cl = cl->parent;
-       }
-@@ -943,7 +942,7 @@ next:
-                  gives us slightly better performance */
-               if (!cl->un.leaf.q->q.qlen)
-                       htb_deactivate(q, cl);
--              htb_charge_class(q, cl, level, skb->len);
-+              htb_charge_class(q, cl, level, skb);
-       }
-       return skb;
- }