diff options
author | David Gibson <dwg@au1.ibm.com> | 2005-08-31 00:34:05 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@evo.osdl.org> | 2005-09-01 13:48:20 -0400 |
commit | 319e76a1ae835c34a2838c2bfebe3db4d5a6b387 (patch) | |
tree | 7e4ce062242df4690c6711ae1274d76e8ef5fce9 /arch/ppc64 | |
parent | 7eaa414ee86cda4c153002ed218b9a0ad17f7de1 (diff) |
[PATCH] Fix bug in ppc64 dynamic hugepage support
In adjusting the logic for SLB miss for the dynamic hugepage stuff, I
messed up the !CONFIG_HUGETLB_PAGE case, failing to set the SLB flags
properly.
This fixes it. It also streamlines the logic for the HUGETLB_PAGE case
(removing a couple of branches) while we're at it.
Booted, and roughly tested on POWER5 (with and without HUGETLB_PAGE),
iSeries/RS64 (no hugepage available), and G5 (with and without
HUGETLB_PAGE).
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'arch/ppc64')
-rw-r--r-- | arch/ppc64/mm/slb_low.S | 22 |
1 files changed, 9 insertions, 13 deletions
diff --git a/arch/ppc64/mm/slb_low.S b/arch/ppc64/mm/slb_low.S index bab255889c58..698d6b9ed6d1 100644 --- a/arch/ppc64/mm/slb_low.S +++ b/arch/ppc64/mm/slb_low.S | |||
@@ -97,25 +97,21 @@ BEGIN_FTR_SECTION | |||
97 | lhz r9,PACAHIGHHTLBAREAS(r13) | 97 | lhz r9,PACAHIGHHTLBAREAS(r13) |
98 | srdi r11,r3,(HTLB_AREA_SHIFT-SID_SHIFT) | 98 | srdi r11,r3,(HTLB_AREA_SHIFT-SID_SHIFT) |
99 | srd r9,r9,r11 | 99 | srd r9,r9,r11 |
100 | andi. r9,r9,1 | 100 | lhz r11,PACALOWHTLBAREAS(r13) |
101 | bne 5f | 101 | srd r11,r11,r3 |
102 | or r9,r9,r11 | ||
103 | END_FTR_SECTION_IFSET(CPU_FTR_16M_PAGE) | ||
104 | #endif /* CONFIG_HUGETLB_PAGE */ | ||
102 | 105 | ||
103 | li r11,SLB_VSID_USER | 106 | li r11,SLB_VSID_USER |
104 | 107 | ||
105 | cmpldi r3,16 | 108 | #ifdef CONFIG_HUGETLB_PAGE |
106 | bge 6f | 109 | BEGIN_FTR_SECTION |
107 | 110 | rldimi r11,r9,8,55 /* shift masked bit into SLB_VSID_L */ | |
108 | lhz r9,PACALOWHTLBAREAS(r13) | ||
109 | srd r9,r9,r3 | ||
110 | andi. r9,r9,1 | ||
111 | |||
112 | beq 6f | ||
113 | |||
114 | 5: li r11,SLB_VSID_USER|SLB_VSID_L | ||
115 | END_FTR_SECTION_IFSET(CPU_FTR_16M_PAGE) | 111 | END_FTR_SECTION_IFSET(CPU_FTR_16M_PAGE) |
116 | #endif /* CONFIG_HUGETLB_PAGE */ | 112 | #endif /* CONFIG_HUGETLB_PAGE */ |
117 | 113 | ||
118 | 6: ld r9,PACACONTEXTID(r13) | 114 | ld r9,PACACONTEXTID(r13) |
119 | rldimi r3,r9,USER_ESID_BITS,0 | 115 | rldimi r3,r9,USER_ESID_BITS,0 |
120 | 116 | ||
121 | 9: /* r3 = protovsid, r11 = flags, r10 = esid_data, cr7 = <>KERNELBASE */ | 117 | 9: /* r3 = protovsid, r11 = flags, r10 = esid_data, cr7 = <>KERNELBASE */ |