diff options
author | Paul Gortmaker <paul.gortmaker@windriver.com> | 2016-12-25 08:56:53 -0500 |
---|---|---|
committer | Paul Gortmaker <paul.gortmaker@windriver.com> | 2016-12-25 09:02:47 -0500 |
commit | 1f3f584fe003da9b6d7004717ae8ac5a2b426773 (patch) | |
tree | d94dc81c170ebbc6bf35c96fb4b7f694d24b441a | |
parent | e498b1662ce9fc156cd2391b06bda9356d5977a3 (diff) | |
download | 4.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.patch | 41 |
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 + |