@@ -80,7 +80,6 @@ struct cbq_class {
80
80
unsigned char priority ; /* class priority */
81
81
unsigned char priority2 ; /* priority to be used after overlimit */
82
82
unsigned char ewma_log ; /* time constant for idle time calculation */
83
- unsigned char ovl_strategy ;
84
83
#ifdef CONFIG_NET_CLS_ACT
85
84
unsigned char police ;
86
85
#endif
@@ -94,10 +93,6 @@ struct cbq_class {
94
93
u32 avpkt ;
95
94
struct qdisc_rate_table * R_tab ;
96
95
97
- /* Overlimit strategy parameters */
98
- void (* overlimit )(struct cbq_class * cl );
99
- psched_tdiff_t penalty ;
100
-
101
96
/* General scheduler (WRR) parameters */
102
97
long allot ;
103
98
long quantum ; /* Allotment per WRR round */
@@ -402,11 +397,8 @@ cbq_enqueue(struct sk_buff *skb, struct Qdisc *sch)
402
397
return ret ;
403
398
}
404
399
405
- /* Overlimit actions */
406
-
407
- /* TC_CBQ_OVL_CLASSIC: (default) penalize leaf class by adding offtime */
408
-
409
- static void cbq_ovl_classic (struct cbq_class * cl )
400
+ /* Overlimit action: penalize leaf class by adding offtime */
401
+ static void cbq_overlimit (struct cbq_class * cl )
410
402
{
411
403
struct cbq_sched_data * q = qdisc_priv (cl -> qdisc );
412
404
psched_tdiff_t delay = cl -> undertime - q -> now ;
@@ -456,99 +448,6 @@ static void cbq_ovl_classic(struct cbq_class *cl)
456
448
}
457
449
}
458
450
459
- /* TC_CBQ_OVL_RCLASSIC: penalize by offtime classes in hierarchy, when
460
- * they go overlimit
461
- */
462
-
463
- static void cbq_ovl_rclassic (struct cbq_class * cl )
464
- {
465
- struct cbq_sched_data * q = qdisc_priv (cl -> qdisc );
466
- struct cbq_class * this = cl ;
467
-
468
- do {
469
- if (cl -> level > q -> toplevel ) {
470
- cl = NULL ;
471
- break ;
472
- }
473
- } while ((cl = cl -> borrow ) != NULL );
474
-
475
- if (cl == NULL )
476
- cl = this ;
477
- cbq_ovl_classic (cl );
478
- }
479
-
480
- /* TC_CBQ_OVL_DELAY: delay until it will go to underlimit */
481
-
482
- static void cbq_ovl_delay (struct cbq_class * cl )
483
- {
484
- struct cbq_sched_data * q = qdisc_priv (cl -> qdisc );
485
- psched_tdiff_t delay = cl -> undertime - q -> now ;
486
-
487
- if (test_bit (__QDISC_STATE_DEACTIVATED ,
488
- & qdisc_root_sleeping (cl -> qdisc )-> state ))
489
- return ;
490
-
491
- if (!cl -> delayed ) {
492
- psched_time_t sched = q -> now ;
493
- ktime_t expires ;
494
-
495
- delay += cl -> offtime ;
496
- if (cl -> avgidle < 0 )
497
- delay -= (- cl -> avgidle ) - ((- cl -> avgidle ) >> cl -> ewma_log );
498
- if (cl -> avgidle < cl -> minidle )
499
- cl -> avgidle = cl -> minidle ;
500
- cl -> undertime = q -> now + delay ;
501
-
502
- if (delay > 0 ) {
503
- sched += delay + cl -> penalty ;
504
- cl -> penalized = sched ;
505
- cl -> cpriority = TC_CBQ_MAXPRIO ;
506
- q -> pmask |= (1 <<TC_CBQ_MAXPRIO );
507
-
508
- expires = ns_to_ktime (PSCHED_TICKS2NS (sched ));
509
- if (hrtimer_try_to_cancel (& q -> delay_timer ) &&
510
- ktime_to_ns (ktime_sub (
511
- hrtimer_get_expires (& q -> delay_timer ),
512
- expires )) > 0 )
513
- hrtimer_set_expires (& q -> delay_timer , expires );
514
- hrtimer_restart (& q -> delay_timer );
515
- cl -> delayed = 1 ;
516
- cl -> xstats .overactions ++ ;
517
- return ;
518
- }
519
- delay = 1 ;
520
- }
521
- if (q -> wd_expires == 0 || q -> wd_expires > delay )
522
- q -> wd_expires = delay ;
523
- }
524
-
525
- /* TC_CBQ_OVL_LOWPRIO: penalize class by lowering its priority band */
526
-
527
- static void cbq_ovl_lowprio (struct cbq_class * cl )
528
- {
529
- struct cbq_sched_data * q = qdisc_priv (cl -> qdisc );
530
-
531
- cl -> penalized = q -> now + cl -> penalty ;
532
-
533
- if (cl -> cpriority != cl -> priority2 ) {
534
- cl -> cpriority = cl -> priority2 ;
535
- q -> pmask |= (1 <<cl -> cpriority );
536
- cl -> xstats .overactions ++ ;
537
- }
538
- cbq_ovl_classic (cl );
539
- }
540
-
541
- /* TC_CBQ_OVL_DROP: penalize class by dropping */
542
-
543
- static void cbq_ovl_drop (struct cbq_class * cl )
544
- {
545
- if (cl -> q -> ops -> drop )
546
- if (cl -> q -> ops -> drop (cl -> q ))
547
- cl -> qdisc -> q .qlen -- ;
548
- cl -> xstats .overactions ++ ;
549
- cbq_ovl_classic (cl );
550
- }
551
-
552
451
static psched_tdiff_t cbq_undelay_prio (struct cbq_sched_data * q , int prio ,
553
452
psched_time_t now )
554
453
{
@@ -807,7 +706,7 @@ cbq_under_limit(struct cbq_class *cl)
807
706
cl = cl -> borrow ;
808
707
if (!cl ) {
809
708
this_cl -> qstats .overlimits ++ ;
810
- this_cl -> overlimit (this_cl );
709
+ cbq_overlimit (this_cl );
811
710
return NULL ;
812
711
}
813
712
if (cl -> level > q -> toplevel )
@@ -1280,35 +1179,6 @@ static int cbq_set_wrr(struct cbq_class *cl, struct tc_cbq_wrropt *wrr)
1280
1179
return 0 ;
1281
1180
}
1282
1181
1283
- static int cbq_set_overlimit (struct cbq_class * cl , struct tc_cbq_ovl * ovl )
1284
- {
1285
- switch (ovl -> strategy ) {
1286
- case TC_CBQ_OVL_CLASSIC :
1287
- cl -> overlimit = cbq_ovl_classic ;
1288
- break ;
1289
- case TC_CBQ_OVL_DELAY :
1290
- cl -> overlimit = cbq_ovl_delay ;
1291
- break ;
1292
- case TC_CBQ_OVL_LOWPRIO :
1293
- if (ovl -> priority2 - 1 >= TC_CBQ_MAXPRIO ||
1294
- ovl -> priority2 - 1 <= cl -> priority )
1295
- return - EINVAL ;
1296
- cl -> priority2 = ovl -> priority2 - 1 ;
1297
- cl -> overlimit = cbq_ovl_lowprio ;
1298
- break ;
1299
- case TC_CBQ_OVL_DROP :
1300
- cl -> overlimit = cbq_ovl_drop ;
1301
- break ;
1302
- case TC_CBQ_OVL_RCLASSIC :
1303
- cl -> overlimit = cbq_ovl_rclassic ;
1304
- break ;
1305
- default :
1306
- return - EINVAL ;
1307
- }
1308
- cl -> penalty = ovl -> penalty ;
1309
- return 0 ;
1310
- }
1311
-
1312
1182
#ifdef CONFIG_NET_CLS_ACT
1313
1183
static int cbq_set_police (struct cbq_class * cl , struct tc_cbq_police * p )
1314
1184
{
@@ -1375,8 +1245,6 @@ static int cbq_init(struct Qdisc *sch, struct nlattr *opt)
1375
1245
q -> link .priority = TC_CBQ_MAXPRIO - 1 ;
1376
1246
q -> link .priority2 = TC_CBQ_MAXPRIO - 1 ;
1377
1247
q -> link .cpriority = TC_CBQ_MAXPRIO - 1 ;
1378
- q -> link .ovl_strategy = TC_CBQ_OVL_CLASSIC ;
1379
- q -> link .overlimit = cbq_ovl_classic ;
1380
1248
q -> link .allot = psched_mtu (qdisc_dev (sch ));
1381
1249
q -> link .quantum = q -> link .allot ;
1382
1250
q -> link .weight = q -> link .R_tab -> rate .rate ;
@@ -1463,24 +1331,6 @@ static int cbq_dump_wrr(struct sk_buff *skb, struct cbq_class *cl)
1463
1331
return -1 ;
1464
1332
}
1465
1333
1466
- static int cbq_dump_ovl (struct sk_buff * skb , struct cbq_class * cl )
1467
- {
1468
- unsigned char * b = skb_tail_pointer (skb );
1469
- struct tc_cbq_ovl opt ;
1470
-
1471
- opt .strategy = cl -> ovl_strategy ;
1472
- opt .priority2 = cl -> priority2 + 1 ;
1473
- opt .pad = 0 ;
1474
- opt .penalty = cl -> penalty ;
1475
- if (nla_put (skb , TCA_CBQ_OVL_STRATEGY , sizeof (opt ), & opt ))
1476
- goto nla_put_failure ;
1477
- return skb -> len ;
1478
-
1479
- nla_put_failure :
1480
- nlmsg_trim (skb , b );
1481
- return -1 ;
1482
- }
1483
-
1484
1334
static int cbq_dump_fopt (struct sk_buff * skb , struct cbq_class * cl )
1485
1335
{
1486
1336
unsigned char * b = skb_tail_pointer (skb );
@@ -1526,7 +1376,6 @@ static int cbq_dump_attr(struct sk_buff *skb, struct cbq_class *cl)
1526
1376
if (cbq_dump_lss (skb , cl ) < 0 ||
1527
1377
cbq_dump_rate (skb , cl ) < 0 ||
1528
1378
cbq_dump_wrr (skb , cl ) < 0 ||
1529
- cbq_dump_ovl (skb , cl ) < 0 ||
1530
1379
#ifdef CONFIG_NET_CLS_ACT
1531
1380
cbq_dump_police (skb , cl ) < 0 ||
1532
1381
#endif
@@ -1736,6 +1585,9 @@ cbq_change_class(struct Qdisc *sch, u32 classid, u32 parentid, struct nlattr **t
1736
1585
if (err < 0 )
1737
1586
return err ;
1738
1587
1588
+ if (tb [TCA_CBQ_OVL_STRATEGY ])
1589
+ return - EOPNOTSUPP ;
1590
+
1739
1591
if (cl ) {
1740
1592
/* Check parent */
1741
1593
if (parentid ) {
@@ -1784,9 +1636,6 @@ cbq_change_class(struct Qdisc *sch, u32 classid, u32 parentid, struct nlattr **t
1784
1636
cbq_set_wrr (cl , nla_data (tb [TCA_CBQ_WRROPT ]));
1785
1637
}
1786
1638
1787
- if (tb [TCA_CBQ_OVL_STRATEGY ])
1788
- cbq_set_overlimit (cl , nla_data (tb [TCA_CBQ_OVL_STRATEGY ]));
1789
-
1790
1639
#ifdef CONFIG_NET_CLS_ACT
1791
1640
if (tb [TCA_CBQ_POLICE ])
1792
1641
cbq_set_police (cl , nla_data (tb [TCA_CBQ_POLICE ]));
@@ -1887,9 +1736,6 @@ cbq_change_class(struct Qdisc *sch, u32 classid, u32 parentid, struct nlattr **t
1887
1736
cl -> maxidle = q -> link .maxidle ;
1888
1737
if (cl -> avpkt == 0 )
1889
1738
cl -> avpkt = q -> link .avpkt ;
1890
- cl -> overlimit = cbq_ovl_classic ;
1891
- if (tb [TCA_CBQ_OVL_STRATEGY ])
1892
- cbq_set_overlimit (cl , nla_data (tb [TCA_CBQ_OVL_STRATEGY ]));
1893
1739
#ifdef CONFIG_NET_CLS_ACT
1894
1740
if (tb [TCA_CBQ_POLICE ])
1895
1741
cbq_set_police (cl , nla_data (tb [TCA_CBQ_POLICE ]));
0 commit comments