Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1460336 > unrolled thread
| Started by | Zhen Lei <thunder.leizhen@huawei.com> |
|---|---|
| First post | 2016-08-11 11:40 +0200 |
| Last post | 2016-08-22 10:00 +0200 |
| Articles | 3 — 2 participants |
Back to article view | Back to linux.kernel
[PATCH v6 00/14] fix some type infos and bugs for arm64/of numa Zhen Lei <thunder.leizhen@huawei.com> - 2016-08-11 11:40 +0200
[PATCH v6 10/14] arm64/numa: define numa_distance as array to simplify code Zhen Lei <thunder.leizhen@huawei.com> - 2016-08-11 11:40 +0200
Re: [PATCH v6 00/14] fix some type infos and bugs for arm64/of numa "Leizhen (ThunderTown)" <thunder.leizhen@huawei.com> - 2016-08-22 10:00 +0200
| From | Zhen Lei <thunder.leizhen@huawei.com> |
|---|---|
| Date | 2016-08-11 11:40 +0200 |
| Subject | [PATCH v6 00/14] fix some type infos and bugs for arm64/of numa |
| Message-ID | <s4UCZ-208-3@gated-at.bofh.it> |
v5 -> v6: Move memblk nid check from arch/arm64/mm/numa.c into drivers/of/of_numa.c, because this check is arch independent. This modification only related to patch 3, but impacted the contents of patch 7 and 8, other patches have no change. v4 -> v5: This version has no code changes, just add "Acked-by: Rob Herring <robh@kernel.org>" into patches 1, 2, 4, 6, 7, 13, 14. Because these patches rely on some acpi numa patches, and the latter had not been upstreamed in 4.7, but upstreamed in 4.8-rc1, so I resend my patches again. v3 -> v4: 1. Packed three patches of Kefeng Wang, patch6-8. 2. Add 6 new patches(9-15) to enhance the numa on arm64. v2 -> v3: 1. Adjust patch2 and patch5 according to Matthias Brugger's advice, to make the patches looks more well. The final code have no change. v1 -> v2: 1. Base on https://lkml.org/lkml/2016/5/24/679 2. Rewrote of_numa_parse_memory_nodes according to Rob Herring's advice. So that it looks more clear. 3. Rewrote patch 5 because some scenes were not considered before. Kefeng Wang (3): of_numa: Use of_get_next_parent to simplify code of_numa: Use pr_fmt() arm64: numa: Use pr_fmt() Zhen Lei (11): of/numa: remove a duplicated pr_debug information of/numa: fix a memory@ node can only contains one memory block arm64/numa: add nid check for memory block of/numa: remove a duplicated warning arm64/numa: avoid inconsistent information to be printed arm64/numa: support HAVE_SETUP_PER_CPU_AREA arm64/numa: define numa_distance as array to simplify code arm64/numa: support HAVE_MEMORYLESS_NODES arm64/numa: remove some useless code of/numa: remove the constraint on the distances of node pairs Documentation: remove the constraint on the distances of node pairs Documentation/devicetree/bindings/numa.txt | 1 - arch/arm64/Kconfig | 12 ++ arch/arm64/include/asm/numa.h | 1 - arch/arm64/kernel/smp.c | 1 + arch/arm64/mm/numa.c | 223 ++++++++++++++++------------- drivers/of/of_numa.c | 88 ++++++------ 6 files changed, 178 insertions(+), 148 deletions(-) -- 2.5.0
[toc] | [next] | [standalone]
| From | Zhen Lei <thunder.leizhen@huawei.com> |
|---|---|
| Date | 2016-08-11 11:40 +0200 |
| Subject | [PATCH v6 10/14] arm64/numa: define numa_distance as array to simplify code |
| Message-ID | <s4UD1-208-55@gated-at.bofh.it> |
| In reply to | #1460336 |
1. MAX_NUMNODES is base on CONFIG_NODES_SHIFT, the default value of the
latter is very small now.
2. Suppose the default value of MAX_NUMNODES is enlarged to 64, so the
size of numa_distance is 4K, it's still acceptable if run the Image
on other processors.
3. It will make function __node_distance quicker than before.
Signed-off-by: Zhen Lei <thunder.leizhen@huawei.com>
---
arch/arm64/include/asm/numa.h | 1 -
arch/arm64/mm/numa.c | 74 +++----------------------------------------
2 files changed, 5 insertions(+), 70 deletions(-)
diff --git a/arch/arm64/include/asm/numa.h b/arch/arm64/include/asm/numa.h
index 600887e..9b6cc38 100644
--- a/arch/arm64/include/asm/numa.h
+++ b/arch/arm64/include/asm/numa.h
@@ -32,7 +32,6 @@ static inline const struct cpumask *cpumask_of_node(int node)
void __init arm64_numa_init(void);
int __init numa_add_memblk(int nodeid, u64 start, u64 end);
void __init numa_set_distance(int from, int to, int distance);
-void __init numa_free_distance(void);
void __init early_map_cpu_to_node(unsigned int cpu, int nid);
void numa_store_cpu_info(unsigned int cpu);
diff --git a/arch/arm64/mm/numa.c b/arch/arm64/mm/numa.c
index 69aacf4..bd4d26a9 100644
--- a/arch/arm64/mm/numa.c
+++ b/arch/arm64/mm/numa.c
@@ -32,8 +32,7 @@ EXPORT_SYMBOL(node_data);
nodemask_t numa_nodes_parsed __initdata;
static int cpu_to_node_map[NR_CPUS] = { [0 ... NR_CPUS-1] = NUMA_NO_NODE };
-static int numa_distance_cnt;
-static u8 *numa_distance;
+static u8 numa_distance[MAX_NUMNODES][MAX_NUMNODES];
static bool numa_off;
static __init int numa_parse_early_param(char *opt)
@@ -242,59 +241,6 @@ static void __init setup_node_data(int nid, u64 start_pfn, u64 end_pfn)
}
/**
- * numa_free_distance
- *
- * The current table is freed.
- */
-void __init numa_free_distance(void)
-{
- size_t size;
-
- if (!numa_distance)
- return;
-
- size = numa_distance_cnt * numa_distance_cnt *
- sizeof(numa_distance[0]);
-
- memblock_free(__pa(numa_distance), size);
- numa_distance_cnt = 0;
- numa_distance = NULL;
-}
-
-/**
- *
- * Create a new NUMA distance table.
- *
- */
-static int __init numa_alloc_distance(void)
-{
- size_t size;
- u64 phys;
- int i, j;
-
- size = nr_node_ids * nr_node_ids * sizeof(numa_distance[0]);
- phys = memblock_find_in_range(0, PFN_PHYS(max_pfn),
- size, PAGE_SIZE);
- if (WARN_ON(!phys))
- return -ENOMEM;
-
- memblock_reserve(phys, size);
-
- numa_distance = __va(phys);
- numa_distance_cnt = nr_node_ids;
-
- /* fill with the default distances */
- for (i = 0; i < numa_distance_cnt; i++)
- for (j = 0; j < numa_distance_cnt; j++)
- numa_distance[i * numa_distance_cnt + j] = i == j ?
- LOCAL_DISTANCE : REMOTE_DISTANCE;
-
- pr_debug("Initialized distance table, cnt=%d\n", numa_distance_cnt);
-
- return 0;
-}
-
-/**
* numa_set_distance - Set inter node NUMA distance from node to node.
* @from: the 'from' node to set distance
* @to: the 'to' node to set distance
@@ -309,12 +255,7 @@ static int __init numa_alloc_distance(void)
*/
void __init numa_set_distance(int from, int to, int distance)
{
- if (!numa_distance) {
- pr_warn_once("Warning: distance table not allocated yet\n");
- return;
- }
-
- if (from >= numa_distance_cnt || to >= numa_distance_cnt ||
+ if (from >= MAX_NUMNODES || to >= MAX_NUMNODES ||
from < 0 || to < 0) {
pr_warn_once("Warning: node ids are out of bound, from=%d to=%d distance=%d\n",
from, to, distance);
@@ -328,7 +269,7 @@ void __init numa_set_distance(int from, int to, int distance)
return;
}
- numa_distance[from * numa_distance_cnt + to] = distance;
+ numa_distance[from][to] = distance;
}
/**
@@ -336,9 +277,9 @@ void __init numa_set_distance(int from, int to, int distance)
*/
int __node_distance(int from, int to)
{
- if (from >= numa_distance_cnt || to >= numa_distance_cnt)
+ if (from >= MAX_NUMNODES || to >= MAX_NUMNODES)
return from == to ? LOCAL_DISTANCE : REMOTE_DISTANCE;
- return numa_distance[from * numa_distance_cnt + to];
+ return numa_distance[from][to];
}
EXPORT_SYMBOL(__node_distance);
@@ -378,11 +319,6 @@ static int __init numa_init(int (*init_func)(void))
nodes_clear(numa_nodes_parsed);
nodes_clear(node_possible_map);
nodes_clear(node_online_map);
- numa_free_distance();
-
- ret = numa_alloc_distance();
- if (ret < 0)
- return ret;
ret = init_func();
if (ret < 0)
--
2.5.0
[toc] | [prev] | [next] | [standalone]
| From | "Leizhen (ThunderTown)" <thunder.leizhen@huawei.com> |
|---|---|
| Date | 2016-08-22 10:00 +0200 |
| Message-ID | <s8Sjf-3ra-1@gated-at.bofh.it> |
| In reply to | #1460336 |
Hi everybody: Is this patch series can be accepted or still need to be improved? It seems to have been a long time. Thanks, Zhen Lei On 2016/8/11 17:33, Zhen Lei wrote: > v5 -> v6: > Move memblk nid check from arch/arm64/mm/numa.c into drivers/of/of_numa.c, > because this check is arch independent. > > This modification only related to patch 3, but impacted the contents of patch 7 and 8, > other patches have no change. > > v4 -> v5: > This version has no code changes, just add "Acked-by: Rob Herring <robh@kernel.org>" > into patches 1, 2, 4, 6, 7, 13, 14. Because these patches rely on some acpi numa > patches, and the latter had not been upstreamed in 4.7, but upstreamed in 4.8-rc1, > so I resend my patches again. > > v3 -> v4: > 1. Packed three patches of Kefeng Wang, patch6-8. > 2. Add 6 new patches(9-15) to enhance the numa on arm64. > > v2 -> v3: > 1. Adjust patch2 and patch5 according to Matthias Brugger's advice, to make the > patches looks more well. The final code have no change. > > v1 -> v2: > 1. Base on https://lkml.org/lkml/2016/5/24/679 > 2. Rewrote of_numa_parse_memory_nodes according to Rob Herring's advice. So that it looks more clear. > 3. Rewrote patch 5 because some scenes were not considered before. > > Kefeng Wang (3): > of_numa: Use of_get_next_parent to simplify code > of_numa: Use pr_fmt() > arm64: numa: Use pr_fmt() > > Zhen Lei (11): > of/numa: remove a duplicated pr_debug information > of/numa: fix a memory@ node can only contains one memory block > arm64/numa: add nid check for memory block > of/numa: remove a duplicated warning > arm64/numa: avoid inconsistent information to be printed > arm64/numa: support HAVE_SETUP_PER_CPU_AREA > arm64/numa: define numa_distance as array to simplify code > arm64/numa: support HAVE_MEMORYLESS_NODES > arm64/numa: remove some useless code > of/numa: remove the constraint on the distances of node pairs > Documentation: remove the constraint on the distances of node pairs > > Documentation/devicetree/bindings/numa.txt | 1 - > arch/arm64/Kconfig | 12 ++ > arch/arm64/include/asm/numa.h | 1 - > arch/arm64/kernel/smp.c | 1 + > arch/arm64/mm/numa.c | 223 ++++++++++++++++------------- > drivers/of/of_numa.c | 88 ++++++------ > 6 files changed, 178 insertions(+), 148 deletions(-) > > -- > 2.5.0 > > > > . >
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web