The patch titled catch valid mem range at onlining memory has been added to the -mm tree. Its filename is catch-valid-mem-range-at-onlining-memory.patch See http://www.zip.com.au/~akpm/linux/patches/stuff/added-to-mm.txt to find out what to do about this Return-Path: <kamezawa.hiroyu@xxxxxxxxxxxxxx> Received: from localhost (bix [127.0.0.1]) by localhost.localdomain (8.12.10/8.12.10) with ESMTP id k3S2jwLo005465 for <akpm@localhost>; Thu, 27 Apr 2006 19:46:02 -0700 Received: from bix [127.0.0.1] by localhost with POP3 (fetchmail-6.2.0) for akpm@localhost (single-drop); Thu, 27 Apr 2006 19:46:02 -0700 (PDT) Received: from smtp.osdl.org (smtp.osdl.org [65.172.181.4]) by shell0.pdx.osdl.net (8.13.1/8.11.6) with ESMTP id k3S2kXoo022344 for <akpm@xxxxxxxxxxxxxxxxxxxxx>; Thu, 27 Apr 2006 19:46:33 -0700 Received: from fgwmail5.fujitsu.co.jp (fgwmail5.fujitsu.co.jp [192.51.44.35]) by smtp.osdl.org (8.12.8/8.12.8) with ESMTP id k3S2kQtG013946 for <akpm@xxxxxxxx>; Thu, 27 Apr 2006 19:46:28 -0700 Received: from m3.gw.fujitsu.co.jp ([10.0.50.73]) by fgwmail5.fujitsu.co.jp (Fujitsu Gateway) with ESMTP id k3S2k870001075; Fri, 28 Apr 2006 11:46:08 +0900 (envelope-from kamezawa.hiroyu@xxxxxxxxxxxxxx) Received: from s7.gw.fujitsu.co.jp by m3.gw.fujitsu.co.jp (8.12.10/Fujitsu Domain Master) id k3S2k7Yn023404; Fri, 28 Apr 2006 11:46:07 +0900 (envelope-from kamezawa.hiroyu@xxxxxxxxxxxxxx) Received: from s7.gw.fujitsu.co.jp (s7 [127.0.0.1]) by s7.gw.fujitsu.co.jp (Postfix) with ESMTP id C009A3C8018; Fri, 28 Apr 2006 11:46:07 +0900 (JST) Received: from fjm505.ms.jp.fujitsu.com (fjm505.ms.jp.fujitsu.com [10.56.99.83]) by s7.gw.fujitsu.co.jp (Postfix) with ESMTP id ED7EB1D9643; Fri, 28 Apr 2006 11:46:06 +0900 (JST) Received: from fjmscan501.ms.jp.fujitsu.com (fjmscan501.ms.jp.fujitsu.com [10.56.99.141])by fjm505.ms.jp.fujitsu.com with ESMTP id k3S2k4vh015128; Fri, 28 Apr 2006 11:46:04 +0900 Received: from unknown ([10.124.100.187]) by fjmscan501.ms.jp.fujitsu.com (8.13.1/8.12.11) with SMTP id k3S2juVk011940; Fri, 28 Apr 2006 11:46:04 +0900 Date: Fri, 28 Apr 2006 11:47:32 +0900 From: KAMEZAWA Hiroyuki <kamezawa.hiroyu@xxxxxxxxxxxxxx> To: LKML <linux-kernel@xxxxxxxxxxxxxxx> Cc: LHMS <lhms-devel@xxxxxxxxxxxxxxxxxxxxx>, Andrew Morton <akpm@xxxxxxxx> Subject: [PATCH] catch valid mem range at onlining memory Message-Id: <20060428114732.e889ad2d.kamezawa.hiroyu@xxxxxxxxxxxxxx> Organization: Fujitsu X-Mailer: Sylpheed version 2.2.0 (GTK+ 2.6.10; i686-pc-mingw32) Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Received-SPF: none (domain of kamezawa.hiroyu@xxxxxxxxxxxxxx does not designate permitted sender hosts) X-MIMEDefang-Filter: osdl$Revision: 1.134 $ X-Scanned-By: MIMEDefang 2.36 X-Spam-Checker-Version: SpamAssassin 3.0.2 (2004-11-16) on bix X-Spam-Level: X-Spam-Status: No, score=-1.6 required=2.0 tests=AWL,BAYES_00 autolearn=ham version=3.0.2 This patch allows hot-add memory which is not aligned to section. Based on linux-2.6.17-rc2-mm1 + memory hotadd ioresource register patch. iomem resource patch is here. http://www.uwsg.indiana.edu/hypermail/linux/kernel/0604.3/1188.html Now, hot-added memory has to be aligned to section size. Considering big section sized archs, this is not useful. When hot-added memory is registerd as iomem resoruce by iomem resource patch, we can make use of that information to detect valid memory range. Note: With this, not-aligned memory can be registerd. To allow hot-add memory with holes, we have to do more work around add_memory(). (It doesn't allows add memory to already existing mem section.) Signed-off-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@xxxxxxxxxxxxxx> Index: linux-2.6.17-rc2-mm1/kernel/resource.c =================================================================== --- linux-2.6.17-rc2-mm1.orig/kernel/resource.c 2006-04-27 18:00:16.000000000 +0900 +++ linux-2.6.17-rc2-mm1/kernel/resource.c 2006-04-28 11:19:25.000000000 +0900 @@ -242,6 +242,45 @@ EXPORT_SYMBOL(release_resource); +#ifdef CONFIG_MEMORY_HOTPLUG +/* + * Finds the lowest memory reosurce exists within [res->start.res->end) + * the caller must specify res->start, res->end, res->flags. + * If found, returns 0, res is overwritten, if not found, returns -1. + */ +int find_next_system_ram(struct resource *res) +{ + u64 start, end; + struct resource *p; + + BUG_ON(!res); + + start = res->start; + end = res->end; + + read_lock(&resource_lock); + for( p = iomem_resource.child; p ; p = p->sibling) { + /* system ram is just marked as IORESOURCE_MEM */ + if (p->flags != res->flags) + continue; + if (p->start > end) { + p = NULL; + break; + } + if (p->start >= start) + break; + } + read_unlock(&resource_lock); + if (!p) + return -1; + /* copy data */ + res->start = p->start; + res->end = p->end; + return 0; +} + +#endif + /* * Find empty slot in the resource tree given range and alignment. */ Index: linux-2.6.17-rc2-mm1/include/linux/ioport.h =================================================================== --- linux-2.6.17-rc2-mm1.orig/include/linux/ioport.h 2006-04-27 18:00:16.000000000 +0900 +++ linux-2.6.17-rc2-mm1/include/linux/ioport.h 2006-04-27 21:47:25.000000000 +0900 @@ -105,6 +105,10 @@ void *alignf_data); int adjust_resource(struct resource *res, u64 start, u64 size); +#ifdef CONFIG_MEMORY_HOTPLUG +/* get registered SYSTEM_RAM resources in specified area */ +extern int find_next_system_ram(struct resource *res); +#endif /* Convenience shorthand with allocation */ #define request_region(start,n,name) __request_region(&ioport_resource, (start), (n), (name)) Index: linux-2.6.17-rc2-mm1/mm/memory_hotplug.c =================================================================== --- linux-2.6.17-rc2-mm1.orig/mm/memory_hotplug.c 2006-04-27 20:21:32.000000000 +0900 +++ linux-2.6.17-rc2-mm1/mm/memory_hotplug.c 2006-04-28 11:11:43.000000000 +0900 @@ -123,6 +123,9 @@ unsigned long i; unsigned long flags; unsigned long onlined_pages = 0; + struct resource res; + u64 section_end; + unsigned long start_pfn; struct zone *zone; int need_zonelists_rebuild = 0; @@ -145,10 +148,27 @@ if (!populated_zone(zone)) need_zonelists_rebuild = 1; - for (i = 0; i < nr_pages; i++) { - struct page *page = pfn_to_page(pfn + i); - online_page(page); - onlined_pages++; + res.start = (u64)pfn << PAGE_SHIFT; + res.end = res.start + ((u64)nr_pages << PAGE_SHIFT) - 1; + res.flags = IORESOUECE_MEM; /* we just need system ram */ + section_end = res.end; + + while (find_next_system_ram(&res) >= 0) { + start_pfn = (unsigned long)(res.start >> PAGE_SHIFT); + nr_pages = (unsigned long) + ((res.end + 1 - res.start) >> PAGE_SHIFT); + + if (PageReserved(pfn_to_page(start_pfn))) { + /* this region's page is not onlined now */ + for (i = 0; i < nr_pages; i++) { + struct page *page = pfn_to_page(start_pfn + i); + online_page(page); + onlined_pages++; + } + } + + res.start = res.end + 1; + res.end = section_end; } zone->present_pages += onlined_pages; zone->zone_pgdat->node_present_pages += onlined_pages; Patches currently in -mm which might be from kamezawa.hiroyu@xxxxxxxxxxxxxx are acpi-memory-hotplug-cannot-manage-_crs-with-plural-resoureces.patch for_each_possible_cpu-under-drivers-acpi.patch ia64-acpi_memhotplug-fix.patch for_each_possible_cpu-mips.patch x86_64-mm-hotadd-reserve-fix-fix-fix.patch for_each_possible_cpu-xfs.patch wait_table-and-zonelist-initializing-for-memory-hotaddadd-return-code-for-init_current_empty_zone.patch wait_table-and-zonelist-initializing-for-memory-hotadd-wait_table-initialization.patch wait_table-and-zonelist-initializing-for-memory-hotadd-update-zonelists.patch support-for-panic-at-oom.patch pgdat-allocation-for-new-node-add-generic-alloc-node_data.patch pgdat-allocation-for-new-node-add-generic-alloc-node_data-tidy.patch pgdat-allocation-for-new-node-add-refresh-node_data.patch pgdat-allocation-for-new-node-add-refresh-node_data-fix.patch pgdat-allocation-for-new-node-add-export-kswapd-start-func.patch pgdat-allocation-for-new-node-add-export-kswapd-start-func-tidy.patch pgdat-allocation-for-new-node-add-call-pgdat-allocation.patch register-hot-added-memory-to-iomem-resource.patch catch-valid-mem-range-at-onlining-memory.patch catch-valid-mem-range-at-onlining-memory-tidy.patch - To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html