summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Gortmaker <paul.gortmaker@windriver.com>2017-10-02 01:05:30 -0400
committerPaul Gortmaker <paul.gortmaker@windriver.com>2017-10-02 01:05:30 -0400
commit4c9b15fac469f7f1666be7207fa22810cb004a9e (patch)
tree061e9ffb7b5c5f9c6beb06e8c256d439f1866b2b
parent8fea14763596b3e7a3ee1510e339407c856b2284 (diff)
download4.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.patch47
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
+