Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 319e76a1 authored by David Gibson's avatar David Gibson Committed by Linus Torvalds
Browse files

[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: default avatarDavid Gibson <david@gibson.dropbear.id.au>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 7eaa414e
Loading
Loading
Loading
Loading
+9 −13
Original line number Diff line number Diff line
@@ -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 */