aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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);