All of lore.kernel.org
 help / color / mirror / Atom feed
From: Wen Congyang <wency@cn.fujitsu.com>
To: wujianguo <wujianguo106@gmail.com>
Cc: tony.luck@intel.com, fenghua.yu@intel.com,
	linux-ia64@vger.kernel.org, linux-kernel@vger.kernel.org,
	jiang.liu@huawei.com, guohanjun@huawei.com, qiuxishi@huawei.com,
	liuj97@gmail.com
Subject: Re: [PATCH]mm/ia64: fix a node distance bug
Date: Mon, 20 Aug 2012 07:06:48 +0000	[thread overview]
Message-ID: <5031E208.2080202@cn.fujitsu.com> (raw)
In-Reply-To: <5031D763.9010808@gmail.com>

At 08/20/2012 02:21 PM, wujianguo Wrote:
> From: Jianguo Wu <wujianguo@huawei.com>
> 
> Hi all,
> 	When doing memory-hot-plug, We found node distance is wrong after offline
> a node in IA64 platform. For example system has 4 nodes:
> node distances:
> node   0   1   2   3
>   0:  10  21  21  32
>   1:  21  10  32  21
>   2:  21  32  10  21
>   3:  32  21  21  10
> 
> linux-drf:/sys/devices/system/node/node0 # cat distance
> 10  21  21  32
> linux-drf:/sys/devices/system/node/node1 # cat distance
> 21  10  32  21
> 
> After offline node2:
> linux-drf:/sys/devices/system/node/node0 # cat distance
> 10 21 32
> linux-drf:/sys/devices/system/node/node1 # cat distance
> 32 21 32	--------->expected value is: 21  10  21
> 
> In arch IA, we have following definition:
> extern u8 numa_slit[MAX_NUMNODES * MAX_NUMNODES];
> #define node_distance(from,to) (numa_slit[(from) * num_online_nodes() + (to)])
> 
> node distance is setup as following:
> acpi_numa_arch_fixup()
> {
> 	...
> 	memset(numa_slit, -1, sizeof(numa_slit));
> 	for (i = 0; i < slit_table->locality_count; i++) {
> 		if (!pxm_bit_test(i))
> 			continue;
> 		node_from = pxm_to_node(i);
> 		for (j = 0; j < slit_table->locality_count; j++) {
> 			if (!pxm_bit_test(j))
> 				continue;
> 			node_to = pxm_to_node(j);
> 			node_distance(node_from, node_to) > 			    slit_table->entry[i * slit_table->locality_count + j];
> 		}
> 	}
> 	...
> }
> 	num_online_nodes() is a variable value, during system boot the return vale is 4,
> but after offline node2, the return value is 3, so we read a wrong node distance value.
> This patch is trying to fix this bug.
> 
> Signed-off-by: Jianguo Wu <wujianguo@huawei.com>
> ---
>  arch/ia64/include/asm/numa.h |    2 +-
>  1 files changed, 1 insertions(+), 1 deletions(-)
> 
> diff --git a/arch/ia64/include/asm/numa.h b/arch/ia64/include/asm/numa.h
> index 6a8a27c..2e27ef1 100644
> --- a/arch/ia64/include/asm/numa.h
> +++ b/arch/ia64/include/asm/numa.h
> @@ -59,7 +59,7 @@ extern struct node_cpuid_s node_cpuid[NR_CPUS];
>   */
> 
>  extern u8 numa_slit[MAX_NUMNODES * MAX_NUMNODES];
> -#define node_distance(from,to) (numa_slit[(from) * num_online_nodes() + (to)])
> +#define node_distance(from,to) (numa_slit[(from) * MAX_NUMNODES + (to)])

Hmm, MAX_NUMNODES is too large. I think num_possible_nodes() is better.

Thanks
Wen Congyang

> 
>  extern int paddr_to_nid(unsigned long paddr);
> 


WARNING: multiple messages have this Message-ID (diff)
From: Wen Congyang <wency@cn.fujitsu.com>
To: wujianguo <wujianguo106@gmail.com>
Cc: tony.luck@intel.com, fenghua.yu@intel.com,
	linux-ia64@vger.kernel.org, linux-kernel@vger.kernel.org,
	jiang.liu@huawei.com, guohanjun@huawei.com, qiuxishi@huawei.com,
	liuj97@gmail.com
