diff options
author | Paul Gortmaker <paul.gortmaker@windriver.com> | 2017-10-02 01:05:30 -0400 |
---|---|---|
committer | Paul Gortmaker <paul.gortmaker@windriver.com> | 2017-10-02 01:05:30 -0400 |
commit | 4c9b15fac469f7f1666be7207fa22810cb004a9e (patch) | |
tree | 061e9ffb7b5c5f9c6beb06e8c256d439f1866b2b | |
parent | 8fea14763596b3e7a3ee1510e339407c856b2284 (diff) | |
download | 4.12-rt-patches-4c9b15fac469f7f1666be7207fa22810cb004a9e.tar.gz |
refresh mm-workingset-do-not-protect-workingset_shadow_nodes.patch
Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
-rw-r--r-- | patches/mm-workingset-do-not-protect-workingset_shadow_nodes.patch | 47 |
1 files changed, 27 insertions, 20 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 8d6ea6c2e3b020..1562eaaaa37a37 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 7ab982d83016331e05f3984ed4ecccfca14739c6 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(). @@ -8,13 +10,9 @@ Replace the irq/on with a local_lock(). Rename workingset_shadow_nodes 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 | 9 +++++++-- - mm/truncate.c | 4 +++- - mm/workingset.c | 31 ++++++++++++++++--------------- - 4 files changed, 29 insertions(+), 19 deletions(-) +diff --git a/include/linux/swap.h b/include/linux/swap.h +index 45e91dd6716d..4e458bdf979e 100644 --- a/include/linux/swap.h +++ b/include/linux/swap.h @@ -11,6 +11,7 @@ @@ -35,6 +33,8 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> /* linux/mm/page_alloc.c */ extern unsigned long totalram_pages; +diff --git a/mm/filemap.c b/mm/filemap.c +index 1694623a6289..f75a6f77cceb 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -110,6 +110,7 @@ @@ -45,7 +45,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> static int page_cache_tree_insert(struct address_space *mapping, struct page *page, void **shadowp) -@@ -142,8 +143,10 @@ static int page_cache_tree_insert(struct +@@ -142,8 +143,10 @@ static int page_cache_tree_insert(struct address_space *mapping, true); } } @@ -57,7 +57,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> mapping->nrpages++; return 0; } -@@ -160,6 +163,7 @@ static void page_cache_tree_delete(struc +@@ -160,6 +163,7 @@ static void page_cache_tree_delete(struct address_space *mapping, VM_BUG_ON_PAGE(PageTail(page), page); VM_BUG_ON_PAGE(nr != 1 && shadow, page); @@ -65,7 +65,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> for (i = 0; i < nr; i++) { struct radix_tree_node *node; void **slot; -@@ -171,8 +175,9 @@ static void page_cache_tree_delete(struc +@@ -171,8 +175,9 @@ static void page_cache_tree_delete(struct address_space *mapping, radix_tree_clear_tags(&mapping->page_tree, node, slot); __radix_tree_replace(&mapping->page_tree, node, slot, shadow, @@ -76,9 +76,11 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> if (shadow) { mapping->nrexceptional += nr; +diff --git a/mm/truncate.c b/mm/truncate.c +index 6263affdef88..d085d3d41b85 100644 --- a/mm/truncate.c +++ b/mm/truncate.c -@@ -41,8 +41,10 @@ static void clear_shadow_entry(struct ad +@@ -41,8 +41,10 @@ static void clear_shadow_entry(struct address_space *mapping, pgoff_t index, goto unlock; if (*slot != entry) goto unlock; @@ -90,9 +92,11 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> mapping->nrexceptional--; unlock: spin_unlock_irq(&mapping->tree_lock); +diff --git a/mm/workingset.c b/mm/workingset.c +index eda05c71fa49..188f46ee11be 100644 --- a/mm/workingset.c +++ b/mm/workingset.c -@@ -339,9 +339,10 @@ void workingset_activation(struct page * +@@ -336,9 +336,10 @@ void workingset_activation(struct page *page) * point where they would still be useful. */ @@ -105,7 +109,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> { struct address_space *mapping = private; -@@ -359,10 +360,10 @@ void workingset_update_node(struct radix +@@ -356,10 +357,10 @@ void workingset_update_node(struct radix_tree_node *node, void *private) */ if (node->count && node->count == node->exceptional) { if (list_empty(&node->private_list)) @@ -118,7 +122,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> } } -@@ -374,9 +375,9 @@ static unsigned long count_shadow_nodes( +@@ -371,9 +372,9 @@ static unsigned long count_shadow_nodes(struct shrinker *shrinker, unsigned long cache; /* list_lru lock nests inside IRQ-safe mapping->tree_lock */ @@ -131,9 +135,9 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> /* * Approximate a reasonable limit for the radix tree nodes -@@ -478,15 +479,15 @@ static enum lru_status shadow_lru_isolat - mem_cgroup_inc_page_stat(virt_to_page(node), - MEMCG_WORKINGSET_NODERECLAIM); +@@ -473,15 +474,15 @@ static enum lru_status shadow_lru_isolate(struct list_head *item, + goto out_invalid; + inc_node_state(page_pgdat(virt_to_page(node)), WORKINGSET_NODERECLAIM); __radix_tree_delete_node(&mapping->page_tree, node, - workingset_update_node, mapping); + __workingset_update_node, mapping); @@ -150,7 +154,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> spin_lock(lru_lock); return ret; } -@@ -497,9 +498,9 @@ static unsigned long scan_shadow_nodes(s +@@ -492,9 +493,9 @@ static unsigned long scan_shadow_nodes(struct shrinker *shrinker, unsigned long ret; /* list_lru lock nests inside IRQ-safe mapping->tree_lock */ @@ -163,7 +167,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> return ret; } -@@ -537,7 +538,7 @@ static int __init workingset_init(void) +@@ -532,7 +533,7 @@ static int __init workingset_init(void) pr_info("workingset: timestamp_bits=%d max_order=%d bucket_order=%u\n", timestamp_bits, max_order, bucket_order); @@ -172,7 +176,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> if (ret) goto err; ret = register_shrinker(&workingset_shadow_shrinker); -@@ -545,7 +546,7 @@ static int __init workingset_init(void) +@@ -540,7 +541,7 @@ static int __init workingset_init(void) goto err_list_lru; return 0; err_list_lru: @@ -181,3 +185,6 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> err: return ret; } +-- +2.1.4 + |