From: Andrew Morton <akpm@linux-foundation.org> To: Yinghai Lu <yinghai@kernel.org> Cc: Tejun Heo <tj@kernel.org>, Russ Anderson <rja@sgi.com>, linux-mm@kvack.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH] memblock, numa: Binary search node id Date: Thu, 15 Aug 2013 13:43:48 -0700 [thread overview] Message-ID: <20130815134348.bb119a7987af0bb64ed77b7b@linux-foundation.org> (raw) In-Reply-To: <1376545589-32129-1-git-send-email-yinghai@kernel.org> On Wed, 14 Aug 2013 22:46:29 -0700 Yinghai Lu <yinghai@kernel.org> wrote: > Current early_pfn_to_nid() on arch that support memblock go > over memblock.memory one by one, so will take too many try > near the end. > > We can use existing memblock_search to find the node id for > given pfn, that could save some time on bigger system that > have many entries memblock.memory array. Looks nice. I wonder how much difference it makes. > ... > > --- linux-2.6.orig/include/linux/memblock.h > +++ linux-2.6/include/linux/memblock.h > @@ -60,6 +60,8 @@ int memblock_reserve(phys_addr_t base, p > void memblock_trim_memory(phys_addr_t align); > > #ifdef CONFIG_HAVE_MEMBLOCK_NODE_MAP > +int memblock_search_pfn_nid(unsigned long pfn, unsigned long *start_pfn, > + unsigned long *end_pfn); > void __next_mem_pfn_range(int *idx, int nid, unsigned long *out_start_pfn, > unsigned long *out_end_pfn, int *out_nid); > > Index: linux-2.6/mm/memblock.c > =================================================================== > --- linux-2.6.orig/mm/memblock.c > +++ linux-2.6/mm/memblock.c > @@ -914,6 +914,24 @@ int __init_memblock memblock_is_memory(p > return memblock_search(&memblock.memory, addr) != -1; > } > > +#ifdef CONFIG_HAVE_MEMBLOCK_NODE_MAP > +int __init_memblock memblock_search_pfn_nid(unsigned long pfn, > + unsigned long *start_pfn, unsigned long *end_pfn) > +{ > + struct memblock_type *type = &memblock.memory; > + int mid = memblock_search(type, (phys_addr_t)pfn << PAGE_SHIFT); > + > + if (mid == -1) > + return -1; > + > + *start_pfn = type->regions[mid].base >> PAGE_SHIFT; > + *end_pfn = (type->regions[mid].base + type->regions[mid].size) > + >> PAGE_SHIFT; > + > + return type->regions[mid].nid; > +} > +#endif This function will have no callers if CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID=y. That's not too bad as the function is __init_memblock. But this depends on CONFIG_ARCH_DISCARD_MEMBLOCK. Messy :(
WARNING: multiple messages have this Message-ID (diff)
From: Andrew Morton <akpm@linux-foundation.org> To: Yinghai Lu <yinghai@kernel.org> Cc: Tejun Heo <tj@kernel.org>, Russ Anderson <rja@sgi.com>, linux-mm@kvack.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH] memblock, numa: Binary search node id Date: Thu, 15 Aug 2013 13:43:48 -0700 [thread overview] Message-ID: <20130815134348.bb119a7987af0bb64ed77b7b@linux-foundation.org> (raw) In-Reply-To: <1376545589-32129-1-git-send-email-yinghai@kernel.org> On Wed, 14 Aug 2013 22:46:29 -0700 Yinghai Lu <yinghai@kernel.org> wrote: > Current early_pfn_to_nid() on arch that support memblock go > over memblock.memory one by one, so will take too many try > near the end. > > We can use existing memblock_search to find the node id for > given pfn, that could save some time on bigger system that > have many entries memblock.memory array. Looks nice. I wonder how much difference it makes. > ... > > --- linux-2.6.orig/include/linux/memblock.h > +++ linux-2.6/include/linux/memblock.h > @@ -60,6 +60,8 @@ int memblock_reserve(phys_addr_t base, p > void memblock_trim_memory(phys_addr_t align); > > #ifdef CONFIG_HAVE_MEMBLOCK_NODE_MAP > +int memblock_search_pfn_nid(unsigned long pfn, unsigned long *start_pfn, > + unsigned long *end_pfn); > void __next_mem_pfn_range(int *idx, int nid, unsigned long *out_start_pfn, > unsigned long *out_end_pfn, int *out_nid); > > Index: linux-2.6/mm/memblock.c > =================================================================== > --- linux-2.6.orig/mm/memblock.c > +++ linux-2.6/mm/memblock.c > @@ -914,6 +914,24 @@ int __init_memblock memblock_is_memory(p > return memblock_search(&memblock.memory, addr) != -1; > } > > +#ifdef CONFIG_HAVE_MEMBLOCK_NODE_MAP > +int __init_memblock memblock_search_pfn_nid(unsigned long pfn, > + unsigned long *start_pfn, unsigned long *end_pfn) > +{ > + struct memblock_type *type = &memblock.memory; > + int mid = memblock_search(type, (phys_addr_t)pfn << PAGE_SHIFT); > + > + if (mid == -1) > + return -1; > + > + *start_pfn = type->regions[mid].base >> PAGE_SHIFT; > + *end_pfn = (type->regions[mid].base + type->regions[mid].size) > + >> PAGE_SHIFT; > + > + return type->regions[mid].nid; > +} > +#endif This function will have no callers if CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID=y. That's not too bad as the function is __init_memblock. But this depends on CONFIG_ARCH_DISCARD_MEMBLOCK. Messy :( -- 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: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2013-08-15 20:43 UTC|newest] Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top 2013-08-15 5:46 [PATCH] memblock, numa: Binary search node id Yinghai Lu 2013-08-15 5:46 ` Yinghai Lu 2013-08-15 20:43 ` Andrew Morton [this message] 2013-08-15 20:43 ` Andrew Morton 2013-08-15 21:06 ` Yinghai Lu 2013-08-15 21:06 ` Yinghai Lu 2013-08-15 21:37 ` Russ Anderson 2013-08-15 21:37 ` Russ Anderson 2013-08-16 19:01 ` Russ Anderson 2013-08-16 19:01 ` Russ Anderson 2013-08-16 19:15 ` Yinghai Lu 2013-08-16 19:15 ` Yinghai Lu 2013-08-16 19:31 ` Russ Anderson 2013-08-16 19:31 ` Russ Anderson
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20130815134348.bb119a7987af0bb64ed77b7b@linux-foundation.org \ --to=akpm@linux-foundation.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-mm@kvack.org \ --cc=rja@sgi.com \ --cc=tj@kernel.org \ --cc=yinghai@kernel.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.