summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Gortmaker <paul.gortmaker@windriver.com>2016-12-25 08:56:53 -0500
committerPaul Gortmaker <paul.gortmaker@windriver.com>2016-12-25 09:02:47 -0500
commit1f3f584fe003da9b6d7004717ae8ac5a2b426773 (patch)
treed94dc81c170ebbc6bf35c96fb4b7f694d24b441a
parente498b1662ce9fc156cd2391b06bda9356d5977a3 (diff)
download4.9-rt-patches-1f3f584fe003da9b6d7004717ae8ac5a2b426773.tar.gz
mm: unrefresh for 4.8.15 --> 4.8.0
-rw-r--r--patches/mm-workingset-do-not-protect-workingset_shadow_nodes.patch41
1 files changed, 27 insertions, 14 deletions
diff --git a/patches/mm-workingset-do-not-protect-workingset_shadow_nodes.patch b/patches/mm-workingset-do-not-protect-workingset_shadow_nodes.patch
index 363450e4fc4da..d90f1537e4efe 100644
--- a/patches/mm-workingset-do-not-protect-workingset_shadow_nodes.patch
+++ b/patches/mm-workingset-do-not-protect-workingset_shadow_nodes.patch
@@ -1,6 +1,8 @@
+From 918cf3e5b94891b7f557350d0d69c5f55b0e134c Mon Sep 17 00:00:00 2001
From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Date: Thu, 29 Jan 2015 17:19:44 +0100
-Subject: mm/workingset: Do not protect workingset_shadow_nodes with irq off
+Subject: [PATCH] mm/workingset: Do not protect workingset_shadow_nodes with
+ irq off
workingset_shadow_nodes is protected by local_irq_disable(). Some users
use spin_lock_irq().
@@ -9,12 +11,14 @@ so I catch users of it which will be introduced later.
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
---
- include/linux/swap.h | 4 +++-
- mm/filemap.c | 13 +++++++++----
- mm/truncate.c | 7 +++++--
- mm/workingset.c | 23 ++++++++++++-----------
+ include/linux/swap.h | 4 +++-
+ mm/filemap.c | 13 +++++++++----
+ mm/truncate.c | 7 +++++--
+ mm/workingset.c | 23 ++++++++++++-----------
4 files changed, 29 insertions(+), 18 deletions(-)
+diff --git a/include/linux/swap.h b/include/linux/swap.h
+index 4a529c984a3f..3d7ce719282c 100644
--- a/include/linux/swap.h
+++ b/include/linux/swap.h
@@ -11,6 +11,7 @@
@@ -35,9 +39,11 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
static inline unsigned int workingset_node_pages(struct radix_tree_node *node)
{
+diff --git a/mm/filemap.c b/mm/filemap.c
+index 2d0986a64f1f..38b6746958a3 100644
--- a/mm/filemap.c
+++ b/mm/filemap.c
-@@ -159,9 +159,12 @@ static int page_cache_tree_insert(struct
+@@ -159,9 +159,12 @@ static int page_cache_tree_insert(struct address_space *mapping,
* node->private_list is protected by
* mapping->tree_lock.
*/
@@ -52,7 +58,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
}
return 0;
}
-@@ -217,8 +220,10 @@ static void page_cache_tree_delete(struc
+@@ -215,8 +218,10 @@ static void page_cache_tree_delete(struct address_space *mapping,
if (!dax_mapping(mapping) && !workingset_node_pages(node) &&
list_empty(&node->private_list)) {
node->private_data = mapping;
@@ -64,10 +70,12 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+ local_unlock(workingset_shadow_lock);
}
}
-
+ }
+diff --git a/mm/truncate.c b/mm/truncate.c
+index a01cce450a26..4bda37604f99 100644
--- a/mm/truncate.c
+++ b/mm/truncate.c
-@@ -62,9 +62,12 @@ static void clear_exceptional_entry(stru
+@@ -62,9 +62,12 @@ static void clear_exceptional_entry(struct address_space *mapping,
* protected by mapping->tree_lock.
*/
if (!workingset_node_shadows(node) &&
@@ -82,9 +90,11 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
__radix_tree_delete_node(&mapping->page_tree, node);
unlock:
spin_unlock_irq(&mapping->tree_lock);
+diff --git a/mm/workingset.c b/mm/workingset.c
+index 617475f529f4..48674bf36fb1 100644
--- a/mm/workingset.c
+++ b/mm/workingset.c
-@@ -334,7 +334,8 @@ void workingset_activation(struct page *
+@@ -334,7 +334,8 @@ out:
* point where they would still be useful.
*/
@@ -94,7 +104,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
static unsigned long count_shadow_nodes(struct shrinker *shrinker,
struct shrink_control *sc)
-@@ -344,9 +345,9 @@ static unsigned long count_shadow_nodes(
+@@ -344,9 +345,9 @@ static unsigned long count_shadow_nodes(struct shrinker *shrinker,
unsigned long pages;
/* list_lru lock nests inside IRQ-safe mapping->tree_lock */
@@ -105,9 +115,9 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+ shadow_nodes = list_lru_shrink_count(&__workingset_shadow_nodes, sc);
+ local_unlock_irq(workingset_shadow_lock);
- if (sc->memcg) {
+ if (memcg_kmem_enabled()) {
pages = mem_cgroup_node_nr_lru_pages(sc->memcg, sc->nid,
-@@ -438,9 +439,9 @@ static enum lru_status shadow_lru_isolat
+@@ -438,9 +439,9 @@ static enum lru_status shadow_lru_isolate(struct list_head *item,
spin_unlock(&mapping->tree_lock);
ret = LRU_REMOVED_RETRY;
out:
@@ -119,7 +129,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
spin_lock(lru_lock);
return ret;
}
-@@ -451,10 +452,10 @@ static unsigned long scan_shadow_nodes(s
+@@ -451,10 +452,10 @@ static unsigned long scan_shadow_nodes(struct shrinker *shrinker,
unsigned long ret;
/* list_lru lock nests inside IRQ-safe mapping->tree_lock */
@@ -151,3 +161,6 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
err:
return ret;
}
+--
+2.10.1
+