Messages in this thread Patch in this message | | | From | zijun_hu <> | Subject | [PATCH 1/1] mm/percpu.c: simplify grouping cpu logic in pcpu_build_alloc_info() | Date | Sat, 24 Sep 2016 02:15:09 +0800 |
| |
From: zijun_hu <zijun_hu@htc.com>
simplify grouping cpu logic in pcpu_build_alloc_info() to improve readability and performance, it discards the goto statement too
for every possible cpu, decide whether it can share group id of any lower index CPU, use the group id if so, otherwise a new group id is allocated to it
Signed-off-by: zijun_hu <zijun_hu@htc.com> --- mm/percpu.c | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-)
diff --git a/mm/percpu.c b/mm/percpu.c index 9903830aaebb..fcaaac977954 100644 --- a/mm/percpu.c +++ b/mm/percpu.c @@ -1824,23 +1824,25 @@ static struct pcpu_alloc_info * __init pcpu_build_alloc_info( max_upa = upa; /* group cpus according to their proximity */ - for_each_possible_cpu(cpu) { - group = 0; - next_group: + group = 0; + for_each_possible_cpu(cpu) for_each_possible_cpu(tcpu) { - if (cpu == tcpu) - break; - if (group_map[tcpu] == group && cpu_distance_fn && - (cpu_distance_fn(cpu, tcpu) > LOCAL_DISTANCE || - cpu_distance_fn(tcpu, cpu) > LOCAL_DISTANCE)) { + if (tcpu == cpu) { + group_map[cpu] = group; + group_cnt[group] = 1; group++; - nr_groups = max(nr_groups, group + 1); - goto next_group; + break; + } + + if (!cpu_distance_fn || + (cpu_distance_fn(cpu, tcpu) == LOCAL_DISTANCE && + cpu_distance_fn(tcpu, cpu) == LOCAL_DISTANCE)) { + group_map[cpu] = group_map[tcpu]; + group_cnt[group_map[cpu]]++; + break; } } - group_map[cpu] = group; - group_cnt[group]++; - } + nr_groups = group; /* * Expand unit size until address space usage goes over 75% -- 1.9.1
| |