Subject: Re: [PATCH]mm/ia64: fix a node distance bug
Date: Mon, 20 Aug 2012 15:06:48 +0800	[thread overview]
Message-ID: <5031E208.2080202@cn.fujitsu.com> (raw)
In-Reply-To: <5031D763.9010808@gmail.com>

At 08/20/2012 02:21 PM, wujianguo Wrote:
> From: Jianguo Wu <wujianguo@huawei.com>
> 
> Hi all,
> 	When doing memory-hot-plug, We found node distance is wrong after offline
> a node in IA64 platform. For example system has 4 nodes:
> node distances:
> node   0   1   2   3
>   0:  10  21  21  32
>   1:  21  10  32  21
>   2:  21  32  10  21
>   3:  32  21  21  10
> 
> linux-drf:/sys/devices/system/node/node0 # cat distance
> 10  21  21  32
> linux-drf:/sys/devices/system/node/node1 # cat distance
> 21  10  32  21
> 
> After offline node2:
> linux-drf:/sys/devices/system/node/node0 # cat distance
> 10 21 32
> linux-drf:/sys/devices/system/node/node1 # cat distance
> 32 21 32	--------->expected value is: 21  10  21
> 
> In arch IA, we have following definition:
> extern u8 numa_slit[MAX_NUMNODES * MAX_NUMNODES];
> #define node_distance(from,to) (numa_slit[(from) * num_online_nodes() + (to)])
> 
> node distance is setup as following:
> acpi_numa_arch_fixup()
> {
> 	...
> 	memset(numa_slit, -1, sizeof(numa_slit));
> 	for (i = 0; i < slit_table->locality_count; i++) {
> 		if (!pxm_bit_test(i))
> 			continue;
> 		node_from = pxm_to_node(i);
> 		for (j = 0; j < slit_table->locality_count; j++) {
> 			if (!pxm_bit_test(j))
> 				continue;
> 			node_to = pxm_to_node(j);
> 			node_distance(node_from, node_to) =
> 			    slit_table->entry[i * slit_table->locality_count + j];
> 		}
> 	}
> 	...
> }
> 	num_online_nodes() is a variable value, during system boot the return vale is 4,
> but after offline node2, the return value is 3, so we read a wrong node distance value.
> This patch is trying to fix this bug.
> 
> Signed-off-by: Jianguo Wu <wujianguo@huawei.com>
> ---
>  arch/ia64/include/asm/numa.h |    2 +-
>  1 files changed, 1 insertions(+), 1 deletions(-)
> 
> diff --git a/arch/ia64/include/asm/numa.h b/arch/ia64/include/asm/numa.h
> index 6a8a27c..2e27ef1 100644
> --- a/arch/ia64/include/asm/numa.h
> +++ b/arch/ia64/include/asm/numa.h
> @@ -59,7 +59,7 @@ extern struct node_cpuid_s node_cpuid[NR_CPUS];
>   */
> 
>  extern u8 numa_slit[MAX_NUMNODES * MAX_NUMNODES];
> -#define node_distance(from,to) (numa_slit[(from) * num_online_nodes() + (to)])
> +#define node_distance(from,to) (numa_slit[(from) * MAX_NUMNODES + (to)])

Hmm, MAX_NUMNODES is too large. I think num_possible_nodes() is better.

Thanks
Wen Congyang

> 
>  extern int paddr_to_nid(unsigned long paddr);
> 


  reply	other threads:[~2012-08-20  7:06 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-08-20  6:21 [PATCH]mm/ia64: fix a node distance bug wujianguo
2012-08-20  6:21 ` wujianguo
2012-08-20  7:06 ` Wen Congyang [this message]
2012-08-20  7:06   ` Wen Congyang
2012-08-20 13:54   ` Jianguo Wu
2012-08-20 13:54     ` Jianguo Wu

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=5031E208.2080202@cn.fujitsu.com \
    --to=wency@cn.fujitsu.com \
    --cc=fenghua.yu@intel.com \
    --cc=guohanjun@huawei.com \
    --cc=jiang.liu@huawei.com \
    --cc=linux-ia64@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=liuj97@gmail.com \
    --cc=qiuxishi@huawei.com \
    --cc=tony.luck@intel.com \
    --cc=wujianguo106@gmail.com \
    /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.