Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d059f9fa authored by Cliff Wickman's avatar Cliff Wickman Committed by Ingo Molnar
Browse files

x86/UV2: Fix BAU destination timeout initialization



Move the call to enable_timeouts() forward so that
BAU_MISC_CONTROL is initialized before using it in
calculate_destination_timeout().

Fix the calculation of a BAU destination timeout
for UV2 (in calculate_destination_timeout()).

Signed-off-by: default avatarCliff Wickman <cpw@sgi.com>
Link: http://lkml.kernel.org/r/20120116211848.GB5767@sgi.com


Cc: <stable@kernel.org>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent da87c937
Loading
Loading
Loading
Loading
+7 −6
Original line number Original line Diff line number Diff line
@@ -1617,14 +1617,14 @@ static int calculate_destination_timeout(void)
		ts_ns = base * mult1 * mult2;
		ts_ns = base * mult1 * mult2;
		ret = ts_ns / 1000;
		ret = ts_ns / 1000;
	} else {
	} else {
		/* 4 bits  0/1 for 10/80us, 3 bits of multiplier */
		/* 4 bits  0/1 for 10/80us base, 3 bits of multiplier */
		mmr_image = uv_read_local_mmr(UVH_AGING_PRESCALE_SEL);
		mmr_image = uv_read_local_mmr(UVH_LB_BAU_MISC_CONTROL);
		mmr_image = (mmr_image & UV_SA_MASK) >> UV_SA_SHFT;
		mmr_image = (mmr_image & UV_SA_MASK) >> UV_SA_SHFT;
		if (mmr_image & (1L << UV2_ACK_UNITS_SHFT))
		if (mmr_image & (1L << UV2_ACK_UNITS_SHFT))
			mult1 = 80;
			base = 80;
		else
		else
			mult1 = 10;
			base = 10;
		base = mmr_image & UV2_ACK_MASK;
		mult1 = mmr_image & UV2_ACK_MASK;
		ret = mult1 * base;
		ret = mult1 * base;
	}
	}
	return ret;
	return ret;
@@ -1886,6 +1886,8 @@ static int __init uv_bau_init(void)
			uv_base_pnode = uv_blade_to_pnode(uvhub);
			uv_base_pnode = uv_blade_to_pnode(uvhub);
	}
	}


	enable_timeouts();

	if (init_per_cpu(nuvhubs, uv_base_pnode)) {
	if (init_per_cpu(nuvhubs, uv_base_pnode)) {
		nobau = 1;
		nobau = 1;
		return 0;
		return 0;
@@ -1896,7 +1898,6 @@ static int __init uv_bau_init(void)
		if (uv_blade_nr_possible_cpus(uvhub))
		if (uv_blade_nr_possible_cpus(uvhub))
			init_uvhub(uvhub, vector, uv_base_pnode);
			init_uvhub(uvhub, vector, uv_base_pnode);


	enable_timeouts();
	alloc_intr_gate(vector, uv_bau_message_intr1);
	alloc_intr_gate(vector, uv_bau_message_intr1);


	for_each_possible_blade(uvhub) {
	for_each_possible_blade(uvhub) {