[PATCH] Fix bug in ppc64 dynamic hugepage support
authorDavid Gibson <dwg@au1.ibm.com>
Wed, 31 Aug 2005 04:34:05 +0000 (14:34 +1000)
committerLinus Torvalds <torvalds@evo.osdl.org>
Thu, 1 Sep 2005 17:48:20 +0000 (10:48 -0700)
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>
arch/ppc64/mm/slb_low.S

index bab2558..698d6b9 100644 (file)
@@ -97,25 +97,21 @@ BEGIN_FTR_SECTION
        lhz     r9,PACAHIGHHTLBAREAS(r13)
        srdi    r11,r3,(HTLB_AREA_SHIFT-SID_SHIFT)
        srd     r9,r9,r11
-       andi.   r9,r9,1
-       bne     5f
+       lhz     r11,PACALOWHTLBAREAS(r13)
+       srd     r11,r11,r3
+       or      r9,r9,r11
+END_FTR_SECTION_IFSET(CPU_FTR_16M_PAGE)
+#endif /* CONFIG_HUGETLB_PAGE */
 
        li      r11,SLB_VSID_USER
 
-       cmpldi  r3,16
-       bge     6f
-
-       lhz     r9,PACALOWHTLBAREAS(r13)
-       srd     r9,r9,r3
-       andi.   r9,r9,1
-
-       beq     6f
-
-5:     li      r11,SLB_VSID_USER|SLB_VSID_L
+#ifdef CONFIG_HUGETLB_PAGE
+BEGIN_FTR_SECTION
+       rldimi  r11,r9,8,55             /* shift masked bit into SLB_VSID_L */
 END_FTR_SECTION_IFSET(CPU_FTR_16M_PAGE)
 #endif /* CONFIG_HUGETLB_PAGE */
 
-6:     ld      r9,PACACONTEXTID(r13)
+       ld      r9,PACACONTEXTID(r13)
        rldimi  r3,r9,USER_ESID_BITS,0
 
 9:     /* r3 = protovsid, r11 = flags, r10 = esid_data, cr7 = <>KERNELBASE */