All of lore.kernel.org
 help / color / mirror / Atom feed
diff for duplicates of <20151108234016.GC29600@node.shutemov.name>

diff --git a/a/1.txt b/N1/1.txt
index 1141122..7fdbfff 100644
--- a/a/1.txt
+++ b/N1/1.txt
@@ -19,3 +19,79 @@ On Fri, Nov 06, 2015 at 02:39:00PM -0800, Andrew Morton wrote:
 > bogus.
 
 Here it is.
+
+>From 4bd3af3b6b9498254bd71e8288721dcff641156c Mon Sep 17 00:00:00 2001
+From: "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>
+Date: Mon, 9 Nov 2015 01:34:08 +0200
+Subject: [PATCH] mm: uninline slowpath of page_mapcount()
+
+Let's move page_mapcount() part for compound page into mm/util.c.
+
+make allyesconfig:
+
+  text	   data	    bss	    dec	    hex	filename
+188515051	153360535	85458720	427334306	19789aa2	vmlinux.o.before
+188512917	153356439	85458720	427328076	1978824c	vmlinux.o.after
+
+Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
+---
+ include/linux/mm.h | 14 +++++---------
+ mm/util.c          | 14 ++++++++++++++
+ 2 files changed, 19 insertions(+), 9 deletions(-)
+
+diff --git a/include/linux/mm.h b/include/linux/mm.h
+index f874d2a1d1a6..72edbbec7b91 100644
+--- a/include/linux/mm.h
++++ b/include/linux/mm.h
+@@ -417,19 +417,15 @@ static inline void page_mapcount_reset(struct page *page)
+ 	atomic_set(&(page)->_mapcount, -1);
+ }
+ 
++int __page_mapcount(struct page *page);
++
+ static inline int page_mapcount(struct page *page)
+ {
+-	int ret;
+ 	VM_BUG_ON_PAGE(PageSlab(page), page);
+ 
+-	ret = atomic_read(&page->_mapcount) + 1;
+-	if (PageCompound(page)) {
+-		page = compound_head(page);
+-		ret += atomic_read(compound_mapcount_ptr(page)) + 1;
+-		if (PageDoubleMap(page))
+-			ret--;
+-	}
+-	return ret;
++	if (unlikely(PageCompound(page)))
++		return __page_mapcount(page);
++	return atomic_read(&page->_mapcount) + 1;
+ }
+ 
+ #ifdef CONFIG_TRANSPARENT_HUGEPAGE
+diff --git a/mm/util.c b/mm/util.c
+index 902b65a43899..68535c0bb9da 100644
+--- a/mm/util.c
++++ b/mm/util.c
+@@ -376,6 +376,20 @@ struct address_space *page_mapping(struct page *page)
+ 	return mapping;
+ }
+ 
++/* Slow path of page_mapcount() for compound pages */
++int __page_mapcount(struct page *page)
++{
++	int ret;
++
++	page = compound_head(page);
++	ret = atomic_read(&page->_mapcount) + 1;
++	ret += atomic_read(compound_mapcount_ptr(page)) + 1;
++	if (PageDoubleMap(page))
++		ret--;
++	return ret;
++}
++EXPORT_SYMBOL_GPL(__page_mapcount);
++
+ int overcommit_ratio_handler(struct ctl_table *table, int write,
+ 			     void __user *buffer, size_t *lenp,
+ 			     loff_t *ppos)
+-- 
+ Kirill A. Shutemov
diff --git a/a/content_digest b/N1/content_digest
index d8f99b8..4b229a7 100644
--- a/a/content_digest
+++ b/N1/content_digest
@@ -38,6 +38,82 @@
  "> I don't know why bss changed; this usually (always?) happens.  Seems\n"
  "> bogus.\n"
  "\n"
