aboutsummaryrefslogtreecommitdiffstats
path: root/mm/swap.c
diff options
context:
space:
mode:
Diffstat (limited to 'mm/swap.c')
-rw-r--r--mm/swap.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/mm/swap.c b/mm/swap.c
index 4a1fc6d..2d8aeaf 100644
--- a/mm/swap.c
+++ b/mm/swap.c
@@ -373,12 +373,27 @@ EXPORT_SYMBOL(mark_page_accessed);
void __lru_cache_add(struct page *page, enum lru_list lru)
{
+#ifndef CONFIG_DMA_CMA
struct pagevec *pvec = &get_cpu_var(lru_add_pvecs)[lru];
page_cache_get(page);
if (!pagevec_add(pvec, page))
____pagevec_lru_add(pvec, lru);
put_cpu_var(lru_add_pvecs);
+#else
+ struct pagevec *pvec;
+ int is_cma;
+
+ /* FIXME: too slow */
+ is_cma = is_cma_pageblock(page);
+
+ pvec = &get_cpu_var(lru_add_pvecs)[lru];
+
+ page_cache_get(page);
+ if (!pagevec_add(pvec, page) || is_cma)
+ ____pagevec_lru_add(pvec, lru);
+ put_cpu_var(lru_add_pvecs);
+#endif
}
EXPORT_SYMBOL(__lru_cache_add);