From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from psmtp.com (na3sys010amx160.postini.com [74.125.245.160]) by kanga.kvack.org (Postfix) with SMTP id 001E26B006C for ; Tue, 15 Jan 2013 19:25:17 -0500 (EST) Received: from /spool/local by e9.ny.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 15 Jan 2013 19:25:16 -0500 Received: from d01relay06.pok.ibm.com (d01relay06.pok.ibm.com [9.56.227.116]) by d01dlp03.pok.ibm.com (Postfix) with ESMTP id E64BBC9003E for ; Tue, 15 Jan 2013 19:25:14 -0500 (EST) Received: from d01av03.pok.ibm.com (d01av03.pok.ibm.com [9.56.224.217]) by d01relay06.pok.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id r0G0PEI417432606 for ; Tue, 15 Jan 2013 19:25:14 -0500 Received: from d01av03.pok.ibm.com (loopback [127.0.0.1]) by d01av03.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id r0G0PE92017527 for ; Tue, 15 Jan 2013 22:25:14 -0200 From: Cody P Schafer Subject: [PATCH 00/17] mm: zone & pgdat accessors plus some cleanup Date: Tue, 15 Jan 2013 16:24:37 -0800 Message-Id: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> Sender: owner-linux-mm@kvack.org List-ID: To: Linux MM Cc: LKML , Andrew Morton , Catalin Marinas Summaries: 01 - removes the use of zone_end_pfn as a local var name. 02 - adds zone_end_pfn(), zone_is_initialized(), zone_is_empty() and zone_spans_pfn() 03 - adds a VM_BUG using zone_is_initialized() in __free_one_page() 04 - add ensure_zone_is_initialized() (for memory_hotplug) 05 - use the above addition. 06 - add pgdat_end_pfn() and pgdat_is_empty() 07,08,09,10,11,12,16,17 - use the new helpers 13 - avoid repeating checks for section in page flags by adding a define. 14 - memory hotplug: factor out zone+pgdat growth. 15 - add debugging message to VM_BUG check. As a general concern: spanned_pages & start_pfn (in pgdat & zone) are supposed to be locked (via a seqlock) when read (due to changes to them via memory_hotplug), but very few (only 1?) of their users appear to actually lock them. -- include/linux/mm.h | 8 ++++-- include/linux/mmzone.h | 34 ++++++++++++++++++++++--- mm/compaction.c | 10 ++++---- mm/kmemleak.c | 5 ++-- mm/memory_hotplug.c | 68 ++++++++++++++++++++++++++++---------------------- mm/page_alloc.c | 31 +++++++++++++---------- mm/vmstat.c | 2 +- 7 files changed, 100 insertions(+), 58 deletions(-) -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from psmtp.com (na3sys010amx156.postini.com [74.125.245.156]) by kanga.kvack.org (Postfix) with SMTP id 671B26B005D for ; Tue, 15 Jan 2013 19:25:50 -0500 (EST) Received: from /spool/local by e9.ny.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 15 Jan 2013 19:25:49 -0500 Received: from d01relay04.pok.ibm.com (d01relay04.pok.ibm.com [9.56.227.236]) by d01dlp02.pok.ibm.com (Postfix) with ESMTP id 7520F6E8041 for ; Tue, 15 Jan 2013 19:25:44 -0500 (EST) Received: from d03av02.boulder.ibm.com (d03av02.boulder.ibm.com [9.17.195.168]) by d01relay04.pok.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id r0G0PjVi278368 for ; Tue, 15 Jan 2013 19:25:45 -0500 Received: from d03av02.boulder.ibm.com (loopback [127.0.0.1]) by d03av02.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id r0G0PiwZ015757 for ; Tue, 15 Jan 2013 17:25:44 -0700 From: Cody P Schafer Subject: [PATCH 08/17] mm/page_alloc: use zone_spans_pfn() instead of open coded checks. Date: Tue, 15 Jan 2013 16:24:45 -0800 Message-Id: <1358295894-24167-9-git-send-email-cody@linux.vnet.ibm.com> In-Reply-To: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> References: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> Sender: owner-linux-mm@kvack.org List-ID: To: Linux MM Cc: LKML , Andrew Morton , Catalin Marinas , Cody P Schafer , Cody P Schafer From: Cody P Schafer In 2 VM_BUG()s, avoid open coding zone ownership of pfns. Signed-off-by: Cody P Schafer --- mm/page_alloc.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 3911c1a..c5d70ce 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -242,9 +242,7 @@ static int page_outside_zone_boundaries(struct zone *zone, struct page *page) do { seq = zone_span_seqbegin(zone); - if (pfn >= zone->zone_start_pfn + zone->spanned_pages) - ret = 1; - else if (pfn < zone->zone_start_pfn) + if (!zone_spans_pfn(zone, pfn)) ret = 1; } while (zone_span_seqretry(zone, seq)); @@ -5639,8 +5637,7 @@ void set_pageblock_flags_group(struct page *page, unsigned long flags, pfn = page_to_pfn(page); bitmap = get_pageblock_bitmap(zone, pfn); bitidx = pfn_to_bitidx(zone, pfn); - VM_BUG_ON(pfn < zone->zone_start_pfn); - VM_BUG_ON(pfn >= zone->zone_start_pfn + zone->spanned_pages); + VM_BUG_ON(!zone_spans_pfn(zone, pfn)); for (; start_bitidx <= end_bitidx; start_bitidx++, value <<= 1) if (flags & value) -- 1.8.0.3 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from psmtp.com (na3sys010amx155.postini.com [74.125.245.155]) by kanga.kvack.org (Postfix) with SMTP id EE2CA6B006E for ; Tue, 15 Jan 2013 19:25:55 -0500 (EST) Received: from /spool/local by e9.ny.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 15 Jan 2013 19:25:54 -0500 Received: from d01relay01.pok.ibm.com (d01relay01.pok.ibm.com [9.56.227.233]) by d01dlp01.pok.ibm.com (Postfix) with ESMTP id AF1FF38C804F for ; Tue, 15 Jan 2013 19:25:52 -0500 (EST) Received: from d01av04.pok.ibm.com (d01av04.pok.ibm.com [9.56.224.64]) by d01relay01.pok.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id r0G0Pq5r308252 for ; Tue, 15 Jan 2013 19:25:52 -0500 Received: from d01av04.pok.ibm.com (loopback [127.0.0.1]) by d01av04.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id r0G0Pqlj007094 for ; Tue, 15 Jan 2013 19:25:52 -0500 From: Cody P Schafer Subject: [PATCH 13/17] mm: add SECTION_IN_PAGE_FLAGS Date: Tue, 15 Jan 2013 16:24:50 -0800 Message-Id: <1358295894-24167-14-git-send-email-cody@linux.vnet.ibm.com> In-Reply-To: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> References: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> Sender: owner-linux-mm@kvack.org List-ID: To: Linux MM Cc: LKML , Andrew Morton , Catalin Marinas , Cody P Schafer Instead of directly utilizing a combination of config options to determine this, add a macro to specifically address it. Signed-off-by: Cody P Schafer --- include/linux/mm.h | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/include/linux/mm.h b/include/linux/mm.h index 66e2f7c..ef69564 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -625,6 +625,10 @@ static inline pte_t maybe_mkwrite(pte_t pte, struct vm_area_struct *vma) #define NODE_NOT_IN_PAGE_FLAGS #endif +#if defined(CONFIG_SPARSEMEM) && !defined(CONFIG_SPARSEMEM_VMEMMAP) +#define SECTION_IN_PAGE_FLAGS +#endif + /* * Define the bit shifts to access each section. For non-existent * sections we define the shift as 0; that plus a 0 mask ensures @@ -727,7 +731,7 @@ static inline struct zone *page_zone(const struct page *page) return &NODE_DATA(page_to_nid(page))->node_zones[page_zonenum(page)]; } -#if defined(CONFIG_SPARSEMEM) && !defined(CONFIG_SPARSEMEM_VMEMMAP) +#ifdef SECTION_IN_PAGE_FLAGS static inline void set_page_section(struct page *page, unsigned long section) { page->flags &= ~(SECTIONS_MASK << SECTIONS_PGSHIFT); @@ -757,7 +761,7 @@ static inline void set_page_links(struct page *page, enum zone_type zone, { set_page_zone(page, zone); set_page_node(page, node); -#if defined(CONFIG_SPARSEMEM) && !defined(CONFIG_SPARSEMEM_VMEMMAP) +#ifdef SECTION_IN_PAGE_FLAGS set_page_section(page, pfn_to_section_nr(pfn)); #endif } -- 1.8.0.3 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from psmtp.com (na3sys010amx108.postini.com [74.125.245.108]) by kanga.kvack.org (Postfix) with SMTP id 32C586B0071 for ; Tue, 15 Jan 2013 19:25:57 -0500 (EST) Received: from /spool/local by e8.ny.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 15 Jan 2013 19:25:56 -0500 Received: from d01relay04.pok.ibm.com (d01relay04.pok.ibm.com [9.56.227.236]) by d01dlp01.pok.ibm.com (Postfix) with ESMTP id B546438C804D for ; Tue, 15 Jan 2013 19:25:38 -0500 (EST) Received: from d03av04.boulder.ibm.com (d03av04.boulder.ibm.com [9.17.195.170]) by d01relay04.pok.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id r0G0PcCD323986 for ; Tue, 15 Jan 2013 19:25:38 -0500 Received: from d03av04.boulder.ibm.com (loopback [127.0.0.1]) by d03av04.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id r0G0PaCh011025 for ; Tue, 15 Jan 2013 17:25:37 -0700 From: Cody P Schafer Subject: [PATCH 02/17] mmzone: add various zone_*() helper functions. Date: Tue, 15 Jan 2013 16:24:39 -0800 Message-Id: <1358295894-24167-3-git-send-email-cody@linux.vnet.ibm.com> In-Reply-To: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> References: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> Sender: owner-linux-mm@kvack.org List-ID: To: Linux MM Cc: LKML , Andrew Morton , Catalin Marinas , Cody P Schafer , Cody P Schafer From: Cody P Schafer Add zone_is_initialized(), zone_is_empty(), zone_spans_pfn(), and zone_end_pfn(). Signed-off-by: Cody P Schafer --- include/linux/mmzone.h | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h index 73b64a3..696cb7c 100644 --- a/include/linux/mmzone.h +++ b/include/linux/mmzone.h @@ -543,6 +543,26 @@ static inline int zone_is_oom_locked(const struct zone *zone) return test_bit(ZONE_OOM_LOCKED, &zone->flags); } +static inline unsigned zone_end_pfn(const struct zone *zone) +{ + return zone->zone_start_pfn + zone->spanned_pages; +} + +static inline bool zone_spans_pfn(const struct zone *zone, unsigned long pfn) +{ + return zone->zone_start_pfn <= pfn && pfn < zone_end_pfn(zone); +} + +static inline bool zone_is_initialized(struct zone *zone) +{ + return !!zone->wait_table; +} + +static inline bool zone_is_empty(struct zone *zone) +{ + return zone->spanned_pages == 0; +} + /* * The "priority" of VM scanning is how much of the queues we will scan in one * go. A value of 12 for DEF_PRIORITY implies that we will scan 1/4096th of the -- 1.8.0.3 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from psmtp.com (na3sys010amx136.postini.com [74.125.245.136]) by kanga.kvack.org (Postfix) with SMTP id A559B6B0072 for ; Tue, 15 Jan 2013 19:25:57 -0500 (EST) Received: from /spool/local by e9.ny.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 15 Jan 2013 19:25:56 -0500 Received: from d01relay05.pok.ibm.com (d01relay05.pok.ibm.com [9.56.227.237]) by d01dlp03.pok.ibm.com (Postfix) with ESMTP id 191ABC90046 for ; Tue, 15 Jan 2013 19:25:54 -0500 (EST) Received: from d01av03.pok.ibm.com (d01av03.pok.ibm.com [9.56.224.217]) by d01relay05.pok.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id r0G0PrTR338022 for ; Tue, 15 Jan 2013 19:25:53 -0500 Received: from d01av03.pok.ibm.com (loopback [127.0.0.1]) by d01av03.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id r0G0PrpA020142 for ; Tue, 15 Jan 2013 22:25:53 -0200 From: Cody P Schafer Subject: [PATCH 14/17] mm/memory_hotplug: factor out zone+pgdat growth. Date: Tue, 15 Jan 2013 16:24:51 -0800 Message-Id: <1358295894-24167-15-git-send-email-cody@linux.vnet.ibm.com> In-Reply-To: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> References: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> Sender: owner-linux-mm@kvack.org List-ID: To: Linux MM Cc: LKML , Andrew Morton , Catalin Marinas , Cody P Schafer Create a new function grow_pgdat_and_zone() which handles locking + growth of a zone & the pgdat which it is associated with. Signed-off-by: Cody P Schafer --- mm/memory_hotplug.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c index 0a74b86a..c6149a3 100644 --- a/mm/memory_hotplug.c +++ b/mm/memory_hotplug.c @@ -361,6 +361,16 @@ static void grow_pgdat_span(struct pglist_data *pgdat, unsigned long start_pfn, pgdat->node_start_pfn; } +static void grow_pgdat_and_zone(struct zone *zone, unsigned long start_pfn, + unsigned long end_pfn) +{ + unsigned long flags; + pgdat_resize_lock(zone->zone_pgdat, &flags); + grow_zone_span(zone, start_pfn, end_pfn); + grow_pgdat_span(zone->zone_pgdat, start_pfn, end_pfn); + pgdat_resize_unlock(zone->zone_pgdat, &flags); +} + static int __meminit __add_zone(struct zone *zone, unsigned long phys_start_pfn) { struct pglist_data *pgdat = zone->zone_pgdat; @@ -375,11 +385,7 @@ static int __meminit __add_zone(struct zone *zone, unsigned long phys_start_pfn) if (ret) return ret; - pgdat_resize_lock(zone->zone_pgdat, &flags); - grow_zone_span(zone, phys_start_pfn, phys_start_pfn + nr_pages); - grow_pgdat_span(zone->zone_pgdat, phys_start_pfn, - phys_start_pfn + nr_pages); - pgdat_resize_unlock(zone->zone_pgdat, &flags); + grow_pgdat_and_zone(zone, phys_start_pfn, phys_start_pfn + nr_pages); memmap_init_zone(nr_pages, nid, zone_type, phys_start_pfn, MEMMAP_HOTPLUG); return 0; -- 1.8.0.3 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from psmtp.com (na3sys010amx151.postini.com [74.125.245.151]) by kanga.kvack.org (Postfix) with SMTP id B69CB6B0071 for ; Tue, 15 Jan 2013 19:25:58 -0500 (EST) Received: from /spool/local by e39.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 15 Jan 2013 17:25:57 -0700 Received: from d03relay03.boulder.ibm.com (d03relay03.boulder.ibm.com [9.17.195.228]) by d03dlp02.boulder.ibm.com (Postfix) with ESMTP id 541423E40045 for ; Tue, 15 Jan 2013 17:25:48 -0700 (MST) Received: from d03av06.boulder.ibm.com (d03av06.boulder.ibm.com [9.17.195.245]) by d03relay03.boulder.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id r0G0PsON268596 for ; Tue, 15 Jan 2013 17:25:54 -0700 Received: from d03av06.boulder.ibm.com (loopback [127.0.0.1]) by d03av06.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id r0G0S4S8004702 for ; Tue, 15 Jan 2013 17:28:05 -0700 From: Cody P Schafer Subject: [PATCH 12/17] mm/memory_hotplug: use pgdat_end_pfn() instead of open coding the same. Date: Tue, 15 Jan 2013 16:24:49 -0800 Message-Id: <1358295894-24167-13-git-send-email-cody@linux.vnet.ibm.com> In-Reply-To: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> References: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> Sender: owner-linux-mm@kvack.org List-ID: To: Linux MM Cc: LKML , Andrew Morton , Catalin Marinas , Cody P Schafer , Cody P Schafer From: Cody P Schafer Replace open coded pgdat_end_pfn() with helper function. Signed-off-by: Cody P Schafer --- mm/memory_hotplug.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c index 8e352fe..0a74b86a 100644 --- a/mm/memory_hotplug.c +++ b/mm/memory_hotplug.c @@ -189,7 +189,7 @@ void register_page_bootmem_info_node(struct pglist_data *pgdat) } pfn = pgdat->node_start_pfn; - end_pfn = pfn + pgdat->node_spanned_pages; + end_pfn = pgdat_end_pfn(pgdat); /* register_section info */ for (; pfn < end_pfn; pfn += PAGES_PER_SECTION) { -- 1.8.0.3 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from psmtp.com (na3sys010amx164.postini.com [74.125.245.164]) by kanga.kvack.org (Postfix) with SMTP id 09FBA6B0078 for ; Tue, 15 Jan 2013 19:26:00 -0500 (EST) Received: from /spool/local by e8.ny.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 15 Jan 2013 19:26:00 -0500 Received: from d01relay02.pok.ibm.com (d01relay02.pok.ibm.com [9.56.227.234]) by d01dlp02.pok.ibm.com (Postfix) with ESMTP id 2E5206E8040 for ; Tue, 15 Jan 2013 19:25:40 -0500 (EST) Received: from d01av02.pok.ibm.com (d01av02.pok.ibm.com [9.56.224.216]) by d01relay02.pok.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id r0G0PfNC186752 for ; Tue, 15 Jan 2013 19:25:41 -0500 Received: from d01av02.pok.ibm.com (loopback [127.0.0.1]) by d01av02.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id r0G0PeBl031831 for ; Tue, 15 Jan 2013 22:25:40 -0200 From: Cody P Schafer Subject: [PATCH 05/17] mm/memory_hotplug: use ensure_zone_is_initialized() Date: Tue, 15 Jan 2013 16:24:42 -0800 Message-Id: <1358295894-24167-6-git-send-email-cody@linux.vnet.ibm.com> In-Reply-To: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> References: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> Sender: owner-linux-mm@kvack.org List-ID: To: Linux MM Cc: LKML , Andrew Morton , Catalin Marinas , Cody P Schafer Remove open coding of ensure_zone_is_initialzied(). Signed-off-by: Cody P Schafer --- mm/memory_hotplug.c | 29 ++++++++++------------------- 1 file changed, 10 insertions(+), 19 deletions(-) diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c index 875bdfe..8e352fe 100644 --- a/mm/memory_hotplug.c +++ b/mm/memory_hotplug.c @@ -271,12 +271,9 @@ static int __meminit move_pfn_range_left(struct zone *z1, struct zone *z2, unsigned long flags; unsigned long z1_start_pfn; - if (!z1->wait_table) { - ret = init_currently_empty_zone(z1, start_pfn, - end_pfn - start_pfn, MEMMAP_HOTPLUG); - if (ret) - return ret; - } + ret = ensure_zone_is_initialized(z1, start_pfn, end_pfn - start_pfn); + if (ret) + return ret; pgdat_resize_lock(z1->zone_pgdat, &flags); @@ -316,12 +313,9 @@ static int __meminit move_pfn_range_right(struct zone *z1, struct zone *z2, unsigned long flags; unsigned long z2_end_pfn; - if (!z2->wait_table) { - ret = init_currently_empty_zone(z2, start_pfn, - end_pfn - start_pfn, MEMMAP_HOTPLUG); - if (ret) - return ret; - } + ret = ensure_zone_is_initialized(z2, start_pfn, end_pfn - start_pfn) + if (ret) + return ret; pgdat_resize_lock(z1->zone_pgdat, &flags); @@ -374,16 +368,13 @@ static int __meminit __add_zone(struct zone *zone, unsigned long phys_start_pfn) int nid = pgdat->node_id; int zone_type; unsigned long flags; + int ret; zone_type = zone - pgdat->node_zones; - if (!zone->wait_table) { - int ret; + ret = ensure_zone_is_initialized(zone, phys_start_pfn, nr_pages); + if (ret) + return ret; - ret = init_currently_empty_zone(zone, phys_start_pfn, - nr_pages, MEMMAP_HOTPLUG); - if (ret) - return ret; - } pgdat_resize_lock(zone->zone_pgdat, &flags); grow_zone_span(zone, phys_start_pfn, phys_start_pfn + nr_pages); grow_pgdat_span(zone->zone_pgdat, phys_start_pfn, -- 1.8.0.3 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from psmtp.com (na3sys010amx187.postini.com [74.125.245.187]) by kanga.kvack.org (Postfix) with SMTP id 2D93E6B0078 for ; Tue, 15 Jan 2013 19:26:05 -0500 (EST) Received: from /spool/local by e7.ny.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 15 Jan 2013 19:26:04 -0500 Received: from d01relay03.pok.ibm.com (d01relay03.pok.ibm.com [9.56.227.235]) by d01dlp01.pok.ibm.com (Postfix) with ESMTP id 283ED38C8067 for ; Tue, 15 Jan 2013 19:25:45 -0500 (EST) Received: from d01av01.pok.ibm.com (d01av01.pok.ibm.com [9.56.224.215]) by d01relay03.pok.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id r0G0Pijl295972 for ; Tue, 15 Jan 2013 19:25:44 -0500 Received: from d01av01.pok.ibm.com (loopback [127.0.0.1]) by d01av01.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id r0G0PhPE019021 for ; Tue, 15 Jan 2013 19:25:43 -0500 From: Cody P Schafer Subject: [PATCH 07/17] mm/page_alloc: use zone_spans_pfn() instead of open coding. Date: Tue, 15 Jan 2013 16:24:44 -0800 Message-Id: <1358295894-24167-8-git-send-email-cody@linux.vnet.ibm.com> In-Reply-To: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> References: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> Sender: owner-linux-mm@kvack.org List-ID: To: Linux MM Cc: LKML , Andrew Morton , Catalin Marinas , Cody P Schafer Use zone_spans_pfn() instead of open coding pfn ownership checks. This is split from following patch as could slightly degrade the generated code. Pre-patch, the code uses it's knowledge that start_pfn < end_pfn to cut down on the number of comparisons. Post-patch, the compiler has to figure it out. Signed-off-by: Cody P Schafer --- mm/page_alloc.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mm/page_alloc.c b/mm/page_alloc.c index da5a5ec..3911c1a 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -978,9 +978,9 @@ int move_freepages_block(struct zone *zone, struct page *page, end_pfn = start_pfn + pageblock_nr_pages - 1; /* Do not cross zone boundaries */ - if (start_pfn < zone->zone_start_pfn) + if (!zone_spans_pfn(zone, start_pfn)) start_page = page; - if (end_pfn >= zone->zone_start_pfn + zone->spanned_pages) + if (!zone_spans_pfn(zone, end_pfn)) return 0; return move_freepages(zone, start_page, end_page, migratetype); -- 1.8.0.3 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from psmtp.com (na3sys010amx134.postini.com [74.125.245.134]) by kanga.kvack.org (Postfix) with SMTP id 7BF776B0078 for ; Tue, 15 Jan 2013 19:26:08 -0500 (EST) Received: from /spool/local by e8.ny.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 15 Jan 2013 19:26:07 -0500 Received: from d01relay01.pok.ibm.com (d01relay01.pok.ibm.com [9.56.227.233]) by d01dlp01.pok.ibm.com (Postfix) with ESMTP id 343E938C8051 for ; Tue, 15 Jan 2013 19:25:50 -0500 (EST) Received: from d01av04.pok.ibm.com (d01av04.pok.ibm.com [9.56.224.64]) by d01relay01.pok.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id r0G0Pn8W298458 for ; Tue, 15 Jan 2013 19:25:49 -0500 Received: from d01av04.pok.ibm.com (loopback [127.0.0.1]) by d01av04.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id r0G0PngG006910 for ; Tue, 15 Jan 2013 19:25:49 -0500 From: Cody P Schafer Subject: [PATCH 11/17] mm/kmemleak: use node_{start,end}_pfn() Date: Tue, 15 Jan 2013 16:24:48 -0800 Message-Id: <1358295894-24167-12-git-send-email-cody@linux.vnet.ibm.com> In-Reply-To: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> References: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> Sender: owner-linux-mm@kvack.org List-ID: To: Linux MM Cc: LKML , Andrew Morton , Catalin Marinas , Cody P Schafer , Cody P Schafer From: Cody P Schafer Instead of open coding, use the exsisting node_start_pfn() and node_end_pfn() helpers. Signed-off-by: Cody P Schafer --- mm/kmemleak.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/mm/kmemleak.c b/mm/kmemleak.c index 752a705..83dd5fb 100644 --- a/mm/kmemleak.c +++ b/mm/kmemleak.c @@ -1300,9 +1300,8 @@ static void kmemleak_scan(void) */ lock_memory_hotplug(); for_each_online_node(i) { - pg_data_t *pgdat = NODE_DATA(i); - unsigned long start_pfn = pgdat->node_start_pfn; - unsigned long end_pfn = start_pfn + pgdat->node_spanned_pages; + unsigned long start_pfn = node_start_pfn(i); + unsigned long end_pfn = node_end_pfn(i); unsigned long pfn; for (pfn = start_pfn; pfn < end_pfn; pfn++) { -- 1.8.0.3 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from psmtp.com (na3sys010amx129.postini.com [74.125.245.129]) by kanga.kvack.org (Postfix) with SMTP id 4E7006B0080 for ; Tue, 15 Jan 2013 19:26:17 -0500 (EST) Received: from /spool/local by e8.ny.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 15 Jan 2013 19:26:16 -0500 Received: from d01relay02.pok.ibm.com (d01relay02.pok.ibm.com [9.56.227.234]) by d01dlp02.pok.ibm.com (Postfix) with ESMTP id 909146E803F for ; Tue, 15 Jan 2013 19:25:58 -0500 (EST) Received: from d01av02.pok.ibm.com (d01av02.pok.ibm.com [9.56.224.216]) by d01relay02.pok.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id r0G0Pxo9307444 for ; Tue, 15 Jan 2013 19:25:59 -0500 Received: from d01av02.pok.ibm.com (loopback [127.0.0.1]) by d01av02.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id r0G0Pws5000971 for ; Tue, 15 Jan 2013 22:25:59 -0200 From: Cody P Schafer Subject: [PATCH 17/17] mm/compaction: use zone_end_pfn() Date: Tue, 15 Jan 2013 16:24:54 -0800 Message-Id: <1358295894-24167-18-git-send-email-cody@linux.vnet.ibm.com> In-Reply-To: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> References: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> Sender: owner-linux-mm@kvack.org List-ID: To: Linux MM Cc: LKML , Andrew Morton , Catalin Marinas , Cody P Schafer Switch to using zone_end_pfn from open coding. Signed-off-by: Cody P Schafer --- mm/compaction.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mm/compaction.c b/mm/compaction.c index 1b52528..ea66be3 100644 --- a/mm/compaction.c +++ b/mm/compaction.c @@ -85,7 +85,7 @@ static inline bool isolation_suitable(struct compact_control *cc, static void __reset_isolation_suitable(struct zone *zone) { unsigned long start_pfn = zone->zone_start_pfn; - unsigned long end_pfn = zone->zone_start_pfn + zone->spanned_pages; + unsigned long end_pfn = zone_end_pfn(zone); unsigned long pfn; zone->compact_cached_migrate_pfn = start_pfn; @@ -663,7 +663,7 @@ static void isolate_freepages(struct zone *zone, */ high_pfn = min(low_pfn, pfn); - z_end_pfn = zone->zone_start_pfn + zone->spanned_pages; + z_end_pfn = zone_end_pfn(zone); /* * Isolate free pages until enough are available to migrate the @@ -920,7 +920,7 @@ static int compact_zone(struct zone *zone, struct compact_control *cc) { int ret; unsigned long start_pfn = zone->zone_start_pfn; - unsigned long end_pfn = zone->zone_start_pfn + zone->spanned_pages; + unsigned long end_pfn = zone_end_pfn(zone); ret = compaction_suitable(zone, cc->order); switch (ret) { -- 1.8.0.3 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from psmtp.com (na3sys010amx125.postini.com [74.125.245.125]) by kanga.kvack.org (Postfix) with SMTP id 58D6F8D0003 for ; Tue, 15 Jan 2013 19:26:19 -0500 (EST) Received: from /spool/local by e7.ny.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 15 Jan 2013 19:26:18 -0500 Received: from d01relay07.pok.ibm.com (d01relay07.pok.ibm.com [9.56.227.147]) by d01dlp01.pok.ibm.com (Postfix) with ESMTP id 204CA38C804F for ; Tue, 15 Jan 2013 19:25:57 -0500 (EST) Received: from d01av02.pok.ibm.com (d01av02.pok.ibm.com [9.56.224.216]) by d01relay07.pok.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id r0G0Pulm65667232 for ; Tue, 15 Jan 2013 19:25:56 -0500 Received: from d01av02.pok.ibm.com (loopback [127.0.0.1]) by d01av02.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id r0G0PtPf000810 for ; Tue, 15 Jan 2013 22:25:56 -0200 From: Cody P Schafer Subject: [PATCH 15/17] mm/page_alloc: add informative debugging message in page_outside_zone_boundaries() Date: Tue, 15 Jan 2013 16:24:52 -0800 Message-Id: <1358295894-24167-16-git-send-email-cody@linux.vnet.ibm.com> In-Reply-To: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> References: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> Sender: owner-linux-mm@kvack.org List-ID: To: Linux MM Cc: LKML , Andrew Morton , Catalin Marinas , Cody P Schafer Add a debug message which prints when a page is found outside of the boundaries of the zone it should belong to. Format is: "page $pfn outside zone [ $start_pfn - $end_pfn ]" Signed-off-by: Cody P Schafer --- mm/page_alloc.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/mm/page_alloc.c b/mm/page_alloc.c index f8ed277..f1783cf 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -239,13 +239,20 @@ static int page_outside_zone_boundaries(struct zone *zone, struct page *page) int ret = 0; unsigned seq; unsigned long pfn = page_to_pfn(page); + unsigned long sp, start_pfn; do { seq = zone_span_seqbegin(zone); + start_pfn = zone->zone_start_pfn; + sp = zone->spanned_pages; if (!zone_spans_pfn(zone, pfn)) ret = 1; } while (zone_span_seqretry(zone, seq)); + if (ret) + pr_debug("page %lu outside zone [ %lu - %lu ]\n", + pfn, start_pfn, start_pfn + sp); + return ret; } -- 1.8.0.3 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from psmtp.com (na3sys010amx160.postini.com [74.125.245.160]) by kanga.kvack.org (Postfix) with SMTP id 4A18B6B0081 for ; Tue, 15 Jan 2013 19:26:28 -0500 (EST) Received: from /spool/local by e38.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 15 Jan 2013 17:26:27 -0700 Received: from d03relay01.boulder.ibm.com (d03relay01.boulder.ibm.com [9.17.195.226]) by d03dlp01.boulder.ibm.com (Postfix) with ESMTP id 614CCC4000F for ; Tue, 15 Jan 2013 17:25:23 -0700 (MST) Received: from d03av04.boulder.ibm.com (d03av04.boulder.ibm.com [9.17.195.170]) by d03relay01.boulder.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id r0G0PY7t249778 for ; Tue, 15 Jan 2013 17:25:34 -0700 Received: from d03av04.boulder.ibm.com (loopback [127.0.0.1]) by d03av04.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id r0G0PXWJ010900 for ; Tue, 15 Jan 2013 17:25:34 -0700 From: Cody P Schafer Subject: [PATCH 01/17] mm/compaction: rename var zone_end_pfn to avoid conflicts with new function Date: Tue, 15 Jan 2013 16:24:38 -0800 Message-Id: <1358295894-24167-2-git-send-email-cody@linux.vnet.ibm.com> In-Reply-To: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> References: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> Sender: owner-linux-mm@kvack.org List-ID: To: Linux MM Cc: LKML , Andrew Morton , Catalin Marinas , Cody P Schafer Patches that follow add a inline function zone_end_pfn(), which conflicts with the naming of a local variable in isolate_freepages(). Rename the variable so it does not conflict. Signed-off-by: Cody P Schafer --- mm/compaction.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mm/compaction.c b/mm/compaction.c index c62bd06..1b52528 100644 --- a/mm/compaction.c +++ b/mm/compaction.c @@ -644,7 +644,7 @@ static void isolate_freepages(struct zone *zone, struct compact_control *cc) { struct page *page; - unsigned long high_pfn, low_pfn, pfn, zone_end_pfn, end_pfn; + unsigned long high_pfn, low_pfn, pfn, z_end_pfn, end_pfn; int nr_freepages = cc->nr_freepages; struct list_head *freelist = &cc->freepages; @@ -663,7 +663,7 @@ static void isolate_freepages(struct zone *zone, */ high_pfn = min(low_pfn, pfn); - zone_end_pfn = zone->zone_start_pfn + zone->spanned_pages; + z_end_pfn = zone->zone_start_pfn + zone->spanned_pages; /* * Isolate free pages until enough are available to migrate the @@ -706,7 +706,7 @@ static void isolate_freepages(struct zone *zone, * only scans within a pageblock */ end_pfn = ALIGN(pfn + 1, pageblock_nr_pages); - end_pfn = min(end_pfn, zone_end_pfn); + end_pfn = min(end_pfn, z_end_pfn); isolated = isolate_freepages_block(cc, pfn, end_pfn, freelist, false); nr_freepages += isolated; -- 1.8.0.3 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from psmtp.com (na3sys010amx136.postini.com [74.125.245.136]) by kanga.kvack.org (Postfix) with SMTP id 61C3B6B0082 for ; Tue, 15 Jan 2013 19:26:34 -0500 (EST) Received: from /spool/local by e38.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 15 Jan 2013 17:26:33 -0700 Received: from d03relay05.boulder.ibm.com (d03relay05.boulder.ibm.com [9.17.195.107]) by d03dlp01.boulder.ibm.com (Postfix) with ESMTP id 82621C40006 for ; Tue, 15 Jan 2013 17:25:28 -0700 (MST) Received: from d03av03.boulder.ibm.com (d03av03.boulder.ibm.com [9.17.195.169]) by d03relay05.boulder.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id r0G0PcaY098120 for ; Tue, 15 Jan 2013 17:25:38 -0700 Received: from d03av03.boulder.ibm.com (loopback [127.0.0.1]) by d03av03.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id r0G0PcKS020414 for ; Tue, 15 Jan 2013 17:25:38 -0700 From: Cody P Schafer Subject: [PATCH 04/17] mm: add helper ensure_zone_is_initialized() Date: Tue, 15 Jan 2013 16:24:41 -0800 Message-Id: <1358295894-24167-5-git-send-email-cody@linux.vnet.ibm.com> In-Reply-To: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> References: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> Sender: owner-linux-mm@kvack.org List-ID: To: Linux MM Cc: LKML , Andrew Morton , Catalin Marinas , Cody P Schafer , Cody P Schafer From: Cody P Schafer ensure_zone_is_initialized() checks if a zone is in a empty & not initialized state (typically occuring after it is created in memory hotplugging), and, if so, calls init_currently_empty_zone() to initialize the zone. Signed-off-by: Cody P Schafer --- mm/memory_hotplug.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c index d04ed87..875bdfe 100644 --- a/mm/memory_hotplug.c +++ b/mm/memory_hotplug.c @@ -253,6 +253,17 @@ static void fix_zone_id(struct zone *zone, unsigned long start_pfn, set_page_links(pfn_to_page(pfn), zid, nid, pfn); } +/* Can fail with -ENOMEM from allocating a wait table with vmalloc() or + * alloc_bootmem_node_nopanic() */ +static int __ref ensure_zone_is_initialized(struct zone *zone, + unsigned long start_pfn, unsigned long num_pages) +{ + if (!zone_is_initialized(zone)) + return init_currently_empty_zone(zone, start_pfn, num_pages, + MEMMAP_HOTPLUG); + return 0; +} + static int __meminit move_pfn_range_left(struct zone *z1, struct zone *z2, unsigned long start_pfn, unsigned long end_pfn) { -- 1.8.0.3 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from psmtp.com (na3sys010amx206.postini.com [74.125.245.206]) by kanga.kvack.org (Postfix) with SMTP id EA1F46B006E for ; Tue, 15 Jan 2013 19:26:44 -0500 (EST) Received: from /spool/local by e38.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 15 Jan 2013 17:26:44 -0700 Received: from d03relay02.boulder.ibm.com (d03relay02.boulder.ibm.com [9.17.195.227]) by d03dlp03.boulder.ibm.com (Postfix) with ESMTP id 1460319D8072 for ; Tue, 15 Jan 2013 17:25:48 -0700 (MST) Received: from d03av01.boulder.ibm.com (d03av01.boulder.ibm.com [9.17.195.167]) by d03relay02.boulder.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id r0G0PlGC110060 for ; Tue, 15 Jan 2013 17:25:47 -0700 Received: from d03av01.boulder.ibm.com (loopback [127.0.0.1]) by d03av01.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id r0G0Plgs031531 for ; Tue, 15 Jan 2013 17:25:47 -0700 From: Cody P Schafer Subject: [PATCH 10/17] mm/vmstat: use zone_end_pfn() instead of opencoding Date: Tue, 15 Jan 2013 16:24:47 -0800 Message-Id: <1358295894-24167-11-git-send-email-cody@linux.vnet.ibm.com> In-Reply-To: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> References: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> Sender: owner-linux-mm@kvack.org List-ID: To: Linux MM Cc: LKML , Andrew Morton , Catalin Marinas , Cody P Schafer In vmstat, use zone_end_pfn() instead of an opencoded version. Signed-off-by: Cody P Schafer --- mm/vmstat.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mm/vmstat.c b/mm/vmstat.c index 9800306..ca99641 100644 --- a/mm/vmstat.c +++ b/mm/vmstat.c @@ -890,7 +890,7 @@ static void pagetypeinfo_showblockcount_print(struct seq_file *m, int mtype; unsigned long pfn; unsigned long start_pfn = zone->zone_start_pfn; - unsigned long end_pfn = start_pfn + zone->spanned_pages; + unsigned long end_pfn = zone_end_pfn(zone); unsigned long count[MIGRATE_TYPES] = { 0, }; for (pfn = start_pfn; pfn < end_pfn; pfn += pageblock_nr_pages) { -- 1.8.0.3 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from psmtp.com (na3sys010amx122.postini.com [74.125.245.122]) by kanga.kvack.org (Postfix) with SMTP id 1B8A96B0083 for ; Tue, 15 Jan 2013 19:26:45 -0500 (EST) Received: from /spool/local by e38.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 15 Jan 2013 17:26:44 -0700 Received: from d03relay03.boulder.ibm.com (d03relay03.boulder.ibm.com [9.17.195.228]) by d03dlp03.boulder.ibm.com (Postfix) with ESMTP id A50AA19D806C for ; Tue, 15 Jan 2013 17:25:48 -0700 (MST) Received: from d03av01.boulder.ibm.com (d03av01.boulder.ibm.com [9.17.195.167]) by d03relay03.boulder.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id r0G0Pl90219962 for ; Tue, 15 Jan 2013 17:25:48 -0700 Received: from d03av01.boulder.ibm.com (loopback [127.0.0.1]) by d03av01.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id r0G0PkxL031447 for ; Tue, 15 Jan 2013 17:25:47 -0700 From: Cody P Schafer Subject: [PATCH 09/17] mm/page_alloc: use zone_end_pfn() & zone_spans_pfn() Date: Tue, 15 Jan 2013 16:24:46 -0800 Message-Id: <1358295894-24167-10-git-send-email-cody@linux.vnet.ibm.com> In-Reply-To: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> References: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> Sender: owner-linux-mm@kvack.org List-ID: To: Linux MM Cc: LKML , Andrew Morton , Catalin Marinas , Cody P Schafer , Cody P Schafer From: Cody P Schafer Change several open coded zone_end_pfn()s and a zone_spans_pfn() in the page allocator to use the provided helper functions. Signed-off-by: Cody P Schafer --- mm/page_alloc.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/mm/page_alloc.c b/mm/page_alloc.c index c5d70ce..f8ed277 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -1272,7 +1272,7 @@ void mark_free_pages(struct zone *zone) spin_lock_irqsave(&zone->lock, flags); - max_zone_pfn = zone->zone_start_pfn + zone->spanned_pages; + max_zone_pfn = zone_end_pfn(zone); for (pfn = zone->zone_start_pfn; pfn < max_zone_pfn; pfn++) if (pfn_valid(pfn)) { struct page *page = pfn_to_page(pfn); @@ -3775,7 +3775,7 @@ static void setup_zone_migrate_reserve(struct zone *zone) * the block. */ start_pfn = zone->zone_start_pfn; - end_pfn = start_pfn + zone->spanned_pages; + end_pfn = zone_end_pfn(zone); start_pfn = roundup(start_pfn, pageblock_nr_pages); reserve = roundup(min_wmark_pages(zone), pageblock_nr_pages) >> pageblock_order; @@ -3889,7 +3889,7 @@ void __meminit memmap_init_zone(unsigned long size, int nid, unsigned long zone, * pfn out of zone. */ if ((z->zone_start_pfn <= pfn) - && (pfn < z->zone_start_pfn + z->spanned_pages) + && (pfn < zone_end_pfn(z)) && !(pfn & (pageblock_nr_pages - 1))) set_pageblock_migratetype(page, MIGRATE_MOVABLE); @@ -4617,7 +4617,7 @@ static void __init_refok alloc_node_mem_map(struct pglist_data *pgdat) * for the buddy allocator to function correctly. */ start = pgdat->node_start_pfn & ~(MAX_ORDER_NR_PAGES - 1); - end = pgdat->node_start_pfn + pgdat->node_spanned_pages; + end = pgdat_end_pfn(pgdat); end = ALIGN(end, MAX_ORDER_NR_PAGES); size = (end - start) * sizeof(struct page); map = alloc_remap(pgdat->node_id, size); @@ -5735,8 +5735,7 @@ bool is_pageblock_removable_nolock(struct page *page) zone = page_zone(page); pfn = page_to_pfn(page); - if (zone->zone_start_pfn > pfn || - zone->zone_start_pfn + zone->spanned_pages <= pfn) + if (!zone_spans_pfn(zone, pfn)) return false; return !has_unmovable_pages(zone, page, 0, true); -- 1.8.0.3 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from psmtp.com (na3sys010amx102.postini.com [74.125.245.102]) by kanga.kvack.org (Postfix) with SMTP id 447516B005D for ; Tue, 15 Jan 2013 19:26:58 -0500 (EST) Received: from /spool/local by e38.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 15 Jan 2013 17:26:57 -0700 Received: from d03relay05.boulder.ibm.com (d03relay05.boulder.ibm.com [9.17.195.107]) by d03dlp03.boulder.ibm.com (Postfix) with ESMTP id 8AE4D19D803F for ; Tue, 15 Jan 2013 17:25:57 -0700 (MST) Received: from d03av05.boulder.ibm.com (d03av05.boulder.ibm.com [9.17.195.85]) by d03relay05.boulder.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id r0G0PvX6027732 for ; Tue, 15 Jan 2013 17:25:57 -0700 Received: from d03av05.boulder.ibm.com (loopback [127.0.0.1]) by d03av05.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id r0G0Puc4012048 for ; Tue, 15 Jan 2013 17:25:57 -0700 From: Cody P Schafer Subject: [PATCH 16/17] mm/memory_hotplug: use zone_end_pfn() instead of open coding Date: Tue, 15 Jan 2013 16:24:53 -0800 Message-Id: <1358295894-24167-17-git-send-email-cody@linux.vnet.ibm.com> In-Reply-To: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> References: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> Sender: owner-linux-mm@kvack.org List-ID: To: Linux MM Cc: LKML , Andrew Morton , Catalin Marinas , Cody P Schafer Switch to using zone_end_pfn() in move_pfn_range_left() and move_pfn_range_right() instead of open coding the same. Signed-off-by: Cody P Schafer --- mm/memory_hotplug.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c index c6149a3..515b917 100644 --- a/mm/memory_hotplug.c +++ b/mm/memory_hotplug.c @@ -278,7 +278,7 @@ static int __meminit move_pfn_range_left(struct zone *z1, struct zone *z2, pgdat_resize_lock(z1->zone_pgdat, &flags); /* can't move pfns which are higher than @z2 */ - if (end_pfn > z2->zone_start_pfn + z2->spanned_pages) + if (end_pfn > zone_end_pfn(z2)) goto out_fail; /* the move out part mast at the left most of @z2 */ if (start_pfn > z2->zone_start_pfn) @@ -294,7 +294,7 @@ static int __meminit move_pfn_range_left(struct zone *z1, struct zone *z2, z1_start_pfn = start_pfn; resize_zone(z1, z1_start_pfn, end_pfn); - resize_zone(z2, end_pfn, z2->zone_start_pfn + z2->spanned_pages); + resize_zone(z2, end_pfn, zone_end_pfn(z2)); pgdat_resize_unlock(z1->zone_pgdat, &flags); @@ -323,15 +323,15 @@ static int __meminit move_pfn_range_right(struct zone *z1, struct zone *z2, if (z1->zone_start_pfn > start_pfn) goto out_fail; /* the move out part mast at the right most of @z1 */ - if (z1->zone_start_pfn + z1->spanned_pages > end_pfn) + if (zone_end_pfn(z1) > end_pfn) goto out_fail; /* must included/overlap */ - if (start_pfn >= z1->zone_start_pfn + z1->spanned_pages) + if (start_pfn >= zone_end_pfn(z1)) goto out_fail; /* use end_pfn for z2's end_pfn if z2 is empty */ if (z2->spanned_pages) - z2_end_pfn = z2->zone_start_pfn + z2->spanned_pages; + z2_end_pfn = zone_end_pfn(z2); else z2_end_pfn = end_pfn; -- 1.8.0.3 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from psmtp.com (na3sys010amx204.postini.com [74.125.245.204]) by kanga.kvack.org (Postfix) with SMTP id 5FCDC6B0072 for ; Tue, 15 Jan 2013 19:32:58 -0500 (EST) Received: from /spool/local by e35.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 15 Jan 2013 17:32:57 -0700 Received: from d03relay05.boulder.ibm.com (d03relay05.boulder.ibm.com [9.17.195.107]) by d03dlp03.boulder.ibm.com (Postfix) with ESMTP id 1BDDC19D806A for ; Tue, 15 Jan 2013 17:25:43 -0700 (MST) Received: from d03av02.boulder.ibm.com (d03av02.boulder.ibm.com [9.17.195.168]) by d03relay05.boulder.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id r0G0PfGe068814 for ; Tue, 15 Jan 2013 17:25:42 -0700 Received: from d03av02.boulder.ibm.com (loopback [127.0.0.1]) by d03av02.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id r0G0PfDI015548 for ; Tue, 15 Jan 2013 17:25:41 -0700 From: Cody P Schafer Subject: [PATCH 06/17] mmzone: add pgdat_{end_pfn,is_empty}() helpers & consolidate. Date: Tue, 15 Jan 2013 16:24:43 -0800 Message-Id: <1358295894-24167-7-git-send-email-cody@linux.vnet.ibm.com> In-Reply-To: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> References: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> Sender: owner-linux-mm@kvack.org List-ID: To: Linux MM Cc: LKML , Andrew Morton , Catalin Marinas , Cody P Schafer , Cody P Schafer From: Cody P Schafer Add pgdat_end_pfn() and pgdat_is_empty() helpers which match the similar zone_*() functions. Change node_end_pfn() to be a wrapper of pgdat_end_pfn(). Signed-off-by: Cody P Schafer --- include/linux/mmzone.h | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h index 696cb7c..d7abff0 100644 --- a/include/linux/mmzone.h +++ b/include/linux/mmzone.h @@ -772,11 +772,17 @@ typedef struct pglist_data { #define nid_page_nr(nid, pagenr) pgdat_page_nr(NODE_DATA(nid),(pagenr)) #define node_start_pfn(nid) (NODE_DATA(nid)->node_start_pfn) +#define node_end_pfn(nid) pgdat_end_pfn(NODE_DATA(nid)) -#define node_end_pfn(nid) ({\ - pg_data_t *__pgdat = NODE_DATA(nid);\ - __pgdat->node_start_pfn + __pgdat->node_spanned_pages;\ -}) +static inline unsigned long pgdat_end_pfn(pg_data_t *pgdat) +{ + return pgdat->node_start_pfn + pgdat->node_spanned_pages; +} + +static inline bool pgdat_is_empty(pg_data_t *pgdat) +{ + return !pgdat->node_start_pfn && !pgdat->node_spanned_pages; +} #include -- 1.8.0.3 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from psmtp.com (na3sys010amx186.postini.com [74.125.245.186]) by kanga.kvack.org (Postfix) with SMTP id ABDD86B005D for ; Tue, 15 Jan 2013 19:52:50 -0500 (EST) Received: from /spool/local by e32.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 15 Jan 2013 17:52:50 -0700 Received: from d03relay04.boulder.ibm.com (d03relay04.boulder.ibm.com [9.17.195.106]) by d03dlp02.boulder.ibm.com (Postfix) with ESMTP id A3FD63E4005E for ; Tue, 15 Jan 2013 17:25:32 -0700 (MST) Received: from d03av03.boulder.ibm.com (d03av03.boulder.ibm.com [9.17.195.169]) by d03relay04.boulder.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id r0G0PcVs326976 for ; Tue, 15 Jan 2013 17:25:38 -0700 Received: from d03av03.boulder.ibm.com (loopback [127.0.0.1]) by d03av03.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id r0G0PanY020348 for ; Tue, 15 Jan 2013 17:25:38 -0700 From: Cody P Schafer Subject: [PATCH 03/17] mm/page_alloc: add a VM_BUG in __free_one_page() if the zone is uninitialized. Date: Tue, 15 Jan 2013 16:24:40 -0800 Message-Id: <1358295894-24167-4-git-send-email-cody@linux.vnet.ibm.com> In-Reply-To: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> References: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> Sender: owner-linux-mm@kvack.org List-ID: To: Linux MM Cc: LKML , Andrew Morton , Catalin Marinas , Cody P Schafer , Cody P Schafer From: Cody P Schafer Freeing pages to uninitialized zones is not handled by __free_one_page(), and should never happen when the code is correct. Ran into this while writing some code that dynamically onlines extra zones. Signed-off-by: Cody P Schafer --- mm/page_alloc.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mm/page_alloc.c b/mm/page_alloc.c index df2022f..da5a5ec 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -532,6 +532,8 @@ static inline void __free_one_page(struct page *page, unsigned long uninitialized_var(buddy_idx); struct page *buddy; + VM_BUG_ON(!zone_is_initialized(zone)); + if (unlikely(PageCompound(page))) if (unlikely(destroy_compound_page(page, order))) return; -- 1.8.0.3 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from psmtp.com (na3sys010amx106.postini.com [74.125.245.106]) by kanga.kvack.org (Postfix) with SMTP id A29556B005D for ; Tue, 15 Jan 2013 20:08:28 -0500 (EST) Received: from /spool/local by e33.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 15 Jan 2013 18:08:27 -0700 Received: from d03relay05.boulder.ibm.com (d03relay05.boulder.ibm.com [9.17.195.107]) by d03dlp02.boulder.ibm.com (Postfix) with ESMTP id B30993E4003E for ; Tue, 15 Jan 2013 18:08:19 -0700 (MST) Received: from d03av02.boulder.ibm.com (d03av02.boulder.ibm.com [9.17.195.168]) by d03relay05.boulder.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id r0G18Mjg088816 for ; Tue, 15 Jan 2013 18:08:22 -0700 Received: from d03av02.boulder.ibm.com (loopback [127.0.0.1]) by d03av02.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id r0G18L7j001538 for ; Tue, 15 Jan 2013 18:08:21 -0700 Message-ID: <50F5FD7E.4080901@linux.vnet.ibm.com> Date: Tue, 15 Jan 2013 17:08:14 -0800 From: Dave Hansen MIME-Version: 1.0 Subject: Re: [PATCH 01/17] mm/compaction: rename var zone_end_pfn to avoid conflicts with new function References: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> <1358295894-24167-2-git-send-email-cody@linux.vnet.ibm.com> In-Reply-To: <1358295894-24167-2-git-send-email-cody@linux.vnet.ibm.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Sender: owner-linux-mm@kvack.org List-ID: To: Cody P Schafer Cc: Linux MM , LKML , Andrew Morton , Catalin Marinas On 01/15/2013 04:24 PM, Cody P Schafer wrote: > Patches that follow add a inline function zone_end_pfn(), which > conflicts with the naming of a local variable in isolate_freepages(). > > Rename the variable so it does not conflict. It's probably worth a note here that you _will_ be migrating this use over to the new function anyway. > @@ -706,7 +706,7 @@ static void isolate_freepages(struct zone *zone, > * only scans within a pageblock > */ > end_pfn = ALIGN(pfn + 1, pageblock_nr_pages); > - end_pfn = min(end_pfn, zone_end_pfn); > + end_pfn = min(end_pfn, z_end_pfn); Is there any reason not to just completely get rid of z_end_pfn (in the later patches after you introduce zone_end_pfn() of course): > + end_pfn = min(end_pfn, zone_end_pfn(zone)); I wouldn't be completely opposed to you just introducing zone_end_pfn() and doing all the replacements in a single patch. It would make it somewhat easier to review, and it would also save the juggling you have to do with this one. -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from psmtp.com (na3sys010amx164.postini.com [74.125.245.164]) by kanga.kvack.org (Postfix) with SMTP id 5E21F6B0062 for ; Tue, 15 Jan 2013 20:19:20 -0500 (EST) Received: from /spool/local by e7.ny.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 15 Jan 2013 20:19:19 -0500 Received: from d01relay05.pok.ibm.com (d01relay05.pok.ibm.com [9.56.227.237]) by d01dlp02.pok.ibm.com (Postfix) with ESMTP id E15D26E8048 for ; Tue, 15 Jan 2013 20:19:13 -0500 (EST) Received: from d01av02.pok.ibm.com (d01av02.pok.ibm.com [9.56.224.216]) by d01relay05.pok.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id r0G1JEZa339978 for ; Tue, 15 Jan 2013 20:19:14 -0500 Received: from d01av02.pok.ibm.com (loopback [127.0.0.1]) by d01av02.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id r0G1JEu5004237 for ; Tue, 15 Jan 2013 23:19:14 -0200 Message-ID: <50F6000A.3010601@linux.vnet.ibm.com> Date: Tue, 15 Jan 2013 17:19:06 -0800 From: Dave Hansen MIME-Version: 1.0 Subject: Re: [PATCH 02/17] mmzone: add various zone_*() helper functions. References: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> <1358295894-24167-3-git-send-email-cody@linux.vnet.ibm.com> In-Reply-To: <1358295894-24167-3-git-send-email-cody@linux.vnet.ibm.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Sender: owner-linux-mm@kvack.org List-ID: To: Cody P Schafer Cc: Linux MM , LKML , Andrew Morton , Catalin Marinas , Cody P Schafer On 01/15/2013 04:24 PM, Cody P Schafer wrote: > +static inline bool zone_spans_pfn(const struct zone *zone, unsigned long pfn) > +{ > + return zone->zone_start_pfn <= pfn && pfn < zone_end_pfn(zone); > +} This needs some parenthesis, just for readability. There's also no crime in breaking it up to be multi-line if you want. > +static inline bool zone_is_initialized(struct zone *zone) > +{ > + return !!zone->wait_table; > +} > + > +static inline bool zone_is_empty(struct zone *zone) > +{ > + return zone->spanned_pages == 0; > +} -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from psmtp.com (na3sys010amx146.postini.com [74.125.245.146]) by kanga.kvack.org (Postfix) with SMTP id 964B46B0062 for ; Tue, 15 Jan 2013 20:21:08 -0500 (EST) Received: from /spool/local by e39.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 15 Jan 2013 18:21:08 -0700 Received: from d03relay04.boulder.ibm.com (d03relay04.boulder.ibm.com [9.17.195.106]) by d03dlp02.boulder.ibm.com (Postfix) with ESMTP id 5EF903E4004E for ; Tue, 15 Jan 2013 18:20:29 -0700 (MST) Received: from d03av03.boulder.ibm.com (d03av03.boulder.ibm.com [9.17.195.169]) by d03relay04.boulder.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id r0G1KZcP250970 for ; Tue, 15 Jan 2013 18:20:35 -0700 Received: from d03av03.boulder.ibm.com (loopback [127.0.0.1]) by d03av03.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id r0G1KYZQ027402 for ; Tue, 15 Jan 2013 18:20:34 -0700 Message-ID: <50F6005B.1010900@linux.vnet.ibm.com> Date: Tue, 15 Jan 2013 17:20:27 -0800 From: Dave Hansen MIME-Version: 1.0 Subject: Re: [PATCH 02/17] mmzone: add various zone_*() helper functions. References: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> <1358295894-24167-3-git-send-email-cody@linux.vnet.ibm.com> In-Reply-To: <1358295894-24167-3-git-send-email-cody@linux.vnet.ibm.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Sender: owner-linux-mm@kvack.org List-ID: To: Cody P Schafer Cc: Linux MM , LKML , Andrew Morton , Catalin Marinas , Cody P Schafer On 01/15/2013 04:24 PM, Cody P Schafer wrote: > +static inline bool zone_is_empty(struct zone *zone) > +{ > + return zone->spanned_pages == 0; > +} Why did you choose spanned_pages for this? -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from psmtp.com (na3sys010amx199.postini.com [74.125.245.199]) by kanga.kvack.org (Postfix) with SMTP id 780D46B0062 for ; Tue, 15 Jan 2013 20:27:31 -0500 (EST) Received: from /spool/local by e7.ny.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 15 Jan 2013 20:27:30 -0500 Received: from d01relay07.pok.ibm.com (d01relay07.pok.ibm.com [9.56.227.147]) by d01dlp03.pok.ibm.com (Postfix) with ESMTP id 4906EC90041 for ; Tue, 15 Jan 2013 20:27:28 -0500 (EST) Received: from d01av01.pok.ibm.com (d01av01.pok.ibm.com [9.56.224.215]) by d01relay07.pok.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id r0G1RRtu43778062 for ; Tue, 15 Jan 2013 20:27:27 -0500 Received: from d01av01.pok.ibm.com (loopback [127.0.0.1]) by d01av01.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id r0G1RQuX010808 for ; Tue, 15 Jan 2013 20:27:27 -0500 Message-ID: <50F601F7.3010000@linux.vnet.ibm.com> Date: Tue, 15 Jan 2013 17:27:19 -0800 From: Dave Hansen MIME-Version: 1.0 Subject: Re: [PATCH 14/17] mm/memory_hotplug: factor out zone+pgdat growth. References: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> <1358295894-24167-15-git-send-email-cody@linux.vnet.ibm.com> In-Reply-To: <1358295894-24167-15-git-send-email-cody@linux.vnet.ibm.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Sender: owner-linux-mm@kvack.org List-ID: To: Cody P Schafer Cc: Linux MM , LKML , Andrew Morton , Catalin Marinas On 01/15/2013 04:24 PM, Cody P Schafer wrote: > Create a new function grow_pgdat_and_zone() which handles locking + > growth of a zone & the pgdat which it is associated with. Why is this being factored out? Will it be reused somewhere? -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from psmtp.com (na3sys010amx189.postini.com [74.125.245.189]) by kanga.kvack.org (Postfix) with SMTP id 5B12F6B0062 for ; Tue, 15 Jan 2013 20:34:47 -0500 (EST) Received: from /spool/local by e38.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 15 Jan 2013 18:34:46 -0700 Received: from d03relay04.boulder.ibm.com (d03relay04.boulder.ibm.com [9.17.195.106]) by d03dlp02.boulder.ibm.com (Postfix) with ESMTP id 765E73E40039 for ; Tue, 15 Jan 2013 18:34:38 -0700 (MST) Received: from d03av01.boulder.ibm.com (d03av01.boulder.ibm.com [9.17.195.167]) by d03relay04.boulder.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id r0G1Yi4M300684 for ; Tue, 15 Jan 2013 18:34:44 -0700 Received: from d03av01.boulder.ibm.com (loopback [127.0.0.1]) by d03av01.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id r0G1YhxW028801 for ; Tue, 15 Jan 2013 18:34:44 -0700 Message-ID: <50F603AC.90005@linux.vnet.ibm.com> Date: Tue, 15 Jan 2013 17:34:36 -0800 From: Dave Hansen MIME-Version: 1.0 Subject: Re: [PATCH 15/17] mm/page_alloc: add informative debugging message in page_outside_zone_boundaries() References: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> <1358295894-24167-16-git-send-email-cody@linux.vnet.ibm.com> In-Reply-To: <1358295894-24167-16-git-send-email-cody@linux.vnet.ibm.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Sender: owner-linux-mm@kvack.org List-ID: To: Cody P Schafer Cc: Linux MM , LKML , Andrew Morton , Catalin Marinas On 01/15/2013 04:24 PM, Cody P Schafer wrote: > Add a debug message which prints when a page is found outside of the > boundaries of the zone it should belong to. Format is: > "page $pfn outside zone [ $start_pfn - $end_pfn ]" I'd make sure to say 'pfn' here, just to make sure that it's explicitly stated to be a pfn and not a 'struct page' > diff --git a/mm/page_alloc.c b/mm/page_alloc.c > index f8ed277..f1783cf 100644 > --- a/mm/page_alloc.c > +++ b/mm/page_alloc.c > @@ -239,13 +239,20 @@ static int page_outside_zone_boundaries(struct zone *zone, struct page *page) > int ret = 0; > unsigned seq; > unsigned long pfn = page_to_pfn(page); > + unsigned long sp, start_pfn; I think calling this zone_spanned is probably just fine. Shouldn't take up too much room. > do { > seq = zone_span_seqbegin(zone); > + start_pfn = zone->zone_start_pfn; > + sp = zone->spanned_pages; > if (!zone_spans_pfn(zone, pfn)) > ret = 1; > } while (zone_span_seqretry(zone, seq)); > > + if (ret) > + pr_debug("page %lu outside zone [ %lu - %lu ]\n", > + pfn, start_pfn, start_pfn + sp); > + > return ret; > } Is there a way we could also fit in something to disambiguate the zones? I can imagine a scenario where two zones might have identical start/spanned_pages, so they might be impossible to tell apart in a message like this. Maybe we could add the NUMA node or the DMA/Normal/Highmem text? -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from psmtp.com (na3sys010amx204.postini.com [74.125.245.204]) by kanga.kvack.org (Postfix) with SMTP id CB9A76B0062 for ; Tue, 15 Jan 2013 20:39:43 -0500 (EST) Received: from /spool/local by e8.ny.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 15 Jan 2013 20:39:42 -0500 Received: from d01relay01.pok.ibm.com (d01relay01.pok.ibm.com [9.56.227.233]) by d01dlp01.pok.ibm.com (Postfix) with ESMTP id 0991038C803F for ; Tue, 15 Jan 2013 20:39:41 -0500 (EST) Received: from d01av03.pok.ibm.com (d01av03.pok.ibm.com [9.56.224.217]) by d01relay01.pok.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id r0G1deVp300672 for ; Tue, 15 Jan 2013 20:39:40 -0500 Received: from d01av03.pok.ibm.com (loopback [127.0.0.1]) by d01av03.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id r0G1deAB023587 for ; Tue, 15 Jan 2013 23:39:40 -0200 Message-ID: <50F604D4.407@linux.vnet.ibm.com> Date: Tue, 15 Jan 2013 17:39:32 -0800 From: Dave Hansen MIME-Version: 1.0 Subject: Re: [PATCH 17/17] mm/compaction: use zone_end_pfn() References: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> <1358295894-24167-18-git-send-email-cody@linux.vnet.ibm.com> In-Reply-To: <1358295894-24167-18-git-send-email-cody@linux.vnet.ibm.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Sender: owner-linux-mm@kvack.org List-ID: To: Cody P Schafer Cc: Linux MM , LKML , Andrew Morton , Catalin Marinas On 01/15/2013 04:24 PM, Cody P Schafer wrote: > diff --git a/mm/compaction.c b/mm/compaction.c > index 1b52528..ea66be3 100644 > --- a/mm/compaction.c > +++ b/mm/compaction.c > @@ -85,7 +85,7 @@ static inline bool isolation_suitable(struct compact_control *cc, > static void __reset_isolation_suitable(struct zone *zone) > { > unsigned long start_pfn = zone->zone_start_pfn; > - unsigned long end_pfn = zone->zone_start_pfn + zone->spanned_pages; > + unsigned long end_pfn = zone_end_pfn(zone); > unsigned long pfn; > > zone->compact_cached_migrate_pfn = start_pfn; > @@ -663,7 +663,7 @@ static void isolate_freepages(struct zone *zone, > */ > high_pfn = min(low_pfn, pfn); > > - z_end_pfn = zone->zone_start_pfn + zone->spanned_pages; > + z_end_pfn = zone_end_pfn(zone); > > /* > * Isolate free pages until enough are available to migrate the > @@ -920,7 +920,7 @@ static int compact_zone(struct zone *zone, struct compact_control *cc) > { > int ret; > unsigned long start_pfn = zone->zone_start_pfn; > - unsigned long end_pfn = zone->zone_start_pfn + zone->spanned_pages; > + unsigned long end_pfn = zone_end_pfn(zone); > > ret = compaction_suitable(zone, cc->order); > switch (ret) { I do think theses are a _wee_ bit _too_ broken out. In this case, it's highly beneficial to just be able to look in the same email to make sure that, "yeah, zone_end_pfn() is the same as the code that it replaces". The fact that it was defined 15 patches ago makes it a bit harder to review. It's much nicer to review if there's _one_ patch that does the "define this new function and do all of the replacements". Anyway, the series looks good. Feel free to add my: Reviewed-by: Dave Hansen -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932632Ab3APAZZ (ORCPT ); Tue, 15 Jan 2013 19:25:25 -0500 Received: from e9.ny.us.ibm.com ([32.97.182.139]:59487 "EHLO e9.ny.us.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757872Ab3APAZT (ORCPT ); Tue, 15 Jan 2013 19:25:19 -0500 From: Cody P Schafer To: Linux MM Cc: LKML , Andrew Morton , Catalin Marinas Subject: [PATCH 00/17] mm: zone & pgdat accessors plus some cleanup Date: Tue, 15 Jan 2013 16:24:37 -0800 Message-Id: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> X-Mailer: git-send-email 1.8.0.3 X-Content-Scanned: Fidelis XPS MAILER x-cbid: 13011600-7182-0000-0000-000004762DEB Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Summaries: 01 - removes the use of zone_end_pfn as a local var name. 02 - adds zone_end_pfn(), zone_is_initialized(), zone_is_empty() and zone_spans_pfn() 03 - adds a VM_BUG using zone_is_initialized() in __free_one_page() 04 - add ensure_zone_is_initialized() (for memory_hotplug) 05 - use the above addition. 06 - add pgdat_end_pfn() and pgdat_is_empty() 07,08,09,10,11,12,16,17 - use the new helpers 13 - avoid repeating checks for section in page flags by adding a define. 14 - memory hotplug: factor out zone+pgdat growth. 15 - add debugging message to VM_BUG check. As a general concern: spanned_pages & start_pfn (in pgdat & zone) are supposed to be locked (via a seqlock) when read (due to changes to them via memory_hotplug), but very few (only 1?) of their users appear to actually lock them. -- include/linux/mm.h | 8 ++++-- include/linux/mmzone.h | 34 ++++++++++++++++++++++--- mm/compaction.c | 10 ++++---- mm/kmemleak.c | 5 ++-- mm/memory_hotplug.c | 68 ++++++++++++++++++++++++++++---------------------- mm/page_alloc.c | 31 +++++++++++++---------- mm/vmstat.c | 2 +- 7 files changed, 100 insertions(+), 58 deletions(-) From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758202Ab3APAZq (ORCPT ); Tue, 15 Jan 2013 19:25:46 -0500 Received: from e39.co.us.ibm.com ([32.97.110.160]:39000 "EHLO e39.co.us.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1758181Ab3APAZn (ORCPT ); Tue, 15 Jan 2013 19:25:43 -0500 From: Cody P Schafer To: Linux MM Cc: LKML , Andrew Morton , Catalin Marinas , Cody P Schafer Subject: [PATCH 01/17] mm/compaction: rename var zone_end_pfn to avoid conflicts with new function Date: Tue, 15 Jan 2013 16:24:38 -0800 Message-Id: <1358295894-24167-2-git-send-email-cody@linux.vnet.ibm.com> X-Mailer: git-send-email 1.8.0.3 In-Reply-To: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> References: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> X-Content-Scanned: Fidelis XPS MAILER x-cbid: 13011600-3620-0000-0000-000000E82E8A Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Patches that follow add a inline function zone_end_pfn(), which conflicts with the naming of a local variable in isolate_freepages(). Rename the variable so it does not conflict. Signed-off-by: Cody P Schafer --- mm/compaction.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mm/compaction.c b/mm/compaction.c index c62bd06..1b52528 100644 --- a/mm/compaction.c +++ b/mm/compaction.c @@ -644,7 +644,7 @@ static void isolate_freepages(struct zone *zone, struct compact_control *cc) { struct page *page; - unsigned long high_pfn, low_pfn, pfn, zone_end_pfn, end_pfn; + unsigned long high_pfn, low_pfn, pfn, z_end_pfn, end_pfn; int nr_freepages = cc->nr_freepages; struct list_head *freelist = &cc->freepages; @@ -663,7 +663,7 @@ static void isolate_freepages(struct zone *zone, */ high_pfn = min(low_pfn, pfn); - zone_end_pfn = zone->zone_start_pfn + zone->spanned_pages; + z_end_pfn = zone->zone_start_pfn + zone->spanned_pages; /* * Isolate free pages until enough are available to migrate the @@ -706,7 +706,7 @@ static void isolate_freepages(struct zone *zone, * only scans within a pageblock */ end_pfn = ALIGN(pfn + 1, pageblock_nr_pages); - end_pfn = min(end_pfn, zone_end_pfn); + end_pfn = min(end_pfn, z_end_pfn); isolated = isolate_freepages_block(cc, pfn, end_pfn, freelist, false); nr_freepages += isolated; -- 1.8.0.3 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758233Ab3APAZu (ORCPT ); Tue, 15 Jan 2013 19:25:50 -0500 Received: from e9.ny.us.ibm.com ([32.97.182.139]:59863 "EHLO e9.ny.us.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1758181Ab3APAZr (ORCPT ); Tue, 15 Jan 2013 19:25:47 -0500 From: Cody P Schafer To: Linux MM Cc: LKML , Andrew Morton , Catalin Marinas , Cody P Schafer Subject: [PATCH 05/17] mm/memory_hotplug: use ensure_zone_is_initialized() Date: Tue, 15 Jan 2013 16:24:42 -0800 Message-Id: <1358295894-24167-6-git-send-email-cody@linux.vnet.ibm.com> X-Mailer: git-send-email 1.8.0.3 In-Reply-To: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> References: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> X-Content-Scanned: Fidelis XPS MAILER x-cbid: 13011600-7182-0000-0000-000004762EE1 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Remove open coding of ensure_zone_is_initialzied(). Signed-off-by: Cody P Schafer --- mm/memory_hotplug.c | 29 ++++++++++------------------- 1 file changed, 10 insertions(+), 19 deletions(-) diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c index 875bdfe..8e352fe 100644 --- a/mm/memory_hotplug.c +++ b/mm/memory_hotplug.c @@ -271,12 +271,9 @@ static int __meminit move_pfn_range_left(struct zone *z1, struct zone *z2, unsigned long flags; unsigned long z1_start_pfn; - if (!z1->wait_table) { - ret = init_currently_empty_zone(z1, start_pfn, - end_pfn - start_pfn, MEMMAP_HOTPLUG); - if (ret) - return ret; - } + ret = ensure_zone_is_initialized(z1, start_pfn, end_pfn - start_pfn); + if (ret) + return ret; pgdat_resize_lock(z1->zone_pgdat, &flags); @@ -316,12 +313,9 @@ static int __meminit move_pfn_range_right(struct zone *z1, struct zone *z2, unsigned long flags; unsigned long z2_end_pfn; - if (!z2->wait_table) { - ret = init_currently_empty_zone(z2, start_pfn, - end_pfn - start_pfn, MEMMAP_HOTPLUG); - if (ret) - return ret; - } + ret = ensure_zone_is_initialized(z2, start_pfn, end_pfn - start_pfn) + if (ret) + return ret; pgdat_resize_lock(z1->zone_pgdat, &flags); @@ -374,16 +368,13 @@ static int __meminit __add_zone(struct zone *zone, unsigned long phys_start_pfn) int nid = pgdat->node_id; int zone_type; unsigned long flags; + int ret; zone_type = zone - pgdat->node_zones; - if (!zone->wait_table) { - int ret; + ret = ensure_zone_is_initialized(zone, phys_start_pfn, nr_pages); + if (ret) + return ret; - ret = init_currently_empty_zone(zone, phys_start_pfn, - nr_pages, MEMMAP_HOTPLUG); - if (ret) - return ret; - } pgdat_resize_lock(zone->zone_pgdat, &flags); grow_zone_span(zone, phys_start_pfn, phys_start_pfn + nr_pages); grow_pgdat_span(zone->zone_pgdat, phys_start_pfn, -- 1.8.0.3 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758281Ab3APAZ6 (ORCPT ); Tue, 15 Jan 2013 19:25:58 -0500 Received: from e9.ny.us.ibm.com ([32.97.182.139]:59923 "EHLO e9.ny.us.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1758248Ab3APAZz (ORCPT ); Tue, 15 Jan 2013 19:25:55 -0500 From: Cody P Schafer To: Linux MM Cc: LKML , Andrew Morton , Catalin Marinas , Cody P Schafer Subject: [PATCH 13/17] mm: add SECTION_IN_PAGE_FLAGS Date: Tue, 15 Jan 2013 16:24:50 -0800 Message-Id: <1358295894-24167-14-git-send-email-cody@linux.vnet.ibm.com> X-Mailer: git-send-email 1.8.0.3 In-Reply-To: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> References: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> X-Content-Scanned: Fidelis XPS MAILER x-cbid: 13011600-7182-0000-0000-000004762F15 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Instead of directly utilizing a combination of config options to determine this, add a macro to specifically address it. Signed-off-by: Cody P Schafer --- include/linux/mm.h | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/include/linux/mm.h b/include/linux/mm.h index 66e2f7c..ef69564 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -625,6 +625,10 @@ static inline pte_t maybe_mkwrite(pte_t pte, struct vm_area_struct *vma) #define NODE_NOT_IN_PAGE_FLAGS #endif +#if defined(CONFIG_SPARSEMEM) && !defined(CONFIG_SPARSEMEM_VMEMMAP) +#define SECTION_IN_PAGE_FLAGS +#endif + /* * Define the bit shifts to access each section. For non-existent * sections we define the shift as 0; that plus a 0 mask ensures @@ -727,7 +731,7 @@ static inline struct zone *page_zone(const struct page *page) return &NODE_DATA(page_to_nid(page))->node_zones[page_zonenum(page)]; } -#if defined(CONFIG_SPARSEMEM) && !defined(CONFIG_SPARSEMEM_VMEMMAP) +#ifdef SECTION_IN_PAGE_FLAGS static inline void set_page_section(struct page *page, unsigned long section) { page->flags &= ~(SECTIONS_MASK << SECTIONS_PGSHIFT); @@ -757,7 +761,7 @@ static inline void set_page_links(struct page *page, enum zone_type zone, { set_page_zone(page, zone); set_page_node(page, node); -#if defined(CONFIG_SPARSEMEM) && !defined(CONFIG_SPARSEMEM_VMEMMAP) +#ifdef SECTION_IN_PAGE_FLAGS set_page_section(page, pfn_to_section_nr(pfn)); #endif } -- 1.8.0.3 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758255Ab3APAZz (ORCPT ); Tue, 15 Jan 2013 19:25:55 -0500 Received: from e9.ny.us.ibm.com ([32.97.182.139]:59906 "EHLO e9.ny.us.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1758181Ab3APAZx (ORCPT ); Tue, 15 Jan 2013 19:25:53 -0500 From: Cody P Schafer To: Linux MM Cc: LKML , Andrew Morton , Catalin Marinas , Cody P Schafer Subject: [PATCH 10/17] mm/vmstat: use zone_end_pfn() instead of opencoding Date: Tue, 15 Jan 2013 16:24:47 -0800 Message-Id: <1358295894-24167-11-git-send-email-cody@linux.vnet.ibm.com> X-Mailer: git-send-email 1.8.0.3 In-Reply-To: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> References: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> X-Content-Scanned: Fidelis XPS MAILER x-cbid: 13011600-7182-0000-0000-000004762EF8 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org In vmstat, use zone_end_pfn() instead of an opencoded version. Signed-off-by: Cody P Schafer --- mm/vmstat.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mm/vmstat.c b/mm/vmstat.c index 9800306..ca99641 100644 --- a/mm/vmstat.c +++ b/mm/vmstat.c @@ -890,7 +890,7 @@ static void pagetypeinfo_showblockcount_print(struct seq_file *m, int mtype; unsigned long pfn; unsigned long start_pfn = zone->zone_start_pfn; - unsigned long end_pfn = start_pfn + zone->spanned_pages; + unsigned long end_pfn = zone_end_pfn(zone); unsigned long count[MIGRATE_TYPES] = { 0, }; for (pfn = start_pfn; pfn < end_pfn; pfn += pageblock_nr_pages) { -- 1.8.0.3 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758323Ab3APA0G (ORCPT ); Tue, 15 Jan 2013 19:26:06 -0500 Received: from e9.ny.us.ibm.com ([32.97.182.139]:59996 "EHLO e9.ny.us.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1758291Ab3APA0D (ORCPT ); Tue, 15 Jan 2013 19:26:03 -0500 From: Cody P Schafer To: Linux MM Cc: LKML , Andrew Morton , Catalin Marinas , Cody P Schafer Subject: [PATCH 17/17] mm/compaction: use zone_end_pfn() Date: Tue, 15 Jan 2013 16:24:54 -0800 Message-Id: <1358295894-24167-18-git-send-email-cody@linux.vnet.ibm.com> X-Mailer: git-send-email 1.8.0.3 In-Reply-To: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> References: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> X-Content-Scanned: Fidelis XPS MAILER x-cbid: 13011600-7182-0000-0000-000004762F2E Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Switch to using zone_end_pfn from open coding. Signed-off-by: Cody P Schafer --- mm/compaction.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mm/compaction.c b/mm/compaction.c index 1b52528..ea66be3 100644 --- a/mm/compaction.c +++ b/mm/compaction.c @@ -85,7 +85,7 @@ static inline bool isolation_suitable(struct compact_control *cc, static void __reset_isolation_suitable(struct zone *zone) { unsigned long start_pfn = zone->zone_start_pfn; - unsigned long end_pfn = zone->zone_start_pfn + zone->spanned_pages; + unsigned long end_pfn = zone_end_pfn(zone); unsigned long pfn; zone->compact_cached_migrate_pfn = start_pfn; @@ -663,7 +663,7 @@ static void isolate_freepages(struct zone *zone, */ high_pfn = min(low_pfn, pfn); - z_end_pfn = zone->zone_start_pfn + zone->spanned_pages; + z_end_pfn = zone_end_pfn(zone); /* * Isolate free pages until enough are available to migrate the @@ -920,7 +920,7 @@ static int compact_zone(struct zone *zone, struct compact_control *cc) { int ret; unsigned long start_pfn = zone->zone_start_pfn; - unsigned long end_pfn = zone->zone_start_pfn + zone->spanned_pages; + unsigned long end_pfn = zone_end_pfn(zone); ret = compaction_suitable(zone, cc->order); switch (ret) { -- 1.8.0.3 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758257Ab3APA0M (ORCPT ); Tue, 15 Jan 2013 19:26:12 -0500 Received: from e7.ny.us.ibm.com ([32.97.182.137]:53843 "EHLO e7.ny.us.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1758179Ab3APA0I (ORCPT ); Tue, 15 Jan 2013 19:26:08 -0500 From: Cody P Schafer To: Linux MM Cc: LKML , Andrew Morton , Catalin Marinas , Cody P Schafer , Cody P Schafer Subject: [PATCH 11/17] mm/kmemleak: use node_{start,end}_pfn() Date: Tue, 15 Jan 2013 16:24:48 -0800 Message-Id: <1358295894-24167-12-git-send-email-cody@linux.vnet.ibm.com> X-Mailer: git-send-email 1.8.0.3 In-Reply-To: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> References: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> X-Content-Scanned: Fidelis XPS MAILER x-cbid: 13011600-5806-0000-0000-00001E4CE7A1 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Cody P Schafer Instead of open coding, use the exsisting node_start_pfn() and node_end_pfn() helpers. Signed-off-by: Cody P Schafer --- mm/kmemleak.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/mm/kmemleak.c b/mm/kmemleak.c index 752a705..83dd5fb 100644 --- a/mm/kmemleak.c +++ b/mm/kmemleak.c @@ -1300,9 +1300,8 @@ static void kmemleak_scan(void) */ lock_memory_hotplug(); for_each_online_node(i) { - pg_data_t *pgdat = NODE_DATA(i); - unsigned long start_pfn = pgdat->node_start_pfn; - unsigned long end_pfn = start_pfn + pgdat->node_spanned_pages; + unsigned long start_pfn = node_start_pfn(i); + unsigned long end_pfn = node_end_pfn(i); unsigned long pfn; for (pfn = start_pfn; pfn < end_pfn; pfn++) { -- 1.8.0.3 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932213Ab3APA0X (ORCPT ); Tue, 15 Jan 2013 19:26:23 -0500 Received: from e7.ny.us.ibm.com ([32.97.182.137]:53881 "EHLO e7.ny.us.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1758283Ab3APA0T (ORCPT ); Tue, 15 Jan 2013 19:26:19 -0500 From: Cody P Schafer To: Linux MM Cc: LKML , Andrew Morton , Catalin Marinas , Cody P Schafer Subject: [PATCH 15/17] mm/page_alloc: add informative debugging message in page_outside_zone_boundaries() Date: Tue, 15 Jan 2013 16:24:52 -0800 Message-Id: <1358295894-24167-16-git-send-email-cody@linux.vnet.ibm.com> X-Mailer: git-send-email 1.8.0.3 In-Reply-To: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> References: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> X-Content-Scanned: Fidelis XPS MAILER x-cbid: 13011600-5806-0000-0000-00001E4CE7C3 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Add a debug message which prints when a page is found outside of the boundaries of the zone it should belong to. Format is: "page $pfn outside zone [ $start_pfn - $end_pfn ]" Signed-off-by: Cody P Schafer --- mm/page_alloc.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/mm/page_alloc.c b/mm/page_alloc.c index f8ed277..f1783cf 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -239,13 +239,20 @@ static int page_outside_zone_boundaries(struct zone *zone, struct page *page) int ret = 0; unsigned seq; unsigned long pfn = page_to_pfn(page); + unsigned long sp, start_pfn; do { seq = zone_span_seqbegin(zone); + start_pfn = zone->zone_start_pfn; + sp = zone->spanned_pages; if (!zone_spans_pfn(zone, pfn)) ret = 1; } while (zone_span_seqretry(zone, seq)); + if (ret) + pr_debug("page %lu outside zone [ %lu - %lu ]\n", + pfn, start_pfn, start_pfn + sp); + return ret; } -- 1.8.0.3 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758390Ab3APA0q (ORCPT ); Tue, 15 Jan 2013 19:26:46 -0500 Received: from e38.co.us.ibm.com ([32.97.110.159]:55705 "EHLO e38.co.us.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1758274Ab3APA0o (ORCPT ); Tue, 15 Jan 2013 19:26:44 -0500 From: Cody P Schafer To: Linux MM Cc: LKML , Andrew Morton , Catalin Marinas , Cody P Schafer , Cody P Schafer Subject: [PATCH 09/17] mm/page_alloc: use zone_end_pfn() & zone_spans_pfn() Date: Tue, 15 Jan 2013 16:24:46 -0800 Message-Id: <1358295894-24167-10-git-send-email-cody@linux.vnet.ibm.com> X-Mailer: git-send-email 1.8.0.3 In-Reply-To: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> References: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> X-Content-Scanned: Fidelis XPS MAILER x-cbid: 13011600-5518-0000-0000-00000AC4D933 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Cody P Schafer Change several open coded zone_end_pfn()s and a zone_spans_pfn() in the page allocator to use the provided helper functions. Signed-off-by: Cody P Schafer --- mm/page_alloc.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/mm/page_alloc.c b/mm/page_alloc.c index c5d70ce..f8ed277 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -1272,7 +1272,7 @@ void mark_free_pages(struct zone *zone) spin_lock_irqsave(&zone->lock, flags); - max_zone_pfn = zone->zone_start_pfn + zone->spanned_pages; + max_zone_pfn = zone_end_pfn(zone); for (pfn = zone->zone_start_pfn; pfn < max_zone_pfn; pfn++) if (pfn_valid(pfn)) { struct page *page = pfn_to_page(pfn); @@ -3775,7 +3775,7 @@ static void setup_zone_migrate_reserve(struct zone *zone) * the block. */ start_pfn = zone->zone_start_pfn; - end_pfn = start_pfn + zone->spanned_pages; + end_pfn = zone_end_pfn(zone); start_pfn = roundup(start_pfn, pageblock_nr_pages); reserve = roundup(min_wmark_pages(zone), pageblock_nr_pages) >> pageblock_order; @@ -3889,7 +3889,7 @@ void __meminit memmap_init_zone(unsigned long size, int nid, unsigned long zone, * pfn out of zone. */ if ((z->zone_start_pfn <= pfn) - && (pfn < z->zone_start_pfn + z->spanned_pages) + && (pfn < zone_end_pfn(z)) && !(pfn & (pageblock_nr_pages - 1))) set_pageblock_migratetype(page, MIGRATE_MOVABLE); @@ -4617,7 +4617,7 @@ static void __init_refok alloc_node_mem_map(struct pglist_data *pgdat) * for the buddy allocator to function correctly. */ start = pgdat->node_start_pfn & ~(MAX_ORDER_NR_PAGES - 1); - end = pgdat->node_start_pfn + pgdat->node_spanned_pages; + end = pgdat_end_pfn(pgdat); end = ALIGN(end, MAX_ORDER_NR_PAGES); size = (end - start) * sizeof(struct page); map = alloc_remap(pgdat->node_id, size); @@ -5735,8 +5735,7 @@ bool is_pageblock_removable_nolock(struct page *page) zone = page_zone(page); pfn = page_to_pfn(page); - if (zone->zone_start_pfn > pfn || - zone->zone_start_pfn + zone->spanned_pages <= pfn) + if (!zone_spans_pfn(zone, pfn)) return false; return !has_unmovable_pages(zone, page, 0, true); -- 1.8.0.3 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932262Ab3APA0w (ORCPT ); Tue, 15 Jan 2013 19:26:52 -0500 Received: from e38.co.us.ibm.com ([32.97.110.159]:55775 "EHLO e38.co.us.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1758416Ab3APA0u (ORCPT ); Tue, 15 Jan 2013 19:26:50 -0500 From: Cody P Schafer To: Linux MM Cc: LKML , Andrew Morton , Catalin Marinas , Cody P Schafer , Cody P Schafer Subject: [PATCH 12/17] mm/memory_hotplug: use pgdat_end_pfn() instead of open coding the same. Date: Tue, 15 Jan 2013 16:24:49 -0800 Message-Id: <1358295894-24167-13-git-send-email-cody@linux.vnet.ibm.com> X-Mailer: git-send-email 1.8.0.3 In-Reply-To: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> References: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> X-Content-Scanned: Fidelis XPS MAILER x-cbid: 13011600-5518-0000-0000-00000AC4D959 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Cody P Schafer Replace open coded pgdat_end_pfn() with helper function. Signed-off-by: Cody P Schafer --- mm/memory_hotplug.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c index 8e352fe..0a74b86a 100644 --- a/mm/memory_hotplug.c +++ b/mm/memory_hotplug.c @@ -189,7 +189,7 @@ void register_page_bootmem_info_node(struct pglist_data *pgdat) } pfn = pgdat->node_start_pfn; - end_pfn = pfn + pgdat->node_spanned_pages; + end_pfn = pgdat_end_pfn(pgdat); /* register_section info */ for (; pfn < end_pfn; pfn += PAGES_PER_SECTION) { -- 1.8.0.3 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932708Ab3APA1V (ORCPT ); Tue, 15 Jan 2013 19:27:21 -0500 Received: from e39.co.us.ibm.com ([32.97.110.160]:39047 "EHLO e39.co.us.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1758296Ab3APA0E (ORCPT ); Tue, 15 Jan 2013 19:26:04 -0500 From: Cody P Schafer To: Linux MM Cc: LKML , Andrew Morton , Catalin Marinas , Cody P Schafer Subject: [PATCH 16/17] mm/memory_hotplug: use zone_end_pfn() instead of open coding Date: Tue, 15 Jan 2013 16:24:53 -0800 Message-Id: <1358295894-24167-17-git-send-email-cody@linux.vnet.ibm.com> X-Mailer: git-send-email 1.8.0.3 In-Reply-To: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> References: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> X-Content-Scanned: Fidelis XPS MAILER x-cbid: 13011600-3620-0000-0000-000000E82EC8 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Switch to using zone_end_pfn() in move_pfn_range_left() and move_pfn_range_right() instead of open coding the same. Signed-off-by: Cody P Schafer --- mm/memory_hotplug.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c index c6149a3..515b917 100644 --- a/mm/memory_hotplug.c +++ b/mm/memory_hotplug.c @@ -278,7 +278,7 @@ static int __meminit move_pfn_range_left(struct zone *z1, struct zone *z2, pgdat_resize_lock(z1->zone_pgdat, &flags); /* can't move pfns which are higher than @z2 */ - if (end_pfn > z2->zone_start_pfn + z2->spanned_pages) + if (end_pfn > zone_end_pfn(z2)) goto out_fail; /* the move out part mast at the left most of @z2 */ if (start_pfn > z2->zone_start_pfn) @@ -294,7 +294,7 @@ static int __meminit move_pfn_range_left(struct zone *z1, struct zone *z2, z1_start_pfn = start_pfn; resize_zone(z1, z1_start_pfn, end_pfn); - resize_zone(z2, end_pfn, z2->zone_start_pfn + z2->spanned_pages); + resize_zone(z2, end_pfn, zone_end_pfn(z2)); pgdat_resize_unlock(z1->zone_pgdat, &flags); @@ -323,15 +323,15 @@ static int __meminit move_pfn_range_right(struct zone *z1, struct zone *z2, if (z1->zone_start_pfn > start_pfn) goto out_fail; /* the move out part mast at the right most of @z1 */ - if (z1->zone_start_pfn + z1->spanned_pages > end_pfn) + if (zone_end_pfn(z1) > end_pfn) goto out_fail; /* must included/overlap */ - if (start_pfn >= z1->zone_start_pfn + z1->spanned_pages) + if (start_pfn >= zone_end_pfn(z1)) goto out_fail; /* use end_pfn for z2's end_pfn if z2 is empty */ if (z2->spanned_pages) - z2_end_pfn = z2->zone_start_pfn + z2->spanned_pages; + z2_end_pfn = zone_end_pfn(z2); else z2_end_pfn = end_pfn; -- 1.8.0.3 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932712Ab3APA1k (ORCPT ); Tue, 15 Jan 2013 19:27:40 -0500 Received: from e9.ny.us.ibm.com ([32.97.182.139]:59938 "EHLO e9.ny.us.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1758258Ab3APAZ5 (ORCPT ); Tue, 15 Jan 2013 19:25:57 -0500 From: Cody P Schafer To: Linux MM Cc: LKML , Andrew Morton , Catalin Marinas , Cody P Schafer Subject: [PATCH 14/17] mm/memory_hotplug: factor out zone+pgdat growth. Date: Tue, 15 Jan 2013 16:24:51 -0800 Message-Id: <1358295894-24167-15-git-send-email-cody@linux.vnet.ibm.com> X-Mailer: git-send-email 1.8.0.3 In-Reply-To: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> References: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> X-Content-Scanned: Fidelis XPS MAILER x-cbid: 13011600-7182-0000-0000-000004762F1C Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Create a new function grow_pgdat_and_zone() which handles locking + growth of a zone & the pgdat which it is associated with. Signed-off-by: Cody P Schafer --- mm/memory_hotplug.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c index 0a74b86a..c6149a3 100644 --- a/mm/memory_hotplug.c +++ b/mm/memory_hotplug.c @@ -361,6 +361,16 @@ static void grow_pgdat_span(struct pglist_data *pgdat, unsigned long start_pfn, pgdat->node_start_pfn; } +static void grow_pgdat_and_zone(struct zone *zone, unsigned long start_pfn, + unsigned long end_pfn) +{ + unsigned long flags; + pgdat_resize_lock(zone->zone_pgdat, &flags); + grow_zone_span(zone, start_pfn, end_pfn); + grow_pgdat_span(zone->zone_pgdat, start_pfn, end_pfn); + pgdat_resize_unlock(zone->zone_pgdat, &flags); +} + static int __meminit __add_zone(struct zone *zone, unsigned long phys_start_pfn) { struct pglist_data *pgdat = zone->zone_pgdat; @@ -375,11 +385,7 @@ static int __meminit __add_zone(struct zone *zone, unsigned long phys_start_pfn) if (ret) return ret; - pgdat_resize_lock(zone->zone_pgdat, &flags); - grow_zone_span(zone, phys_start_pfn, phys_start_pfn + nr_pages); - grow_pgdat_span(zone->zone_pgdat, phys_start_pfn, - phys_start_pfn + nr_pages); - pgdat_resize_unlock(zone->zone_pgdat, &flags); + grow_pgdat_and_zone(zone, phys_start_pfn, phys_start_pfn + nr_pages); memmap_init_zone(nr_pages, nid, zone_type, phys_start_pfn, MEMMAP_HOTPLUG); return 0; -- 1.8.0.3 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932729Ab3APA2R (ORCPT ); Tue, 15 Jan 2013 19:28:17 -0500 Received: from e39.co.us.ibm.com ([32.97.110.160]:39030 "EHLO e39.co.us.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1758238Ab3APAZy (ORCPT ); Tue, 15 Jan 2013 19:25:54 -0500 From: Cody P Schafer To: Linux MM Cc: LKML , Andrew Morton , Catalin Marinas , Cody P Schafer , Cody P Schafer Subject: [PATCH 08/17] mm/page_alloc: use zone_spans_pfn() instead of open coded checks. Date: Tue, 15 Jan 2013 16:24:45 -0800 Message-Id: <1358295894-24167-9-git-send-email-cody@linux.vnet.ibm.com> X-Mailer: git-send-email 1.8.0.3 In-Reply-To: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> References: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> X-Content-Scanned: Fidelis XPS MAILER x-cbid: 13011600-3620-0000-0000-000000E82EA5 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Cody P Schafer In 2 VM_BUG()s, avoid open coding zone ownership of pfns. Signed-off-by: Cody P Schafer --- mm/page_alloc.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 3911c1a..c5d70ce 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -242,9 +242,7 @@ static int page_outside_zone_boundaries(struct zone *zone, struct page *page) do { seq = zone_span_seqbegin(zone); - if (pfn >= zone->zone_start_pfn + zone->spanned_pages) - ret = 1; - else if (pfn < zone->zone_start_pfn) + if (!zone_spans_pfn(zone, pfn)) ret = 1; } while (zone_span_seqretry(zone, seq)); @@ -5639,8 +5637,7 @@ void set_pageblock_flags_group(struct page *page, unsigned long flags, pfn = page_to_pfn(page); bitmap = get_pageblock_bitmap(zone, pfn); bitidx = pfn_to_bitidx(zone, pfn); - VM_BUG_ON(pfn < zone->zone_start_pfn); - VM_BUG_ON(pfn >= zone->zone_start_pfn + zone->spanned_pages); + VM_BUG_ON(!zone_spans_pfn(zone, pfn)); for (; start_bitidx <= end_bitidx; start_bitidx++, value <<= 1) if (flags & value) -- 1.8.0.3 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758305Ab3APA2m (ORCPT ); Tue, 15 Jan 2013 19:28:42 -0500 Received: from e39.co.us.ibm.com ([32.97.110.160]:39010 "EHLO e39.co.us.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757872Ab3APAZs (ORCPT ); Tue, 15 Jan 2013 19:25:48 -0500 From: Cody P Schafer To: Linux MM Cc: LKML , Andrew Morton , Catalin Marinas , Cody P Schafer , Cody P Schafer Subject: [PATCH 03/17] mm/page_alloc: add a VM_BUG in __free_one_page() if the zone is uninitialized. Date: Tue, 15 Jan 2013 16:24:40 -0800 Message-Id: <1358295894-24167-4-git-send-email-cody@linux.vnet.ibm.com> X-Mailer: git-send-email 1.8.0.3 In-Reply-To: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> References: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> X-Content-Scanned: Fidelis XPS MAILER x-cbid: 13011600-3620-0000-0000-000000E82E98 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Cody P Schafer Freeing pages to uninitialized zones is not handled by __free_one_page(), and should never happen when the code is correct. Ran into this while writing some code that dynamically onlines extra zones. Signed-off-by: Cody P Schafer --- mm/page_alloc.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mm/page_alloc.c b/mm/page_alloc.c index df2022f..da5a5ec 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -532,6 +532,8 @@ static inline void __free_one_page(struct page *page, unsigned long uninitialized_var(buddy_idx); struct page *buddy; + VM_BUG_ON(!zone_is_initialized(zone)); + if (unlikely(PageCompound(page))) if (unlikely(destroy_compound_page(page, order))) return; -- 1.8.0.3 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758265Ab3APA2l (ORCPT ); Tue, 15 Jan 2013 19:28:41 -0500 Received: from e9.ny.us.ibm.com ([32.97.182.139]:59882 "EHLO e9.ny.us.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1758207Ab3APAZt (ORCPT ); Tue, 15 Jan 2013 19:25:49 -0500 From: Cody P Schafer To: Linux MM Cc: LKML , Andrew Morton , Catalin Marinas , Cody P Schafer Subject: [PATCH 07/17] mm/page_alloc: use zone_spans_pfn() instead of open coding. Date: Tue, 15 Jan 2013 16:24:44 -0800 Message-Id: <1358295894-24167-8-git-send-email-cody@linux.vnet.ibm.com> X-Mailer: git-send-email 1.8.0.3 In-Reply-To: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> References: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> X-Content-Scanned: Fidelis XPS MAILER x-cbid: 13011600-7182-0000-0000-000004762EEF Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Use zone_spans_pfn() instead of open coding pfn ownership checks. This is split from following patch as could slightly degrade the generated code. Pre-patch, the code uses it's knowledge that start_pfn < end_pfn to cut down on the number of comparisons. Post-patch, the compiler has to figure it out. Signed-off-by: Cody P Schafer --- mm/page_alloc.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mm/page_alloc.c b/mm/page_alloc.c index da5a5ec..3911c1a 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -978,9 +978,9 @@ int move_freepages_block(struct zone *zone, struct page *page, end_pfn = start_pfn + pageblock_nr_pages - 1; /* Do not cross zone boundaries */ - if (start_pfn < zone->zone_start_pfn) + if (!zone_spans_pfn(zone, start_pfn)) start_page = page; - if (end_pfn >= zone->zone_start_pfn + zone->spanned_pages) + if (!zone_spans_pfn(zone, end_pfn)) return 0; return move_freepages(zone, start_page, end_page, migratetype); -- 1.8.0.3 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757666Ab3APAgc (ORCPT ); Tue, 15 Jan 2013 19:36:32 -0500 Received: from e31.co.us.ibm.com ([32.97.110.149]:57968 "EHLO e31.co.us.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757771Ab3APAg2 (ORCPT ); Tue, 15 Jan 2013 19:36:28 -0500 From: Cody P Schafer To: Linux MM Cc: LKML , Andrew Morton , Catalin Marinas , Cody P Schafer , Cody P Schafer Subject: [PATCH 04/17] mm: add helper ensure_zone_is_initialized() Date: Tue, 15 Jan 2013 16:24:41 -0800 Message-Id: <1358295894-24167-5-git-send-email-cody@linux.vnet.ibm.com> X-Mailer: git-send-email 1.8.0.3 In-Reply-To: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> References: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> X-Content-Scanned: Fidelis XPS MAILER x-cbid: 13011600-7282-0000-0000-00001326ED4F Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Cody P Schafer ensure_zone_is_initialized() checks if a zone is in a empty & not initialized state (typically occuring after it is created in memory hotplugging), and, if so, calls init_currently_empty_zone() to initialize the zone. Signed-off-by: Cody P Schafer --- mm/memory_hotplug.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c index d04ed87..875bdfe 100644 --- a/mm/memory_hotplug.c +++ b/mm/memory_hotplug.c @@ -253,6 +253,17 @@ static void fix_zone_id(struct zone *zone, unsigned long start_pfn, set_page_links(pfn_to_page(pfn), zid, nid, pfn); } +/* Can fail with -ENOMEM from allocating a wait table with vmalloc() or + * alloc_bootmem_node_nopanic() */ +static int __ref ensure_zone_is_initialized(struct zone *zone, + unsigned long start_pfn, unsigned long num_pages) +{ + if (!zone_is_initialized(zone)) + return init_currently_empty_zone(zone, start_pfn, num_pages, + MEMMAP_HOTPLUG); + return 0; +} + static int __meminit move_pfn_range_left(struct zone *z1, struct zone *z2, unsigned long start_pfn, unsigned long end_pfn) { -- 1.8.0.3 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756885Ab3APAwx (ORCPT ); Tue, 15 Jan 2013 19:52:53 -0500 Received: from e32.co.us.ibm.com ([32.97.110.150]:35858 "EHLO e32.co.us.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755676Ab3APAwv (ORCPT ); Tue, 15 Jan 2013 19:52:51 -0500 From: Cody P Schafer To: Linux MM Cc: LKML , Andrew Morton , Catalin Marinas , Cody P Schafer , Cody P Schafer Subject: [PATCH 02/17] mmzone: add various zone_*() helper functions. Date: Tue, 15 Jan 2013 16:24:39 -0800 Message-Id: <1358295894-24167-3-git-send-email-cody@linux.vnet.ibm.com> X-Mailer: git-send-email 1.8.0.3 In-Reply-To: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> References: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> X-Content-Scanned: Fidelis XPS MAILER x-cbid: 13011600-5406-0000-0000-0000043D0B1E Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Cody P Schafer Add zone_is_initialized(), zone_is_empty(), zone_spans_pfn(), and zone_end_pfn(). Signed-off-by: Cody P Schafer --- include/linux/mmzone.h | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h index 73b64a3..696cb7c 100644 --- a/include/linux/mmzone.h +++ b/include/linux/mmzone.h @@ -543,6 +543,26 @@ static inline int zone_is_oom_locked(const struct zone *zone) return test_bit(ZONE_OOM_LOCKED, &zone->flags); } +static inline unsigned zone_end_pfn(const struct zone *zone) +{ + return zone->zone_start_pfn + zone->spanned_pages; +} + +static inline bool zone_spans_pfn(const struct zone *zone, unsigned long pfn) +{ + return zone->zone_start_pfn <= pfn && pfn < zone_end_pfn(zone); +} + +static inline bool zone_is_initialized(struct zone *zone) +{ + return !!zone->wait_table; +} + +static inline bool zone_is_empty(struct zone *zone) +{ + return zone->spanned_pages == 0; +} + /* * The "priority" of VM scanning is how much of the queues we will scan in one * go. A value of 12 for DEF_PRIORITY implies that we will scan 1/4096th of the -- 1.8.0.3 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757191Ab3APAw7 (ORCPT ); Tue, 15 Jan 2013 19:52:59 -0500 Received: from e32.co.us.ibm.com ([32.97.110.150]:35887 "EHLO e32.co.us.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755719Ab3APAw4 (ORCPT ); Tue, 15 Jan 2013 19:52:56 -0500 From: Cody P Schafer To: Linux MM Cc: LKML , Andrew Morton , Catalin Marinas , Cody P Schafer , Cody P Schafer Subject: [PATCH 06/17] mmzone: add pgdat_{end_pfn,is_empty}() helpers & consolidate. Date: Tue, 15 Jan 2013 16:24:43 -0800 Message-Id: <1358295894-24167-7-git-send-email-cody@linux.vnet.ibm.com> X-Mailer: git-send-email 1.8.0.3 In-Reply-To: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> References: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> X-Content-Scanned: Fidelis XPS MAILER x-cbid: 13011600-5406-0000-0000-0000043D0B4F Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Cody P Schafer Add pgdat_end_pfn() and pgdat_is_empty() helpers which match the similar zone_*() functions. Change node_end_pfn() to be a wrapper of pgdat_end_pfn(). Signed-off-by: Cody P Schafer --- include/linux/mmzone.h | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h index 696cb7c..d7abff0 100644 --- a/include/linux/mmzone.h +++ b/include/linux/mmzone.h @@ -772,11 +772,17 @@ typedef struct pglist_data { #define nid_page_nr(nid, pagenr) pgdat_page_nr(NODE_DATA(nid),(pagenr)) #define node_start_pfn(nid) (NODE_DATA(nid)->node_start_pfn) +#define node_end_pfn(nid) pgdat_end_pfn(NODE_DATA(nid)) -#define node_end_pfn(nid) ({\ - pg_data_t *__pgdat = NODE_DATA(nid);\ - __pgdat->node_start_pfn + __pgdat->node_spanned_pages;\ -}) +static inline unsigned long pgdat_end_pfn(pg_data_t *pgdat) +{ + return pgdat->node_start_pfn + pgdat->node_spanned_pages; +} + +static inline bool pgdat_is_empty(pg_data_t *pgdat) +{ + return !pgdat->node_start_pfn && !pgdat->node_spanned_pages; +} #include -- 1.8.0.3 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757571Ab3APBPl (ORCPT ); Tue, 15 Jan 2013 20:15:41 -0500 Received: from e32.co.us.ibm.com ([32.97.110.150]:35205 "EHLO e32.co.us.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757128Ab3APBPj (ORCPT ); Tue, 15 Jan 2013 20:15:39 -0500 Message-ID: <50F5FD7E.4080901@linux.vnet.ibm.com> Date: Tue, 15 Jan 2013 17:08:14 -0800 From: Dave Hansen User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/17.0 Thunderbird/17.0 MIME-Version: 1.0 To: Cody P Schafer CC: Linux MM , LKML , Andrew Morton , Catalin Marinas Subject: Re: [PATCH 01/17] mm/compaction: rename var zone_end_pfn to avoid conflicts with new function References: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> <1358295894-24167-2-git-send-email-cody@linux.vnet.ibm.com> In-Reply-To: <1358295894-24167-2-git-send-email-cody@linux.vnet.ibm.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Content-Scanned: Fidelis XPS MAILER x-cbid: 13011601-5406-0000-0000-0000043E08B8 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 01/15/2013 04:24 PM, Cody P Schafer wrote: > Patches that follow add a inline function zone_end_pfn(), which > conflicts with the naming of a local variable in isolate_freepages(). > > Rename the variable so it does not conflict. It's probably worth a note here that you _will_ be migrating this use over to the new function anyway. > @@ -706,7 +706,7 @@ static void isolate_freepages(struct zone *zone, > * only scans within a pageblock > */ > end_pfn = ALIGN(pfn + 1, pageblock_nr_pages); > - end_pfn = min(end_pfn, zone_end_pfn); > + end_pfn = min(end_pfn, z_end_pfn); Is there any reason not to just completely get rid of z_end_pfn (in the later patches after you introduce zone_end_pfn() of course): > + end_pfn = min(end_pfn, zone_end_pfn(zone)); I wouldn't be completely opposed to you just introducing zone_end_pfn() and doing all the replacements in a single patch. It would make it somewhat easier to review, and it would also save the juggling you have to do with this one. From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757566Ab3APBTT (ORCPT ); Tue, 15 Jan 2013 20:19:19 -0500 Received: from e8.ny.us.ibm.com ([32.97.182.138]:56854 "EHLO e8.ny.us.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757057Ab3APBTR (ORCPT ); Tue, 15 Jan 2013 20:19:17 -0500 Message-ID: <50F6000A.3010601@linux.vnet.ibm.com> Date: Tue, 15 Jan 2013 17:19:06 -0800 From: Dave Hansen User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/17.0 Thunderbird/17.0 MIME-Version: 1.0 To: Cody P Schafer CC: Linux MM , LKML , Andrew Morton , Catalin Marinas , Cody P Schafer Subject: Re: [PATCH 02/17] mmzone: add various zone_*() helper functions. References: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> <1358295894-24167-3-git-send-email-cody@linux.vnet.ibm.com> In-Reply-To: <1358295894-24167-3-git-send-email-cody@linux.vnet.ibm.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Content-Scanned: Fidelis XPS MAILER x-cbid: 13011601-9360-0000-0000-00000F400938 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 01/15/2013 04:24 PM, Cody P Schafer wrote: > +static inline bool zone_spans_pfn(const struct zone *zone, unsigned long pfn) > +{ > + return zone->zone_start_pfn <= pfn && pfn < zone_end_pfn(zone); > +} This needs some parenthesis, just for readability. There's also no crime in breaking it up to be multi-line if you want. > +static inline bool zone_is_initialized(struct zone *zone) > +{ > + return !!zone->wait_table; > +} > + > +static inline bool zone_is_empty(struct zone *zone) > +{ > + return zone->spanned_pages == 0; > +} From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757067Ab3APBUn (ORCPT ); Tue, 15 Jan 2013 20:20:43 -0500 Received: from e38.co.us.ibm.com ([32.97.110.159]:45576 "EHLO e38.co.us.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756323Ab3APBUi (ORCPT ); Tue, 15 Jan 2013 20:20:38 -0500 Message-ID: <50F6005B.1010900@linux.vnet.ibm.com> Date: Tue, 15 Jan 2013 17:20:27 -0800 From: Dave Hansen User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/17.0 Thunderbird/17.0 MIME-Version: 1.0 To: Cody P Schafer CC: Linux MM , LKML , Andrew Morton , Catalin Marinas , Cody P Schafer Subject: Re: [PATCH 02/17] mmzone: add various zone_*() helper functions. References: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> <1358295894-24167-3-git-send-email-cody@linux.vnet.ibm.com> In-Reply-To: <1358295894-24167-3-git-send-email-cody@linux.vnet.ibm.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Content-Scanned: Fidelis XPS MAILER x-cbid: 13011601-5518-0000-0000-00000AC5349F Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 01/15/2013 04:24 PM, Cody P Schafer wrote: > +static inline bool zone_is_empty(struct zone *zone) > +{ > + return zone->spanned_pages == 0; > +} Why did you choose spanned_pages for this? From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756809Ab3APB1c (ORCPT ); Tue, 15 Jan 2013 20:27:32 -0500 Received: from e9.ny.us.ibm.com ([32.97.182.139]:37895 "EHLO e9.ny.us.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754976Ab3APB1b (ORCPT ); Tue, 15 Jan 2013 20:27:31 -0500 Message-ID: <50F601F7.3010000@linux.vnet.ibm.com> Date: Tue, 15 Jan 2013 17:27:19 -0800 From: Dave Hansen User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/17.0 Thunderbird/17.0 MIME-Version: 1.0 To: Cody P Schafer CC: Linux MM , LKML , Andrew Morton , Catalin Marinas Subject: Re: [PATCH 14/17] mm/memory_hotplug: factor out zone+pgdat growth. References: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> <1358295894-24167-15-git-send-email-cody@linux.vnet.ibm.com> In-Reply-To: <1358295894-24167-15-git-send-email-cody@linux.vnet.ibm.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Content-Scanned: Fidelis XPS MAILER x-cbid: 13011601-7182-0000-0000-000004766E5D Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 01/15/2013 04:24 PM, Cody P Schafer wrote: > Create a new function grow_pgdat_and_zone() which handles locking + > growth of a zone & the pgdat which it is associated with. Why is this being factored out? Will it be reused somewhere? From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757013Ab3APBet (ORCPT ); Tue, 15 Jan 2013 20:34:49 -0500 Received: from e32.co.us.ibm.com ([32.97.110.150]:50803 "EHLO e32.co.us.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756394Ab3APBes (ORCPT ); Tue, 15 Jan 2013 20:34:48 -0500 Message-ID: <50F603AC.90005@linux.vnet.ibm.com> Date: Tue, 15 Jan 2013 17:34:36 -0800 From: Dave Hansen User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/17.0 Thunderbird/17.0 MIME-Version: 1.0 To: Cody P Schafer CC: Linux MM , LKML , Andrew Morton , Catalin Marinas Subject: Re: [PATCH 15/17] mm/page_alloc: add informative debugging message in page_outside_zone_boundaries() References: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> <1358295894-24167-16-git-send-email-cody@linux.vnet.ibm.com> In-Reply-To: <1358295894-24167-16-git-send-email-cody@linux.vnet.ibm.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Content-Scanned: Fidelis XPS MAILER x-cbid: 13011601-5406-0000-0000-0000043F17AB Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 01/15/2013 04:24 PM, Cody P Schafer wrote: > Add a debug message which prints when a page is found outside of the > boundaries of the zone it should belong to. Format is: > "page $pfn outside zone [ $start_pfn - $end_pfn ]" I'd make sure to say 'pfn' here, just to make sure that it's explicitly stated to be a pfn and not a 'struct page' > diff --git a/mm/page_alloc.c b/mm/page_alloc.c > index f8ed277..f1783cf 100644 > --- a/mm/page_alloc.c > +++ b/mm/page_alloc.c > @@ -239,13 +239,20 @@ static int page_outside_zone_boundaries(struct zone *zone, struct page *page) > int ret = 0; > unsigned seq; > unsigned long pfn = page_to_pfn(page); > + unsigned long sp, start_pfn; I think calling this zone_spanned is probably just fine. Shouldn't take up too much room. > do { > seq = zone_span_seqbegin(zone); > + start_pfn = zone->zone_start_pfn; > + sp = zone->spanned_pages; > if (!zone_spans_pfn(zone, pfn)) > ret = 1; > } while (zone_span_seqretry(zone, seq)); > > + if (ret) > + pr_debug("page %lu outside zone [ %lu - %lu ]\n", > + pfn, start_pfn, start_pfn + sp); > + > return ret; > } Is there a way we could also fit in something to disambiguate the zones? I can imagine a scenario where two zones might have identical start/spanned_pages, so they might be impossible to tell apart in a message like this. Maybe we could add the NUMA node or the DMA/Normal/Highmem text? From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757429Ab3APBjp (ORCPT ); Tue, 15 Jan 2013 20:39:45 -0500 Received: from e8.ny.us.ibm.com ([32.97.182.138]:45012 "EHLO e8.ny.us.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756690Ab3APBjo (ORCPT ); Tue, 15 Jan 2013 20:39:44 -0500 Message-ID: <50F604D4.407@linux.vnet.ibm.com> Date: Tue, 15 Jan 2013 17:39:32 -0800 From: Dave Hansen User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/17.0 Thunderbird/17.0 MIME-Version: 1.0 To: Cody P Schafer CC: Linux MM , LKML , Andrew Morton , Catalin Marinas Subject: Re: [PATCH 17/17] mm/compaction: use zone_end_pfn() References: <1358295894-24167-1-git-send-email-cody@linux.vnet.ibm.com> <1358295894-24167-18-git-send-email-cody@linux.vnet.ibm.com> In-Reply-To: <1358295894-24167-18-git-send-email-cody@linux.vnet.ibm.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Content-Scanned: Fidelis XPS MAILER x-cbid: 13011601-9360-0000-0000-00000F4036C9 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 01/15/2013 04:24 PM, Cody P Schafer wrote: > diff --git a/mm/compaction.c b/mm/compaction.c > index 1b52528..ea66be3 100644 > --- a/mm/compaction.c > +++ b/mm/compaction.c > @@ -85,7 +85,7 @@ static inline bool isolation_suitable(struct compact_control *cc, > static void __reset_isolation_suitable(struct zone *zone) > { > unsigned long start_pfn = zone->zone_start_pfn; > - unsigned long end_pfn = zone->zone_start_pfn + zone->spanned_pages; > + unsigned long end_pfn = zone_end_pfn(zone); > unsigned long pfn; > > zone->compact_cached_migrate_pfn = start_pfn; > @@ -663,7 +663,7 @@ static void isolate_freepages(struct zone *zone, > */ > high_pfn = min(low_pfn, pfn); > > - z_end_pfn = zone->zone_start_pfn + zone->spanned_pages; > + z_end_pfn = zone_end_pfn(zone); > > /* > * Isolate free pages until enough are available to migrate the > @@ -920,7 +920,7 @@ static int compact_zone(struct zone *zone, struct compact_control *cc) > { > int ret; > unsigned long start_pfn = zone->zone_start_pfn; > - unsigned long end_pfn = zone->zone_start_pfn + zone->spanned_pages; > + unsigned long end_pfn = zone_end_pfn(zone); > > ret = compaction_suitable(zone, cc->order); > switch (ret) { I do think theses are a _wee_ bit _too_ broken out. In this case, it's highly beneficial to just be able to look in the same email to make sure that, "yeah, zone_end_pfn() is the same as the code that it replaces". The fact that it was defined 15 patches ago makes it a bit harder to review. It's much nicer to review if there's _one_ patch that does the "define this new function and do all of the replacements". Anyway, the series looks good. Feel free to add my: Reviewed-by: Dave Hansen