- Here it is.
+ "Here it is.\n"
+ "\n"
+ ">From 4bd3af3b6b9498254bd71e8288721dcff641156c Mon Sep 17 00:00:00 2001\n"
+ "From: \"Kirill A. Shutemov\" <kirill.shutemov@linux.intel.com>\n"
+ "Date: Mon, 9 Nov 2015 01:34:08 +0200\n"
+ "Subject: [PATCH] mm: uninline slowpath of page_mapcount()\n"
+ "\n"
+ "Let's move page_mapcount() part for compound page into mm/util.c.\n"
+ "\n"
+ "make allyesconfig:\n"
+ "\n"
+ "  text\t   data\t    bss\t    dec\t    hex\tfilename\n"
+ "188515051\t153360535\t85458720\t427334306\t19789aa2\tvmlinux.o.before\n"
+ "188512917\t153356439\t85458720\t427328076\t1978824c\tvmlinux.o.after\n"
+ "\n"
+ "Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>\n"
+ "---\n"
+ " include/linux/mm.h | 14 +++++---------\n"
+ " mm/util.c          | 14 ++++++++++++++\n"
+ " 2 files changed, 19 insertions(+), 9 deletions(-)\n"
+ "\n"
+ "diff --git a/include/linux/mm.h b/include/linux/mm.h\n"
+ "index f874d2a1d1a6..72edbbec7b91 100644\n"
+ "--- a/include/linux/mm.h\n"
+ "+++ b/include/linux/mm.h\n"
+ "@@ -417,19 +417,15 @@ static inline void page_mapcount_reset(struct page *page)\n"
+ " \tatomic_set(&(page)->_mapcount, -1);\n"
+ " }\n"
+ " \n"
+ "+int __page_mapcount(struct page *page);\n"
+ "+\n"
+ " static inline int page_mapcount(struct page *page)\n"
+ " {\n"
+ "-\tint ret;\n"
+ " \tVM_BUG_ON_PAGE(PageSlab(page), page);\n"
+ " \n"
+ "-\tret = atomic_read(&page->_mapcount) + 1;\n"
+ "-\tif (PageCompound(page)) {\n"
+ "-\t\tpage = compound_head(page);\n"
+ "-\t\tret += atomic_read(compound_mapcount_ptr(page)) + 1;\n"
+ "-\t\tif (PageDoubleMap(page))\n"
+ "-\t\t\tret--;\n"
+ "-\t}\n"
+ "-\treturn ret;\n"
+ "+\tif (unlikely(PageCompound(page)))\n"
+ "+\t\treturn __page_mapcount(page);\n"
+ "+\treturn atomic_read(&page->_mapcount) + 1;\n"
+ " }\n"
+ " \n"
+ " #ifdef CONFIG_TRANSPARENT_HUGEPAGE\n"
+ "diff --git a/mm/util.c b/mm/util.c\n"
+ "index 902b65a43899..68535c0bb9da 100644\n"
+ "--- a/mm/util.c\n"
+ "+++ b/mm/util.c\n"
+ "@@ -376,6 +376,20 @@ struct address_space *page_mapping(struct page *page)\n"
+ " \treturn mapping;\n"
+ " }\n"
+ " \n"
+ "+/* Slow path of page_mapcount() for compound pages */\n"
+ "+int __page_mapcount(struct page *page)\n"
+ "+{\n"
+ "+\tint ret;\n"
+ "+\n"
+ "+\tpage = compound_head(page);\n"
+ "+\tret = atomic_read(&page->_mapcount) + 1;\n"
+ "+\tret += atomic_read(compound_mapcount_ptr(page)) + 1;\n"
+ "+\tif (PageDoubleMap(page))\n"
+ "+\t\tret--;\n"
+ "+\treturn ret;\n"
+ "+}\n"
+ "+EXPORT_SYMBOL_GPL(__page_mapcount);\n"
+ "+\n"
+ " int overcommit_ratio_handler(struct ctl_table *table, int write,\n"
+ " \t\t\t     void __user *buffer, size_t *lenp,\n"
+ " \t\t\t     loff_t *ppos)\n"
+ "-- \n"
+  Kirill A. Shutemov
 
-171b6e17b3dcdfb0727864ba755db4810d5c55bb68a31968b1cc186bcb8ebe50
+96d6cd26b6749e6d3de650642937e3b35ba06243dc29299243ec5fa3a1983f37

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.