All of lore.kernel.org
 help / color / mirror / Atom feed
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>

  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: link
Be 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.