diff options
Diffstat (limited to 'arch/x86/kernel/tlb_uv.c')
-rw-r--r-- | arch/x86/kernel/tlb_uv.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/arch/x86/kernel/tlb_uv.c b/arch/x86/kernel/tlb_uv.c index 98307f953492..78422336ddea 100644 --- a/arch/x86/kernel/tlb_uv.c +++ b/arch/x86/kernel/tlb_uv.c | |||
@@ -717,7 +717,7 @@ uv_activation_descriptor_init(int node, int pnode) | |||
717 | adp = (struct bau_desc *)kmalloc_node(16384, GFP_KERNEL, node); | 717 | adp = (struct bau_desc *)kmalloc_node(16384, GFP_KERNEL, node); |
718 | BUG_ON(!adp); | 718 | BUG_ON(!adp); |
719 | 719 | ||
720 | pa = __pa((unsigned long)adp); | 720 | pa = uv_gpa(adp); /* need the real nasid*/ |
721 | n = pa >> uv_nshift; | 721 | n = pa >> uv_nshift; |
722 | m = pa & uv_mmask; | 722 | m = pa & uv_mmask; |
723 | 723 | ||
@@ -754,6 +754,8 @@ static struct bau_payload_queue_entry * __init | |||
754 | uv_payload_queue_init(int node, int pnode, struct bau_control *bau_tablesp) | 754 | uv_payload_queue_init(int node, int pnode, struct bau_control *bau_tablesp) |
755 | { | 755 | { |
756 | struct bau_payload_queue_entry *pqp; | 756 | struct bau_payload_queue_entry *pqp; |
757 | unsigned long pa; | ||
758 | int pn; | ||
757 | char *cp; | 759 | char *cp; |
758 | 760 | ||
759 | pqp = (struct bau_payload_queue_entry *) kmalloc_node( | 761 | pqp = (struct bau_payload_queue_entry *) kmalloc_node( |
@@ -764,10 +766,14 @@ uv_payload_queue_init(int node, int pnode, struct bau_control *bau_tablesp) | |||
764 | cp = (char *)pqp + 31; | 766 | cp = (char *)pqp + 31; |
765 | pqp = (struct bau_payload_queue_entry *)(((unsigned long)cp >> 5) << 5); | 767 | pqp = (struct bau_payload_queue_entry *)(((unsigned long)cp >> 5) << 5); |
766 | bau_tablesp->va_queue_first = pqp; | 768 | bau_tablesp->va_queue_first = pqp; |
769 | /* | ||
770 | * need the pnode of where the memory was really allocated | ||
771 | */ | ||
772 | pa = uv_gpa(pqp); | ||
773 | pn = pa >> uv_nshift; | ||
767 | uv_write_global_mmr64(pnode, | 774 | uv_write_global_mmr64(pnode, |
768 | UVH_LB_BAU_INTD_PAYLOAD_QUEUE_FIRST, | 775 | UVH_LB_BAU_INTD_PAYLOAD_QUEUE_FIRST, |
769 | ((unsigned long)pnode << | 776 | ((unsigned long)pn << UV_PAYLOADQ_PNODE_SHIFT) | |
770 | UV_PAYLOADQ_PNODE_SHIFT) | | ||
771 | uv_physnodeaddr(pqp)); | 777 | uv_physnodeaddr(pqp)); |
772 | uv_write_global_mmr64(pnode, UVH_LB_BAU_INTD_PAYLOAD_QUEUE_TAIL, | 778 | uv_write_global_mmr64(pnode, UVH_LB_BAU_INTD_PAYLOAD_QUEUE_TAIL, |
773 | uv_physnodeaddr(pqp)); | 779 | uv_physnodeaddr(pqp)); |