]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
Fixes for 4.19
authorSasha Levin <sashal@kernel.org>
Wed, 3 Jun 2020 14:29:20 +0000 (10:29 -0400)
committerSasha Levin <sashal@kernel.org>
Wed, 3 Jun 2020 14:29:20 +0000 (10:29 -0400)
Signed-off-by: Sasha Levin <sashal@kernel.org>
queue-4.19/revert-cgroup-add-memory-barriers-to-plug-cgroup_rst.patch [new file with mode: 0644]
queue-4.19/series [new file with mode: 0644]

diff --git a/queue-4.19/revert-cgroup-add-memory-barriers-to-plug-cgroup_rst.patch b/queue-4.19/revert-cgroup-add-memory-barriers-to-plug-cgroup_rst.patch
new file mode 100644 (file)
index 0000000..5bf197f
--- /dev/null
@@ -0,0 +1,74 @@
+From a83d041edd45e9bca721059a4d56595c17c71f8a Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 9 Apr 2020 14:55:35 -0400
+Subject: Revert "cgroup: Add memory barriers to plug cgroup_rstat_updated()
+ race window"
+
+From: Tejun Heo <tj@kernel.org>
+
+[ Upstream commit d8ef4b38cb69d907f9b0e889c44d05fc0f890977 ]
+
+This reverts commit 9a9e97b2f1f2 ("cgroup: Add memory barriers to plug
+cgroup_rstat_updated() race window").
+
+The commit was added in anticipation of memcg rstat conversion which needed
+synchronous accounting for the event counters (e.g. oom kill count). However,
+the conversion didn't get merged due to percpu memory overhead concern which
+couldn't be addressed at the time.
+
+Unfortunately, the patch's addition of smp_mb() to cgroup_rstat_updated()
+meant that every scheduling event now had to go through an additional full
+barrier and Mel Gorman noticed it as 1% regression in netperf UDP_STREAM test.
+
+There's no need to have this barrier in tree now and even if we need
+synchronous accounting in the future, the right thing to do is separating that
+out to a separate function so that hot paths which don't care about
+synchronous behavior don't have to pay the overhead of the full barrier. Let's
+revert.
+
+Signed-off-by: Tejun Heo <tj@kernel.org>
+Reported-by: Mel Gorman <mgorman@techsingularity.net>
+Link: http://lkml.kernel.org/r/20200409154413.GK3818@techsingularity.net
+Cc: v4.18+
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ kernel/cgroup/rstat.c | 16 +++-------------
+ 1 file changed, 3 insertions(+), 13 deletions(-)
+
+diff --git a/kernel/cgroup/rstat.c b/kernel/cgroup/rstat.c
+index bb95a35e8c2d..d0ed410b4127 100644
+--- a/kernel/cgroup/rstat.c
++++ b/kernel/cgroup/rstat.c
+@@ -32,12 +32,9 @@ void cgroup_rstat_updated(struct cgroup *cgrp, int cpu)
+               return;
+       /*
+-       * Paired with the one in cgroup_rstat_cpu_pop_upated().  Either we
+-       * see NULL updated_next or they see our updated stat.
+-       */
+-      smp_mb();
+-
+-      /*
++       * Speculative already-on-list test. This may race leading to
++       * temporary inaccuracies, which is fine.
++       *
+        * Because @parent's updated_children is terminated with @parent
+        * instead of NULL, we can tell whether @cgrp is on the list by
+        * testing the next pointer for NULL.
+@@ -133,13 +130,6 @@ static struct cgroup *cgroup_rstat_cpu_pop_updated(struct cgroup *pos,
+               *nextp = rstatc->updated_next;
+               rstatc->updated_next = NULL;
+-              /*
+-               * Paired with the one in cgroup_rstat_cpu_updated().
+-               * Either they see NULL updated_next or we see their
+-               * updated stat.
+-               */
+-              smp_mb();
+-
+               return pos;
+       }
+-- 
+2.25.1
+
diff --git a/queue-4.19/series b/queue-4.19/series
new file mode 100644 (file)
index 0000000..e44d05e
--- /dev/null
@@ -0,0 +1 @@
+revert-cgroup-add-memory-barriers-to-plug-cgroup_rst.patch