|
@@ -40,7 +40,6 @@ static int timeout_base_ns[] = {
|
|
|
static int timeout_us;
|
|
|
static bool nobau = true;
|
|
|
static int nobau_perm;
|
|
|
-static cycles_t congested_cycles;
|
|
|
|
|
|
/* tunables: */
|
|
|
static int max_concurr = MAX_BAU_CONCURRENT;
|
|
@@ -829,10 +828,10 @@ static void record_send_stats(cycles_t time1, cycles_t time2,
|
|
|
if ((completion_status == FLUSH_COMPLETE) && (try == 1)) {
|
|
|
bcp->period_requests++;
|
|
|
bcp->period_time += elapsed;
|
|
|
- if ((elapsed > congested_cycles) &&
|
|
|
+ if ((elapsed > usec_2_cycles(bcp->cong_response_us)) &&
|
|
|
(bcp->period_requests > bcp->cong_reps) &&
|
|
|
((bcp->period_time / bcp->period_requests) >
|
|
|
- congested_cycles)) {
|
|
|
+ usec_2_cycles(bcp->cong_response_us))) {
|
|
|
stat->s_congested++;
|
|
|
disable_for_period(bcp, stat);
|
|
|
}
|
|
@@ -2222,14 +2221,17 @@ static int __init uv_bau_init(void)
|
|
|
else if (is_uv1_hub())
|
|
|
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) {
|
|
|
mask = &per_cpu(uv_flush_tlb_mask, cur_cpu);
|
|
|
zalloc_cpumask_var_node(mask, GFP_KERNEL, cpu_to_node(cur_cpu));
|
|
|
}
|
|
|
|
|
|
- nuvhubs = uv_num_possible_blades();
|
|
|
- congested_cycles = usec_2_cycles(congested_respns_us);
|
|
|
-
|
|
|
uv_base_pnode = 0x7fffffff;
|
|
|
for (uvhub = 0; uvhub < nuvhubs; uvhub++) {
|
|
|
cpus = uv_blade_nr_possible_cpus(uvhub);
|
|
@@ -2242,9 +2244,8 @@ static int __init uv_bau_init(void)
|
|
|
enable_timeouts();
|
|
|
|
|
|
if (init_per_cpu(nuvhubs, uv_base_pnode)) {
|
|
|
- set_bau_off();
|
|
|
- nobau_perm = 1;
|
|
|
- return 0;
|
|
|
+ pr_crit("UV: BAU disabled - per CPU init failed\n");
|
|
|
+ goto err_bau_disable;
|
|
|
}
|
|
|
|
|
|
vector = UV_BAU_MESSAGE;
|
|
@@ -2270,6 +2271,16 @@ static int __init uv_bau_init(void)
|
|
|
}
|
|
|
|
|
|
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);
|
|
|
fs_initcall(uv_ptc_init);
|