From patchwork Wed Apr 20 23:12:36 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Rientjes X-Patchwork-Id: 723481 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter1.kernel.org (8.14.4/8.14.3) with ESMTP id p3KNCgZP010638 for ; Wed, 20 Apr 2011 23:12:42 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752762Ab1DTXMm (ORCPT ); Wed, 20 Apr 2011 19:12:42 -0400 Received: from smtp-out.google.com ([74.125.121.67]:15071 "EHLO smtp-out.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752737Ab1DTXMl (ORCPT ); Wed, 20 Apr 2011 19:12:41 -0400 Received: from wpaz33.hot.corp.google.com (wpaz33.hot.corp.google.com [172.24.198.97]) by smtp-out.google.com with ESMTP id p3KNCdRq011458 for ; Wed, 20 Apr 2011 16:12:39 -0700 DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=google.com; s=beta; t=1303341159; bh=ENzURK6r1oea+F31nsNA1ihEBbI=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References: MIME-Version:Content-Type; b=WP5m4mSBU9KelIvuzuxMcqPZA3G7H20jay4mas3VxkGw97RyG9TQoM24p4BKCIA8G /2/eXLhTs1hAYuGnAn46Q== Received: from pvf33 (pvf33.prod.google.com [10.241.210.97]) by wpaz33.hot.corp.google.com with ESMTP id p3KNCZjl019429 (version=TLSv1/SSLv3 cipher=RC4-SHA bits=128 verify=NOT) for ; Wed, 20 Apr 2011 16:12:38 -0700 Received: by pvf33 with SMTP id 33so770770pvf.38 for ; Wed, 20 Apr 2011 16:12:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=beta; h=domainkey-signature:date:from:x-x-sender:to:cc:subject:in-reply-to :message-id:references:user-agent:mime-version:content-type; bh=8fODnIaKvCeK30wRpFZqWjqg3QPI4YPeT9rCBIZVEzA=; b=MS2wU/atmUSli3vv9mz3jiX6kP3jRdQdqGrODtKLEVG1qHM/av+b9XfdGbvCAtnJYS fdeI9TPBpWgI8sdVnwNg== DomainKey-Signature: a=rsa-sha1; c=nofws; d=google.com; s=beta; h=date:from:x-x-sender:to:cc:subject:in-reply-to:message-id :references:user-agent:mime-version:content-type; b=AH/YDa7GqFTKjyaU9kMDCz8Dc+TwAx73jh4AF5b/SRgJny8afIvte9q3/diSj1CSV4 zbUL9xJv5X1zNZ/YUJlA== Received: by 10.68.55.195 with SMTP id u3mr6069194pbp.339.1303341157661; Wed, 20 Apr 2011 16:12:37 -0700 (PDT) Received: from chino.kir.corp.google.com (chino.kir.corp.google.com [172.31.6.12]) by mx.google.com with ESMTPS id o4sm36652pbl.98.2011.04.20.16.12.36 (version=TLSv1/SSLv3 cipher=OTHER); Wed, 20 Apr 2011 16:12:36 -0700 (PDT) Date: Wed, 20 Apr 2011 16:12:36 -0700 (PDT) From: David Rientjes X-X-Sender: rientjes@chino.kir.corp.google.com To: James Bottomley cc: KOSAKI Motohiro , Pekka Enberg , Christoph Lameter , Michal Hocko , Andrew Morton , Hugh Dickins , linux-mm@kvack.org, LKML , linux-parisc@vger.kernel.org, Ingo Molnar , x86 maintainers Subject: Re: [PATCH v3] mm: make expand_downwards symmetrical to expand_upwards In-Reply-To: <1303337718.2587.51.camel@mulgrave.site> Message-ID: References: <20110420161615.462D.A69D9226@jp.fujitsu.com> <20110420174027.4631.A69D9226@jp.fujitsu.com> <1303317178.2587.30.camel@mulgrave.site> <1303337718.2587.51.camel@mulgrave.site> User-Agent: Alpine 2.00 (DEB 1167 2008-08-23) MIME-Version: 1.0 X-System-Of-Record: true Sender: linux-parisc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-parisc@vger.kernel.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.6 (demeter1.kernel.org [140.211.167.41]); Wed, 20 Apr 2011 23:12:42 +0000 (UTC) On Wed, 20 Apr 2011, James Bottomley wrote: > > This is probably because the parisc's DISCONTIGMEM memory ranges don't > > have bits set in N_NORMAL_MEMORY. > > > > diff --git a/arch/parisc/mm/init.c b/arch/parisc/mm/init.c > > --- a/arch/parisc/mm/init.c > > +++ b/arch/parisc/mm/init.c > > @@ -266,8 +266,10 @@ static void __init setup_bootmem(void) > > } > > memset(pfnnid_map, 0xff, sizeof(pfnnid_map)); > > > > - for (i = 0; i < npmem_ranges; i++) > > + for (i = 0; i < npmem_ranges; i++) { > > + node_set_state(i, N_NORMAL_MEMORY); > > node_set_online(i); > > + } > > #endif > > Yes, this seems to be the missing piece that gets it to boot. We really > need this in generic code, unless someone wants to run through all the > other arch's doing it ... > Looking at all other architectures that allow ARCH_DISCONTIGMEM_ENABLE, we already know x86 is fine, avr32 disables ARCH_DISCONTIGMEM_ENABLE entirely because its code only brings online node 0, and tile already sets the bit in N_NORMAL_MEMORY correctly when bringing a node online, probably because it was introduced after the various node state masks were added in 7ea1530ab3fd back in October 2007. So we're really only talking about alpha, ia64, m32r, m68k, and mips and it only seems to matter when using CONFIG_SLUB, which isn't surprising when greping for it: $ grep -r N_NORMAL_MEMORY mm/* mm/memcontrol.c: if (!node_state(node, N_NORMAL_MEMORY)) mm/memcontrol.c: if (!node_state(node, N_NORMAL_MEMORY)) mm/page_alloc.c: [N_NORMAL_MEMORY] = { { [0] = 1UL } }, mm/page_alloc.c: node_set_state(zone_to_nid(zone), N_NORMAL_MEMORY); mm/slub.c: for_each_node_state(node, N_NORMAL_MEMORY) { mm/slub.c: for_each_node_state(node, N_NORMAL_MEMORY) { mm/slub.c: for_each_node_state(node, N_NORMAL_MEMORY) { mm/slub.c: for_each_node_state(node, N_NORMAL_MEMORY) { mm/slub.c: for_each_node_state(node, N_NORMAL_MEMORY) { mm/slub.c: for_each_node_state(node, N_NORMAL_MEMORY) { mm/slub.c: for_each_node_state(node, N_NORMAL_MEMORY) { mm/slub.c: for_each_node_state(node, N_NORMAL_MEMORY) { mm/slub.c: for_each_node_state(node, N_NORMAL_MEMORY) { mm/slub.c: for_each_node_state(node, N_NORMAL_MEMORY) Those memory controller occurrences only result in it passing a node id of -1 to kmalloc_node() which means no specific node target, and that's fine for DISCONTIGMEM since we don't care about any proximity between memory ranges. This should fix the remaining architectures so they can use CONFIG_SLUB, but I hope it can be tested by the individual arch maintainers like you did for parisc. --- To unsubscribe from this list: send the line "unsubscribe linux-parisc" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/arch/alpha/mm/numa.c b/arch/alpha/mm/numa.c --- a/arch/alpha/mm/numa.c +++ b/arch/alpha/mm/numa.c @@ -245,6 +245,7 @@ setup_memory_node(int nid, void *kernel_end) bootmap_size, BOOTMEM_DEFAULT); printk(" reserving pages %ld:%ld\n", bootmap_start, bootmap_start+PFN_UP(bootmap_size)); + node_set_state(nid, N_NORMAL_MEMORY); node_set_online(nid); } diff --git a/arch/ia64/mm/discontig.c b/arch/ia64/mm/discontig.c --- a/arch/ia64/mm/discontig.c +++ b/arch/ia64/mm/discontig.c @@ -573,6 +573,8 @@ void __init find_memory(void) map>>PAGE_SHIFT, bdp->node_min_pfn, bdp->node_low_pfn); + if (node_present_pages(node)) + node_set_state(node, N_NORMAL_MEMORY); } efi_memmap_walk(filter_rsvd_memory, free_node_bootmem); diff --git a/arch/m32r/kernel/setup.c b/arch/m32r/kernel/setup.c --- a/arch/m32r/kernel/setup.c +++ b/arch/m32r/kernel/setup.c @@ -247,7 +247,9 @@ void __init setup_arch(char **cmdline_p) #ifdef CONFIG_DISCONTIGMEM nodes_clear(node_online_map); + node_set_state(0, N_NORMAL_MEMORY); /* always has memory */ node_set_online(0); + node_set_state(1, N_NORMAL_MEMORY); /* always has memory */ node_set_online(1); #endif /* CONFIG_DISCONTIGMEM */ diff --git a/arch/m68k/mm/init_mm.c b/arch/m68k/mm/init_mm.c --- a/arch/m68k/mm/init_mm.c +++ b/arch/m68k/mm/init_mm.c @@ -59,6 +59,8 @@ void __init m68k_setup_node(int node) } #endif pg_data_map[node].bdata = bootmem_node_data + node; + if (node_present_pages(node)) + node_set_state(node, N_NORMAL_MEMORY); node_set_online(node); } diff --git a/arch/mips/sgi-ip27/ip27-memory.c b/arch/mips/sgi-ip27/ip27-memory.c --- a/arch/mips/sgi-ip27/ip27-memory.c +++ b/arch/mips/sgi-ip27/ip27-memory.c @@ -471,6 +471,8 @@ void __init paging_init(void) if (end_pfn > max_low_pfn) max_low_pfn = end_pfn; + if (end_pfn > start_pfn) + node_set_state(node, N_NORMAL_MEMORY); } zones_size[ZONE_NORMAL] = max_low_pfn; free_area_init_nodes(zones_size);