net: sched: make bstats per cpu and estimator RCU safe
[firefly-linux-kernel-4.4.55.git] / net / sched / sch_hfsc.c
index 04b0de4c68b55c448655885a447993ee5de4ebc6..209b966b2eed79eaf1ba7c8fa63f06251cc67a76 100644 (file)
@@ -1014,9 +1014,12 @@ hfsc_change_class(struct Qdisc *sch, u32 classid, u32 parentid,
                cur_time = psched_get_time();
 
                if (tca[TCA_RATE]) {
-                       err = gen_replace_estimator(&cl->bstats, &cl->rate_est,
-                                             qdisc_root_sleeping_lock(sch),
-                                             tca[TCA_RATE]);
+                       spinlock_t *lock = qdisc_root_sleeping_lock(sch);
+
+                       err = gen_replace_estimator(&cl->bstats, NULL,
+                                                   &cl->rate_est,
+                                                   lock,
+                                                   tca[TCA_RATE]);
                        if (err)
                                return err;
                }
@@ -1063,7 +1066,7 @@ hfsc_change_class(struct Qdisc *sch, u32 classid, u32 parentid,
                return -ENOBUFS;
 
        if (tca[TCA_RATE]) {
-               err = gen_new_estimator(&cl->bstats, &cl->rate_est,
+               err = gen_new_estimator(&cl->bstats, NULL, &cl->rate_est,
                                        qdisc_root_sleeping_lock(sch),
                                        tca[TCA_RATE]);
                if (err) {
@@ -1374,7 +1377,7 @@ hfsc_dump_class_stats(struct Qdisc *sch, unsigned long arg,
        xstats.work    = cl->cl_total;
        xstats.rtwork  = cl->cl_cumul;
 
-       if (gnet_stats_copy_basic(d, &cl->bstats) < 0 ||
+       if (gnet_stats_copy_basic(d, NULL, &cl->bstats) < 0 ||
            gnet_stats_copy_rate_est(d, &cl->bstats, &cl->rate_est) < 0 ||
            gnet_stats_copy_queue(d, &cl->qstats) < 0)
                return -1;