forked from ~ljy/RK356X_SDK_RELEASE

hc
2023-12-08 01573e231f18eb2d99162747186f59511f56b64d
kernel/net/sched/sch_hfsc.c
....@@ -845,16 +845,6 @@
845845 }
846846
847847 static void
848
-hfsc_purge_queue(struct Qdisc *sch, struct hfsc_class *cl)
849
-{
850
- unsigned int len = cl->qdisc->q.qlen;
851
- unsigned int backlog = cl->qdisc->qstats.backlog;
852
-
853
- qdisc_reset(cl->qdisc);
854
- qdisc_tree_reduce_backlog(cl->qdisc, len, backlog);
855
-}
856
-
857
-static void
858848 hfsc_adjust_levels(struct hfsc_class *cl)
859849 {
860850 struct hfsc_class *p;
....@@ -936,7 +926,8 @@
936926 if (opt == NULL)
937927 return -EINVAL;
938928
939
- err = nla_parse_nested(tb, TCA_HFSC_MAX, opt, hfsc_policy, NULL);
929
+ err = nla_parse_nested_deprecated(tb, TCA_HFSC_MAX, opt, hfsc_policy,
930
+ NULL);
940931 if (err < 0)
941932 return err;
942933
....@@ -1076,7 +1067,7 @@
10761067 qdisc_class_hash_insert(&q->clhash, &cl->cl_common);
10771068 list_add_tail(&cl->siblings, &parent->children);
10781069 if (parent->level == 0)
1079
- hfsc_purge_queue(sch, parent);
1070
+ qdisc_purge_queue(parent->qdisc);
10801071 hfsc_adjust_levels(parent);
10811072 sch_tree_unlock(sch);
10821073
....@@ -1112,7 +1103,7 @@
11121103 list_del(&cl->siblings);
11131104 hfsc_adjust_levels(cl->cl_parent);
11141105
1115
- hfsc_purge_queue(sch, cl);
1106
+ qdisc_purge_queue(cl->qdisc);
11161107 qdisc_class_hash_remove(&q->clhash, &cl->cl_common);
11171108
11181109 sch_tree_unlock(sch);
....@@ -1145,7 +1136,7 @@
11451136 case TC_ACT_STOLEN:
11461137 case TC_ACT_TRAP:
11471138 *qerr = NET_XMIT_SUCCESS | __NET_XMIT_STOLEN;
1148
- /* fall through */
1139
+ fallthrough;
11491140 case TC_ACT_SHOT:
11501141 return NULL;
11511142 }
....@@ -1310,7 +1301,7 @@
13101301 if (cl->level == 0)
13111302 tcm->tcm_info = cl->qdisc->handle;
13121303
1313
- nest = nla_nest_start(skb, TCA_OPTIONS);
1304
+ nest = nla_nest_start_noflag(skb, TCA_OPTIONS);
13141305 if (nest == NULL)
13151306 goto nla_put_failure;
13161307 if (hfsc_dump_curves(skb, cl) < 0)
....@@ -1328,8 +1319,9 @@
13281319 {
13291320 struct hfsc_class *cl = (struct hfsc_class *)arg;
13301321 struct tc_hfsc_stats xstats;
1322
+ __u32 qlen;
13311323
1332
- cl->qstats.backlog = cl->qdisc->qstats.backlog;
1324
+ qdisc_qstats_qlen_backlog(cl->qdisc, &qlen, &cl->qstats.backlog);
13331325 xstats.level = cl->level;
13341326 xstats.period = cl->cl_vtperiod;
13351327 xstats.work = cl->cl_total;
....@@ -1337,7 +1329,7 @@
13371329
13381330 if (gnet_stats_copy_basic(qdisc_root_sleeping_running(sch), d, NULL, &cl->bstats) < 0 ||
13391331 gnet_stats_copy_rate_est(d, &cl->rate_est) < 0 ||
1340
- gnet_stats_copy_queue(d, NULL, &cl->qstats, cl->qdisc->q.qlen) < 0)
1332
+ gnet_stats_copy_queue(d, NULL, &cl->qstats, qlen) < 0)
13411333 return -1;
13421334
13431335 return gnet_stats_copy_app(d, &xstats, sizeof(xstats));
....@@ -1492,8 +1484,6 @@
14921484 }
14931485 q->eligible = RB_ROOT;
14941486 qdisc_watchdog_cancel(&q->watchdog);
1495
- sch->qstats.backlog = 0;
1496
- sch->q.qlen = 0;
14971487 }
14981488
14991489 static void
....@@ -1539,8 +1529,10 @@
15391529 static int
15401530 hfsc_enqueue(struct sk_buff *skb, struct Qdisc *sch, struct sk_buff **to_free)
15411531 {
1532
+ unsigned int len = qdisc_pkt_len(skb);
15421533 struct hfsc_class *cl;
1543
- int uninitialized_var(err);
1534
+ int err;
1535
+ bool first;
15441536
15451537 cl = hfsc_classify(skb, sch, &err);
15461538 if (cl == NULL) {
....@@ -1550,6 +1542,7 @@
15501542 return err;
15511543 }
15521544
1545
+ first = !cl->qdisc->q.qlen;
15531546 err = qdisc_enqueue(skb, cl->qdisc, to_free);
15541547 if (unlikely(err != NET_XMIT_SUCCESS)) {
15551548 if (net_xmit_drop_count(err)) {
....@@ -1559,9 +1552,7 @@
15591552 return err;
15601553 }
15611554
1562
- if (cl->qdisc->q.qlen == 1) {
1563
- unsigned int len = qdisc_pkt_len(skb);
1564
-
1555
+ if (first) {
15651556 if (cl->cl_flags & HFSC_RSC)
15661557 init_ed(cl, len);
15671558 if (cl->cl_flags & HFSC_FSC)
....@@ -1576,7 +1567,7 @@
15761567
15771568 }
15781569
1579
- qdisc_qstats_backlog_inc(sch, skb);
1570
+ sch->qstats.backlog += len;
15801571 sch->q.qlen++;
15811572
15821573 return NET_XMIT_SUCCESS;