mirror of
https://github.com/rd-stuffs/msm-4.14.git
synced 2025-02-20 11:45:48 +08:00
x86/platform/uv/BAU: Disable BAU on single hub configurations
The BAU confers no benefit to a UV system running with only one hub/socket. Permanently disable the BAU driver if there are less than two hubs online to avoid BAU overhead. We have observed failed boots on single-socket UV4 systems caused by BAU that are avoided with this patch. Also, while at it, consolidate initialization error blocks and fix a memory leak. Signed-off-by: Andrew Banman <abanman@hpe.com> Acked-by: Russ Anderson <rja@hpe.com> Acked-by: Mike Travis <mike.travis@hpe.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: tony.ernst@hpe.com Link: http://lkml.kernel.org/r/1500588351-78016-1-git-send-email-abanman@hpe.com [ Minor cleanups. ] Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
parent
0bc73048d7
commit
2fe9a5c6ad
@ -2221,13 +2221,17 @@ static int __init uv_bau_init(void)
|
|||||||
else if (is_uv1_hub())
|
else if (is_uv1_hub())
|
||||||
ops = uv1_bau_ops;
|
ops = uv1_bau_ops;
|
||||||
|
|
||||||
|
nuvhubs = uv_num_possible_blades();
|
||||||
|
if (nuvhubs < 2) {
|
||||||
|
pr_crit("UV: BAU disabled - insufficient hub count\n");
|
||||||
|
goto err_bau_disable;
|
||||||
|
}
|
||||||
|
|
||||||
for_each_possible_cpu(cur_cpu) {
|
for_each_possible_cpu(cur_cpu) {
|
||||||
mask = &per_cpu(uv_flush_tlb_mask, cur_cpu);
|
mask = &per_cpu(uv_flush_tlb_mask, cur_cpu);
|
||||||
zalloc_cpumask_var_node(mask, GFP_KERNEL, cpu_to_node(cur_cpu));
|
zalloc_cpumask_var_node(mask, GFP_KERNEL, cpu_to_node(cur_cpu));
|
||||||
}
|
}
|
||||||
|
|
||||||
nuvhubs = uv_num_possible_blades();
|
|
||||||
|
|
||||||
uv_base_pnode = 0x7fffffff;
|
uv_base_pnode = 0x7fffffff;
|
||||||
for (uvhub = 0; uvhub < nuvhubs; uvhub++) {
|
for (uvhub = 0; uvhub < nuvhubs; uvhub++) {
|
||||||
cpus = uv_blade_nr_possible_cpus(uvhub);
|
cpus = uv_blade_nr_possible_cpus(uvhub);
|
||||||
@ -2240,9 +2244,8 @@ static int __init uv_bau_init(void)
|
|||||||
enable_timeouts();
|
enable_timeouts();
|
||||||
|
|
||||||
if (init_per_cpu(nuvhubs, uv_base_pnode)) {
|
if (init_per_cpu(nuvhubs, uv_base_pnode)) {
|
||||||
set_bau_off();
|
pr_crit("UV: BAU disabled - per CPU init failed\n");
|
||||||
nobau_perm = 1;
|
goto err_bau_disable;
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
vector = UV_BAU_MESSAGE;
|
vector = UV_BAU_MESSAGE;
|
||||||
@ -2268,6 +2271,16 @@ static int __init uv_bau_init(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
err_bau_disable:
|
||||||
|
|
||||||
|
for_each_possible_cpu(cur_cpu)
|
||||||
|
free_cpumask_var(per_cpu(uv_flush_tlb_mask, cur_cpu));
|
||||||
|
|
||||||
|
set_bau_off();
|
||||||
|
nobau_perm = 1;
|
||||||
|
|
||||||
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
core_initcall(uv_bau_init);
|
core_initcall(uv_bau_init);
|
||||||
fs_initcall(uv_ptc_init);
|
fs_initcall(uv_ptc_init);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user