diff options
| -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)); |
