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.