diff for duplicates of <20130725134227.GT3421@sgi.com> diff --git a/a/1.txt b/N1/1.txt index c6224a1..8638a57 100644 --- a/a/1.txt +++ b/N1/1.txt @@ -51,3 +51,88 @@ Otherwise, I think I am following your directions. Thanks, Robin Holt + +>From bdd2fefa59af18f283af6f066bc644ddfa5c7da8 Mon Sep 17 00:00:00 2001 +From: Robin Holt <holt@sgi.com> +Date: Thu, 25 Jul 2013 04:25:15 -0500 +Subject: [RFC -v2-pre2 4/5] ZZZ Only SegPageReserved() on memblock reserved + pages. + +--- + include/linux/mm.h | 2 ++ + mm/nobootmem.c | 3 +++ + mm/page_alloc.c | 18 +++++++++++------- + 3 files changed, 16 insertions(+), 7 deletions(-) + +diff --git a/include/linux/mm.h b/include/linux/mm.h +index e0c8528..b264a26 100644 +--- a/include/linux/mm.h ++++ b/include/linux/mm.h +@@ -1322,6 +1322,8 @@ static inline void adjust_managed_page_count(struct page *page, long count) + totalram_pages += count; + } + ++extern void reserve_bootmem_region(unsigned long start, unsigned long end); ++ + /* Free the reserved page into the buddy system, so it gets managed. */ + static inline void __free_reserved_page(struct page *page) + { +diff --git a/mm/nobootmem.c b/mm/nobootmem.c +index 2159e68..0840af2 100644 +--- a/mm/nobootmem.c ++++ b/mm/nobootmem.c +@@ -117,6 +117,9 @@ static unsigned long __init free_low_memory_core_early(void) + phys_addr_t start, end, size; + u64 i; + ++ for_each_reserved_mem_region(i, &start, &end) ++ reserve_bootmem_region(start, end); ++ + for_each_free_mem_range(i, MAX_NUMNODES, &start, &end, NULL) + count += __free_memory_core(start, end); + +diff --git a/mm/page_alloc.c b/mm/page_alloc.c +index 048e166..3aa30b7 100644 +--- a/mm/page_alloc.c ++++ b/mm/page_alloc.c +@@ -698,7 +698,7 @@ static void free_one_page(struct zone *zone, struct page *page, int order, + } + + static void __init_single_page(unsigned long pfn, unsigned long zone, +- int nid, int reserved) ++ int nid, int page_count) + { + struct page *page = pfn_to_page(pfn); + struct zone *z = &NODE_DATA(nid)->node_zones[zone]; +@@ -708,12 +708,9 @@ static void __init_single_page(unsigned long pfn, unsigned long zone, + init_page_count(page); + page_mapcount_reset(page); + page_nid_reset_last(page); +- if (reserved) { +- SetPageReserved(page); +- } else { +- ClearPageReserved(page); +- set_page_count(page, 0); +- } ++ ClearPageReserved(page); ++ set_page_count(page, page_count); ++ + /* + * Mark the block movable so that blocks are reserved for + * movable at startup. This will force kernel allocations +@@ -741,6 +738,13 @@ static void __init_single_page(unsigned long pfn, unsigned long zone, + #endif + } + ++void reserve_bootmem_region(unsigned long start, unsigned long end) ++{ ++ for (; start < end; start++) ++ if (pfn_valid(start)) ++ SetPageReserved(pfn_to_page(start)); ++} ++ + static bool free_pages_prepare(struct page *page, unsigned int order) + { + int i; +-- +1.8.2.1 diff --git a/a/content_digest b/N1/content_digest index e95300f..4b4cf4b 100644 --- a/a/content_digest +++ b/N1/content_digest @@ -73,6 +73,91 @@ "Otherwise, I think I am following your directions.\n" "\n" "Thanks,\n" - Robin Holt + "Robin Holt\n" + "\n" + ">From bdd2fefa59af18f283af6f066bc644ddfa5c7da8 Mon Sep 17 00:00:00 2001\n" + "From: Robin Holt <holt@sgi.com>\n" + "Date: Thu, 25 Jul 2013 04:25:15 -0500\n" + "Subject: [RFC -v2-pre2 4/5] ZZZ Only SegPageReserved() on memblock reserved\n" + " pages.\n" + "\n" + "---\n" + " include/linux/mm.h | 2 ++\n" + " mm/nobootmem.c | 3 +++\n" + " mm/page_alloc.c | 18 +++++++++++-------\n" + " 3 files changed, 16 insertions(+), 7 deletions(-)\n" + "\n" + "diff --git a/include/linux/mm.h b/include/linux/mm.h\n" + "index e0c8528..b264a26 100644\n" + "--- a/include/linux/mm.h\n" + "+++ b/include/linux/mm.h\n" + "@@ -1322,6 +1322,8 @@ static inline void adjust_managed_page_count(struct page *page, long count)\n" + " \ttotalram_pages += count;\n" + " }\n" + " \n" + "+extern void reserve_bootmem_region(unsigned long start, unsigned long end);\n" + "+\n" + " /* Free the reserved page into the buddy system, so it gets managed. */\n" + " static inline void __free_reserved_page(struct page *page)\n" + " {\n" + "diff --git a/mm/nobootmem.c b/mm/nobootmem.c\n" + "index 2159e68..0840af2 100644\n" + "--- a/mm/nobootmem.c\n" + "+++ b/mm/nobootmem.c\n" + "@@ -117,6 +117,9 @@ static unsigned long __init free_low_memory_core_early(void)\n" + " \tphys_addr_t start, end, size;\n" + " \tu64 i;\n" + " \n" + "+\tfor_each_reserved_mem_region(i, &start, &end)\n" + "+\t\treserve_bootmem_region(start, end);\n" + "+\n" + " \tfor_each_free_mem_range(i, MAX_NUMNODES, &start, &end, NULL)\n" + " \t\tcount += __free_memory_core(start, end);\n" + " \n" + "diff --git a/mm/page_alloc.c b/mm/page_alloc.c\n" + "index 048e166..3aa30b7 100644\n" + "--- a/mm/page_alloc.c\n" + "+++ b/mm/page_alloc.c\n" + "@@ -698,7 +698,7 @@ static void free_one_page(struct zone *zone, struct page *page, int order,\n" + " }\n" + " \n" + " static void __init_single_page(unsigned long pfn, unsigned long zone,\n" + "-\t\t\t int nid, int reserved)\n" + "+\t\t\t int nid, int page_count)\n" + " {\n" + " \tstruct page *page = pfn_to_page(pfn);\n" + " \tstruct zone *z = &NODE_DATA(nid)->node_zones[zone];\n" + "@@ -708,12 +708,9 @@ static void __init_single_page(unsigned long pfn, unsigned long zone,\n" + " \tinit_page_count(page);\n" + " \tpage_mapcount_reset(page);\n" + " \tpage_nid_reset_last(page);\n" + "-\tif (reserved) {\n" + "-\t\tSetPageReserved(page);\n" + "-\t} else {\n" + "-\t\tClearPageReserved(page);\n" + "-\t\tset_page_count(page, 0);\n" + "-\t}\n" + "+\tClearPageReserved(page);\n" + "+\tset_page_count(page, page_count);\n" + "+\n" + " \t/*\n" + " \t * Mark the block movable so that blocks are reserved for\n" + " \t * movable at startup. This will force kernel allocations\n" + "@@ -741,6 +738,13 @@ static void __init_single_page(unsigned long pfn, unsigned long zone,\n" + " #endif\n" + " }\n" + " \n" + "+void reserve_bootmem_region(unsigned long start, unsigned long end)\n" + "+{\n" + "+\tfor (; start < end; start++)\n" + "+\t\tif (pfn_valid(start))\n" + "+\t\t\tSetPageReserved(pfn_to_page(start));\n" + "+}\n" + "+\n" + " static bool free_pages_prepare(struct page *page, unsigned int order)\n" + " {\n" + " \tint i;\n" + "-- \n" + 1.8.2.1 -65e42d6f1948ce157b0b3b267f73a4e357fe346cc2fb56a71678366e62a8bc81 +33a99df9aebbdcd1a0c8175e9a1017a3c70b414f39a8143cb44eab14e821ca99
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.