diff --git a/net/sched/sch_cake.c b/net/sched/sch_cake.c index 539c949..488cfc6 100644 --- a/net/sched/sch_cake.c +++ b/net/sched/sch_cake.c @@ -80,7 +80,6 @@ #define CAKE_QUEUES (1024) #define CAKE_FLOW_MASK 63 #define CAKE_FLOW_NAT_FLAG 64 -#define CAKE_SPLIT_GSO_THRESHOLD (125000000) /* 1Gbps */ /* struct cobalt_params - contains codel and blue parameters * @interval: codel initial drop rate @@ -164,6 +163,7 @@ struct cake_tin_data { u16 unresponsive_flow_count; u32 max_skblen; + u32 split_gso; struct list_head new_flows; struct list_head old_flows; @@ -260,7 +260,6 @@ enum { CAKE_FLAG_AUTORATE_INGRESS = BIT(1), CAKE_FLAG_INGRESS = BIT(2), CAKE_FLAG_WASH = BIT(3), - CAKE_FLAG_SPLIT_GSO = BIT(4) }; /* COBALT operates the Codel and BLUE algorithms in parallel, in order to @@ -1651,7 +1650,7 @@ static s32 cake_enqueue(struct sk_buff *skb, struct Qdisc *sch, if (unlikely(len > b->max_skblen)) b->max_skblen = len; - if (skb_is_gso(skb) && q->rate_flags & CAKE_FLAG_SPLIT_GSO) { + if (skb_is_gso(skb) && q->split_gso < len ) { struct sk_buff *segs, *nskb; netdev_features_t features = netif_skb_features(skb); unsigned int slen = 0; @@ -2569,10 +2568,8 @@ static int cake_change(struct Qdisc *sch, struct nlattr *opt, if (tb[TCA_CAKE_MEMORY]) q->buffer_config_limit = nla_get_u32(tb[TCA_CAKE_MEMORY]); - if (q->rate_bps && q->rate_bps <= CAKE_SPLIT_GSO_THRESHOLD) - q->rate_flags |= CAKE_FLAG_SPLIT_GSO; - else - q->rate_flags &= ~CAKE_FLAG_SPLIT_GSO; + if (tb[TCA_CAKE_SPLIT_GSO]) + q->split_gso = nla_get_u32(tb[TCA_CAKE_SPLIT_GSO]); if (q->tins) { sch_tree_lock(sch); @@ -2611,7 +2608,7 @@ static int cake_init(struct Qdisc *sch, struct nlattr *opt, q->cur_tin = 0; q->cur_flow = 0; - + q->split_gso = ~0; /* always split gso packets */ qdisc_watchdog_init(&q->watchdog, sch); if (opt) { @@ -2729,8 +2726,7 @@ static int cake_dump(struct Qdisc *sch, struct sk_buff *skb) if (nla_put_u32(skb, TCA_CAKE_MPU, q->rate_mpu)) goto nla_put_failure; - if (nla_put_u32(skb, TCA_CAKE_SPLIT_GSO, - !!(q->rate_flags & CAKE_FLAG_SPLIT_GSO))) + if (nla_put_u32(skb, TCA_CAKE_SPLIT_GSO, q->split_gso)) goto nla_put_failure; return nla_nest_end(skb, opts);