aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew Banman <abanman@sgi.com>2016-09-21 12:09:20 -0400
committerIngo Molnar <mingo@kernel.org>2016-09-22 05:16:15 -0400
commit6d78059bbc0ace5461938aaea8cda95eb6719898 (patch)
treeeab1d365aaaa198aad847d203590f59b2535d2fe
parente879c1124a6c5c3367f20a254909605e7ee938c1 (diff)
x86/platform/uv/BAU: Fix payload queue setup on UV4 hardware
The BAU on UV4 does not need to maintain the payload queue tail pointer. Do not initialize the tail pointer MMR on UV4. Note that write_payload_tail is not an abstracted BAU function since it is an operation specific to pre-UV4 versions. Then we must switch on the UV version to control its usage, for which we use uvhub_version rather than is_uv*_hub because it is quicker/more concise. Signed-off-by: Andrew Banman <abanman@sgi.com> Acked-by: Thomas Gleixner <tglx@linutronix.de> Acked-by: Mike Travis <travis@sgi.com> Acked-by: Dimitri Sivanich <sivanich@sgi.com> Acked-by: Thomas Gleixner <tglx@linutronix.de> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: akpm@linux-foundation.org Cc: rja@sgi.com Link: http://lkml.kernel.org/r/1474474161-265604-10-git-send-email-abanman@sgi.com Signed-off-by: Ingo Molnar <mingo@kernel.org>
-rw-r--r--arch/x86/platform/uv/tlb_uv.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/arch/x86/platform/uv/tlb_uv.c b/arch/x86/platform/uv/tlb_uv.c
index 72a5de7cf2e0..7ca0e5c31477 100644
--- a/arch/x86/platform/uv/tlb_uv.c
+++ b/arch/x86/platform/uv/tlb_uv.c
@@ -1826,11 +1826,19 @@ static void pq_init(int node, int pnode)
1826 1826
1827 first = ops.bau_gpa_to_offset(uv_gpa(pqp)); 1827 first = ops.bau_gpa_to_offset(uv_gpa(pqp));
1828 last = ops.bau_gpa_to_offset(uv_gpa(pqp + (DEST_Q_SIZE - 1))); 1828 last = ops.bau_gpa_to_offset(uv_gpa(pqp + (DEST_Q_SIZE - 1)));
1829 tail = first;
1830 gnode = uv_gpa_to_gnode(uv_gpa(pqp));
1831 first = (gnode << UV_PAYLOADQ_GNODE_SHIFT) | tail;
1832 1829
1833 write_mmr_payload_tail(pnode, tail); 1830 /*
1831 * Pre UV4, the gnode is required to locate the payload queue
1832 * and the payload queue tail must be maintained by the kernel.
1833 */
1834 bcp = &per_cpu(bau_control, smp_processor_id());
1835 if (bcp->uvhub_version <= 3) {
1836 tail = first;
1837 gnode = uv_gpa_to_gnode(uv_gpa(pqp));
1838 first = (gnode << UV_PAYLOADQ_GNODE_SHIFT) | tail;
1839 write_mmr_payload_tail(pnode, tail);
1840 }
1841
1834 ops.write_payload_first(pnode, first); 1842 ops.write_payload_first(pnode, first);
1835 ops.write_payload_last(pnode, last); 1843 ops.write_payload_last(pnode, last);
1836 ops.write_g_sw_ack(pnode, 0xffffUL); 1844 ops.write_g_sw_ack(pnode, 0xffffUL);