diff options
-rw-r--r-- | arch/x86/platform/uv/tlb_uv.c | 16 |
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); |