summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Gortmaker <paul.gortmaker@windriver.com>2020-08-27 11:18:59 -0400
committerPaul Gortmaker <paul.gortmaker@windriver.com>2020-08-27 11:18:59 -0400
commit7e10c5dd228febc677d386bb3e3b1ad040fe5d85 (patch)
tree955927dbe39b33016059d35849e0037deff4de33
parentc46c4e363194eeab1b3f8241242b7734ffa4f617 (diff)
downloadlongterm-queue-5.2-7e10c5dd228febc677d386bb3e3b1ad040fe5d85.tar.gz
mm: add fix for backport of d38a2b7a9c939
Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
-rw-r--r--queue/mm-memcg-slab-synchronize-access-to-kmem_cache-dying.patch85
-rw-r--r--queue/series1
2 files changed, 86 insertions, 0 deletions
diff --git a/queue/mm-memcg-slab-synchronize-access-to-kmem_cache-dying.patch b/queue/mm-memcg-slab-synchronize-access-to-kmem_cache-dying.patch
new file mode 100644
index 00000000..44733c03
--- /dev/null
+++ b/queue/mm-memcg-slab-synchronize-access-to-kmem_cache-dying.patch
@@ -0,0 +1,85 @@
+From 63b02ef7dc4ec239df45c018ac0adbd02ba30a0c Mon Sep 17 00:00:00 2001
+From: Roman Gushchin <guro@fb.com>
+Date: Thu, 11 Jul 2019 20:56:24 -0700
+Subject: [PATCH] mm: memcg/slab: synchronize access to kmem_cache dying flag
+ using a spinlock
+
+commit 63b02ef7dc4ec239df45c018ac0adbd02ba30a0c upstream.
+
+Currently the memcg_params.dying flag and the corresponding workqueue used
+for the asynchronous deactivation of kmem_caches is synchronized using the
+slab_mutex.
+
+It makes impossible to check this flag from the irq context, which will be
+required in order to implement asynchronous release of kmem_caches.
+
+So let's switch over to the irq-save flavor of the spinlock-based
+synchronization.
+
+Link: http://lkml.kernel.org/r/20190611231813.3148843-8-guro@fb.com
+Signed-off-by: Roman Gushchin <guro@fb.com>
+Acked-by: Vladimir Davydov <vdavydov.dev@gmail.com>
+Reviewed-by: Shakeel Butt <shakeelb@google.com>
+Cc: Christoph Lameter <cl@linux.com>
+Cc: Johannes Weiner <hannes@cmpxchg.org>
+Cc: Michal Hocko <mhocko@suse.com>
+Cc: Waiman Long <longman@redhat.com>
+Cc: David Rientjes <rientjes@google.com>
+Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
+Cc: Pekka Enberg <penberg@kernel.org>
+Cc: Andrei Vagin <avagin@gmail.com>
+Cc: Qian Cai <cai@lca.pw>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+
+diff --git a/mm/slab_common.c b/mm/slab_common.c
+index afdd73553b88..a15557776d7d 100644
+--- a/mm/slab_common.c
++++ b/mm/slab_common.c
+@@ -130,6 +130,7 @@ int __kmem_cache_alloc_bulk(struct kmem_cache *s, gfp_t flags, size_t nr,
+ #ifdef CONFIG_MEMCG_KMEM
+
+ LIST_HEAD(slab_root_caches);
++static DEFINE_SPINLOCK(memcg_kmem_wq_lock);
+
+ void slab_init_memcg_params(struct kmem_cache *s)
+ {
+@@ -734,14 +735,22 @@ static void kmemcg_cache_deactivate(struct kmem_cache *s)
+
+ __kmemcg_cache_deactivate(s);
+
++ /*
++ * memcg_kmem_wq_lock is used to synchronize memcg_params.dying
++ * flag and make sure that no new kmem_cache deactivation tasks
++ * are queued (see flush_memcg_workqueue() ).
++ */
++ spin_lock_irq(&memcg_kmem_wq_lock);
+ if (s->memcg_params.root_cache->memcg_params.dying)
+- return;
++ goto unlock;
+
+ /* pin memcg so that @s doesn't get destroyed in the middle */
+ css_get(&s->memcg_params.memcg->css);
+
+ s->memcg_params.work_fn = __kmemcg_cache_deactivate_after_rcu;
+ call_rcu(&s->memcg_params.rcu_head, kmemcg_rcufn);
++unlock:
++ spin_unlock_irq(&memcg_kmem_wq_lock);
+ }
+
+ void memcg_deactivate_kmem_caches(struct mem_cgroup *memcg)
+@@ -851,9 +860,9 @@ static int shutdown_memcg_caches(struct kmem_cache *s)
+
+ static void flush_memcg_workqueue(struct kmem_cache *s)
+ {
+- mutex_lock(&slab_mutex);
++ spin_lock_irq(&memcg_kmem_wq_lock);
+ s->memcg_params.dying = true;
+- mutex_unlock(&slab_mutex);
++ spin_unlock_irq(&memcg_kmem_wq_lock);
+
+ /*
+ * SLAB and SLUB deactivate the kmem_caches through call_rcu. Make
+--
+2.27.0
+
diff --git a/queue/series b/queue/series
index 4eb21006..15955f39 100644
--- a/queue/series
+++ b/queue/series
@@ -1,3 +1,4 @@
+mm-memcg-slab-synchronize-access-to-kmem_cache-dying.patch
USB-serial-qcserial-add-EM7305-QDL-product-ID.patch
usb-xhci-define-IDs-for-various-ASMedia-host-control.patch
usb-xhci-Fix-ASMedia-ASM1142-DMA-addressing.patch