Module Name:    src
Committed By:   matt
Date:           Wed Jan 26 08:52:27 UTC 2011

Modified Files:
        src/sys/arch/macppc/macppc [matt-nb5-pq3]: rbus_machdep.c
        src/sys/arch/powerpc/include/oea [matt-nb5-pq3]: bat.h
        src/sys/arch/powerpc/oea [matt-nb5-pq3]: genassym.cf oea_machdep.c
            ofw_rascons.c pmap.c
        src/sys/arch/powerpc/powerpc [matt-nb5-pq3]: trap_subr.S

Log Message:
Change battable to have a granularity of 8MB.


To generate a diff of this commit:
cvs rdiff -u -r1.14 -r1.14.42.1 src/sys/arch/macppc/macppc/rbus_machdep.c
cvs rdiff -u -r1.12 -r1.12.22.1 src/sys/arch/powerpc/include/oea/bat.h
cvs rdiff -u -r1.14.26.2 -r1.14.26.3 src/sys/arch/powerpc/oea/genassym.cf
cvs rdiff -u -r1.46.18.2 -r1.46.18.3 src/sys/arch/powerpc/oea/oea_machdep.c
cvs rdiff -u -r1.2 -r1.2.26.1 src/sys/arch/powerpc/oea/ofw_rascons.c
cvs rdiff -u -r1.61.12.2 -r1.61.12.3 src/sys/arch/powerpc/oea/pmap.c
cvs rdiff -u -r1.65.16.2 -r1.65.16.3 src/sys/arch/powerpc/powerpc/trap_subr.S

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/macppc/macppc/rbus_machdep.c
diff -u src/sys/arch/macppc/macppc/rbus_machdep.c:1.14 src/sys/arch/macppc/macppc/rbus_machdep.c:1.14.42.1
--- src/sys/arch/macppc/macppc/rbus_machdep.c:1.14	Wed Oct 17 19:55:34 2007
+++ src/sys/arch/macppc/macppc/rbus_machdep.c	Wed Jan 26 08:52:26 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: rbus_machdep.c,v 1.14 2007/10/17 19:55:34 garbled Exp $	*/
+/*	$NetBSD: rbus_machdep.c,v 1.14.42.1 2011/01/26 08:52:26 matt Exp $	*/
 
 /*
  * Copyright (c) 1999
@@ -28,7 +28,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rbus_machdep.c,v 1.14 2007/10/17 19:55:34 garbled Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rbus_machdep.c,v 1.14.42.1 2011/01/26 08:52:26 matt Exp $");
 
 #include <sys/param.h>
 #include <sys/device.h>
@@ -95,8 +95,7 @@
 		size  = 0x10000000;
 	}
 
-	battable[start >> 28].batl = BATL(start, BAT_I, BAT_PP_RW);
-	battable[start >> 28].batu = BATU(start, BAT_BL_256M, BAT_Vs);
+	oea_iobat_add(start, BAT_BL_256M);
 
 	return rbus_new_root_delegate(pa->pa_memt, start, size, 0);
 }

Index: src/sys/arch/powerpc/include/oea/bat.h
diff -u src/sys/arch/powerpc/include/oea/bat.h:1.12 src/sys/arch/powerpc/include/oea/bat.h:1.12.22.1
--- src/sys/arch/powerpc/include/oea/bat.h:1.12	Mon Apr 28 20:23:32 2008
+++ src/sys/arch/powerpc/include/oea/bat.h	Wed Jan 26 08:52:26 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: bat.h,v 1.12 2008/04/28 20:23:32 martin Exp $	*/
+/*	$NetBSD: bat.h,v 1.12.22.1 2011/01/26 08:52:26 matt Exp $	*/
 
 /*-
  * Copyright (c) 1999 The NetBSD Foundation, Inc.
@@ -194,7 +194,8 @@
 #define	BAT601_VALID_P(batl) \
 	((batl) & BAT601_V)
 
-#define	BAT_VA2IDX(va)	((va) >> ADDR_SR_SHFT)
+#define	BAT_VA2IDX(va)	((va) / (8*1024*1024))
+#define	BAT_IDX2VA(i)	((i) * (8*1024*1024))
 
 #ifdef	_KERNEL
 #ifndef _LOCORE

Index: src/sys/arch/powerpc/oea/genassym.cf
diff -u src/sys/arch/powerpc/oea/genassym.cf:1.14.26.2 src/sys/arch/powerpc/oea/genassym.cf:1.14.26.3
--- src/sys/arch/powerpc/oea/genassym.cf:1.14.26.2	Mon Jan 17 07:45:59 2011
+++ src/sys/arch/powerpc/oea/genassym.cf	Wed Jan 26 08:52:26 2011
@@ -1,4 +1,4 @@
-#	$NetBSD: genassym.cf,v 1.14.26.2 2011/01/17 07:45:59 matt Exp $
+#	$NetBSD: genassym.cf,v 1.14.26.3 2011/01/26 08:52:26 matt Exp $
 
 #
 # Copyright (C) 1995, 1996 Wolfgang Solfrank.
@@ -41,6 +41,7 @@
 include <sys/mutex.h>
 include <sys/rwlock.h>
 include <sys/proc.h>
+include <sys/bitops.h>
 
 include <uvm/uvm_extern.h>
 
@@ -48,7 +49,9 @@
 include <machine/pmap.h>
 
 include <powerpc/cpu.h>
+include <powerpc/psl.h>
 include <powerpc/oea/cpufeat.h>
+include <powerpc/oea/bat.h>
 
 define	FRAMELEN	FRAMELEN
 define	FRAME_TF	offsetof(struct ktrapframe, ktf_tf)
@@ -211,6 +214,9 @@
 define	VREG_VRSAVE	offsetof(struct vreg, vrsave)
 define	VREG_VSCR	offsetof(struct vreg, vscr)
 
+define	MSR_PR		31-ilog2(PSL_PR)
+define	BAT_ADDR_SHIFT	ilog2(BAT_IDX2VA(1))
+
 define	L_PCB		offsetof(struct lwp, l_addr)
 define	L_ADDR		offsetof(struct lwp, l_addr)
 define	L_CPU		offsetof(struct lwp, l_cpu)

Index: src/sys/arch/powerpc/oea/oea_machdep.c
diff -u src/sys/arch/powerpc/oea/oea_machdep.c:1.46.18.2 src/sys/arch/powerpc/oea/oea_machdep.c:1.46.18.3
--- src/sys/arch/powerpc/oea/oea_machdep.c:1.46.18.2	Mon Jan 17 07:45:59 2011
+++ src/sys/arch/powerpc/oea/oea_machdep.c	Wed Jan 26 08:52:26 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: oea_machdep.c,v 1.46.18.2 2011/01/17 07:45:59 matt Exp $	*/
+/*	$NetBSD: oea_machdep.c,v 1.46.18.3 2011/01/26 08:52:26 matt Exp $	*/
 
 /*
  * Copyright (C) 2002 Matt Thomas
@@ -33,7 +33,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: oea_machdep.c,v 1.46.18.2 2011/01/17 07:45:59 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: oea_machdep.c,v 1.46.18.3 2011/01/26 08:52:26 matt Exp $");
 
 #include "opt_ppcarch.h"
 #include "opt_compat_netbsd.h"
@@ -101,7 +101,7 @@
 static void trap0(void *);
 
 /* XXXSL: The battable is not initialized to non-zero for PPC_OEA64 and PPC_OEA64_BRIDGE */
-struct bat battable[512];
+struct bat battable[BAT_VA2IDX(0xffffffff)+1];
 
 register_t iosrtable[16];	/* I/O segments, for kernel_pmap setup */
 paddr_t msgbuf_paddr;
@@ -456,32 +456,39 @@
 void
 oea_iobat_add(paddr_t pa, register_t len)
 {
-	static int n = 1;
-	const u_int i = pa >> 28;
+	static int z = 1;
+	const u_int i = BAT_VA2IDX(pa);
+	const u_int n = __SHIFTOUT(len, (BAT_XBL|BAT_BL) & ~BAT_BL_8M);
+
+	KASSERT(len >= BAT_BL_8M);
+
 	battable[i].batl = BATL(pa, BAT_I|BAT_G, BAT_PP_RW);
 	battable[i].batu = BATU(pa, len, BAT_Vs);
+	for (u_int j = 0; j < n; j++) {
+		battable[i + j] = battable[i];
+	}
 
 	/*
 	 * Let's start loading the BAT registers.
 	 */
-	switch (n) {
+	switch (z) {
 	case 1:
 		__asm volatile ("mtdbatl 1,%0; mtdbatu 1,%1;"
 		    ::	"r"(battable[i].batl),
 			"r"(battable[i].batu));
-		n = 2;
+		z = 2;
 		break;
 	case 2:
 		__asm volatile ("mtdbatl 2,%0; mtdbatu 2,%1;"
 		    ::	"r"(battable[i].batl),
 			"r"(battable[i].batu));
-		n = 3;
+		z = 3;
 		break;
 	case 3:
 		__asm volatile ("mtdbatl 3,%0; mtdbatu 3,%1;"
 		    ::	"r"(battable[i].batl),
 			"r"(battable[i].batu));
-		n = 4;
+		z = 4;
 		break;
 	default:
 		break;
@@ -491,21 +498,25 @@
 void
 oea_iobat_remove(paddr_t pa)
 {
-	register_t batu;
-	int i, n;
+	const u_int i = BAT_VA2IDX(pa);
 
-	n = pa >> ADDR_SR_SHFT;
-	if (!BAT_VA_MATCH_P(battable[n].batu, pa) ||
-	    !BAT_VALID_P(battable[n].batu, PSL_PR))
+	if (!BAT_VA_MATCH_P(battable[i].batu, pa) ||
+	    !BAT_VALID_P(battable[i].batu, PSL_PR))
 		return;
-	battable[n].batl = 0;
-	battable[n].batu = 0;
+	const int n =
+	    __SHIFTOUT(battable[i].batu, (BAT_XBL|BAT_BL) & ~BAT_BL_8M) + 1;
+	KASSERT((n & (n-1)) == 0);	/* power of 2 */
+	KASSERT((i & (n-1)) == 0);	/* multiple of n */
+
+	memset(&battable[i], 0, n*sizeof(battable[0]));
+
 #define	BAT_RESET(n) \
 	__asm volatile("mtdbatu %0,%1; mtdbatl %0,%1" :: "n"(n), "r"(0))
 #define	BATU_GET(n, r)	__asm volatile("mfdbatu %0,%1" : "=r"(r) : "n"(n))
 
-	for (i=1 ; i<4 ; i++) {
-		switch (i) {
+	for (u_int k = 1 ; k < 4; k++) {
+		register_t batu;
+		switch (k) {
 		case 1:
 			BATU_GET(1, batu);
 			if (BAT_VA_MATCH_P(batu, pa) &&
@@ -674,18 +685,34 @@
 #endif
 	{
 		for (mp = allmem; mp->size; mp++) {
-			paddr_t paddr = mp->start & 0xf0000000;
-			paddr_t end = mp->start + mp->size;
-
-			do {
-				u_int ix = paddr >> 28;
-
-				battable[ix].batl =
-				    BATL(paddr, BAT_M, BAT_PP_RW);
-				battable[ix].batu =
-				    BATU(paddr, BAT_BL_256M, BAT_Vs);
-				paddr += SEGMENT_LENGTH;
-			} while (paddr < end);
+			paddr_t paddr = mp->start & -BAT_IDX2VA(1);
+			paddr_t end =
+			    roundup2(mp->start + mp->size, BAT_IDX2VA(1));
+
+			while (paddr < end) {
+				psize_t size = 256*1024*1024;
+				register_t bl = BAT_BL_256M;
+				u_int n = BAT_VA2IDX(size);
+				u_int i = BAT_VA2IDX(paddr);
+
+				while ((paddr & (size - 1))
+				    || paddr + size > end) {
+					size >>= 1;
+					bl = (bl >> 1) & BAT_BL;
+					n >>= 1;
+				}
+				KASSERT(size >= BAT_IDX2VA(1));
+				KASSERT(n >= 1);
+				KASSERT(bl >= BAT_BL_8M);
+
+				for (; n-- > 0; i++) {
+					battable[i].batl =
+					    BATL(paddr, BAT_M, BAT_PP_RW);
+					battable[i].batu =
+					    BATU(paddr, bl, BAT_Vs);
+				}
+				paddr += size;
+			}
 		}
 	}
 }

Index: src/sys/arch/powerpc/oea/ofw_rascons.c
diff -u src/sys/arch/powerpc/oea/ofw_rascons.c:1.2 src/sys/arch/powerpc/oea/ofw_rascons.c:1.2.26.1
--- src/sys/arch/powerpc/oea/ofw_rascons.c:1.2	Mon Mar  3 17:15:57 2008
+++ src/sys/arch/powerpc/oea/ofw_rascons.c	Wed Jan 26 08:52:27 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: ofw_rascons.c,v 1.2 2008/03/03 17:15:57 phx Exp $	*/
+/*	$NetBSD: ofw_rascons.c,v 1.2.26.1 2011/01/26 08:52:27 matt Exp $	*/
 
 /*
  * Copyright (c) 1995, 1996 Carnegie-Mellon University.
@@ -28,7 +28,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ofw_rascons.c,v 1.2 2008/03/03 17:15:57 phx Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ofw_rascons.c,v 1.2.26.1 2011/01/26 08:52:27 matt Exp $");
 
 #include <sys/param.h>
 #include <sys/buf.h>
@@ -199,17 +199,26 @@
 	if (rascons_enable_cache) {
 		vaddr_t va;
 		/*
-		 * Let's try to find an empty BAT to use 
+		 * Let's try to find an empty 256M BAT to use 
 		 */
 		for (va = SEGMENT_LENGTH; va < (USER_SR << ADDR_SR_SHFT);
 		     va += SEGMENT_LENGTH) {
-			if (battable[va >> ADDR_SR_SHFT].batu == 0) {
-				battable[va >> ADDR_SR_SHFT].batl =
-				    BATL(fbaddr & 0xf0000000,
-					 BAT_G | BAT_W | BAT_M, BAT_PP_RW);
-				battable[va >> ADDR_SR_SHFT].batu =
-				    BATL(va, BAT_BL_256M, BAT_Vs);
-				fbaddr &= 0x0fffffff;
+			const u_int i = BAT_VA2IDX(va);
+			const u_int n = BAT_VA2IDX(SEGMENT_LENGTH);
+			for (u_int j = 0; j < n; j++) {
+				if (battable[i+j].batu != 0) {
+					break;
+				}
+			}
+			if (j == n) {
+				register_t batl = BATL(fbaddr & 0xf0000000,
+				    BAT_G | BAT_W | BAT_M, BAT_PP_RW);
+				register_t batu = BATL(va, BAT_BL_256M, BAT_Vs);
+				for (u_int j = 0; j < n; j++) {
+					battable[i+j].batl = batl;
+					battable[i+j].batu = batu;
+				}
+				fbaddr &= SEGMASK_MASK;
 				fbaddr |= va;
 				break;
 			}

Index: src/sys/arch/powerpc/oea/pmap.c
diff -u src/sys/arch/powerpc/oea/pmap.c:1.61.12.2 src/sys/arch/powerpc/oea/pmap.c:1.61.12.3
--- src/sys/arch/powerpc/oea/pmap.c:1.61.12.2	Mon Jan 17 07:45:59 2011
+++ src/sys/arch/powerpc/oea/pmap.c	Wed Jan 26 08:52:27 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: pmap.c,v 1.61.12.2 2011/01/17 07:45:59 matt Exp $	*/
+/*	$NetBSD: pmap.c,v 1.61.12.3 2011/01/26 08:52:27 matt Exp $	*/
 /*-
  * Copyright (c) 2001 The NetBSD Foundation, Inc.
  * All rights reserved.
@@ -63,7 +63,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.61.12.2 2011/01/17 07:45:59 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.61.12.3 2011/01/26 08:52:27 matt Exp $");
 
 #define	PMAP_NOOPNAMES
 
@@ -2151,10 +2151,10 @@
 		} else
 #endif /* PPC_OEA601 */
 		{
-			register_t batu = battable[va >> ADDR_SR_SHFT].batu;
+			register_t batu = battable[BAT_VA2IDX(va)].batu;
 			if (BAT_VALID_P(batu,0) && BAT_VA_MATCH_P(batu,va)) {
 				register_t batl =
-				    battable[va >> ADDR_SR_SHFT].batl;
+				    battable[BAT_VA2IDX(va)].batl;
 				register_t mask =
 				    (~(batu & BAT_BL) << 15) & ~0x1ffffL;
 				if (pap)

Index: src/sys/arch/powerpc/powerpc/trap_subr.S
diff -u src/sys/arch/powerpc/powerpc/trap_subr.S:1.65.16.2 src/sys/arch/powerpc/powerpc/trap_subr.S:1.65.16.3
--- src/sys/arch/powerpc/powerpc/trap_subr.S:1.65.16.2	Mon Jan 17 07:46:00 2011
+++ src/sys/arch/powerpc/powerpc/trap_subr.S	Wed Jan 26 08:52:25 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: trap_subr.S,v 1.65.16.2 2011/01/17 07:46:00 matt Exp $	*/
+/*	$NetBSD: trap_subr.S,v 1.65.16.3 2011/01/26 08:52:25 matt Exp $	*/
 
 /*
  * Copyright (C) 1995, 1996 Wolfgang Solfrank.
@@ -236,9 +236,10 @@
 	mtsprg2	%r30			/* in SPRG2 */
 	mfsrr1	%r31			/* test kernel mode */
 	mtcr	%r31
-	bt	17,1f			/* branch if PSL_PR is set */
+	bt	MSR_PR,1f		/* branch if PSL_PR is set */
 	mfdar	%r31			/* get fault address */
-	rlwinm	%r31,%r31,7,25,28	/* get segment * 8 */
+	rlwinm	%r31,%r31,3+(32-BAT_ADDR_SHIFT),BAT_ADDR_SHIFT-3,28
+					/* get segment * 8 */
 
 	/* get batu */
 	addis	%r31,%r31,_C_LABEL(battable)@ha
@@ -304,7 +305,7 @@
 	mtsprg2	%r30			/* in SPRG2 */
 	mfsrr1	%r31			/* test kernel mode */
 	mtcr	%r31
-	bt	17,1f			/* branch if PSL_PR is set */
+	bt	MSR_PR,1f		/* branch if PSL_PR is set */
 	mfdar	%r31			/* get fault address */
 	rlwinm	%r31,%r31,12,20,28	/* get "segment" battable offset */
 
@@ -365,13 +366,13 @@
 	streg	%r29,(CI_TEMPSAVE+CPUSAVE_R29)(%r1)	/* save r29 */
 	streg	%r30,(CI_TEMPSAVE+CPUSAVE_R30)(%r1)	/* save r30 */
 	streg	%r31,(CI_TEMPSAVE+CPUSAVE_R31)(%r1)	/* save r31 */
+	mfsprg1	%r1			/* get old SP */
 	mflr	%r28			/* save LR */
 	mfcr	%r29			/* save CR */
 	mfsrr1	%r31
 	mtcr	%r31
-	mr	%r30,%r1
-	mfsprg1	%r1			/* get old SP */
-	bf	17,1f			/* branch if PSL_PR is true */
+	bf	MSR_PR,1f		/* branch if PSL_PR is true */
+	GET_CPUINFO(%r30)
 	ldptr	%r1,CI_CURPCB(%r30)	/* get kernel stack */
 	addi	%r1,%r1,USPACE-CALLFRAMELEN /* stack is top of user struct */
 	RESTORE_KERN_SRS(%r30, %r31)
@@ -398,13 +399,13 @@
 	streg	%r29,(CI_TEMPSAVE+CPUSAVE_R29)(%r1)	/* save r29 */
 	streg	%r30,(CI_TEMPSAVE+CPUSAVE_R30)(%r1)	/* save r30 */
 	streg	%r31,(CI_TEMPSAVE+CPUSAVE_R31)(%r1)	/* save r31 */
+	mfsprg1	%r1			/* get old SP */
 	mflr	%r28			/* save LR */
 	mfcr	%r29			/* save CR */
 	mfsrr1	%r31
 	mtcr	%r31
-	mr	%r30,%r1
-	mfsprg1	%r1			/* yes, get old SP */
-	bf	17,1f			/* branch if PSL_PR is true */
+	bf	MSR_PR,1f		/* branch if PSL_PR is true */
+	GET_CPUINFO(%r30)
 	ldptr	%r1,CI_CURPCB(%r30)	/* get kernel stack */
 	addi	%r1,%r1,USPACE-CALLFRAMELEN /* stack is top of user struct */
 	RESTORE_KERN_SRS(%r30, %r31)
@@ -630,7 +631,7 @@
  * In case of DDB we want a separate trap catcher for it
  */
 	.local	ddbstk
-	.comm	ddbstk,INTSTK,8		/* ddb stack */
+	.comm	ddbstk,INTSTK,16	/* ddb stack */
 
 /* LINTSTUB: Var: int ddblow[1], ddbsize[1]; */
 	.globl	_C_LABEL(ddblow),_C_LABEL(ddbsize)
@@ -641,7 +642,7 @@
 	mfsrr1	%r1
 	mtcr	%r1
 	GET_CPUINFO(%r1)
-	bf	17,1f			/* branch if privileged */
+	bf	MSR_PR,1f		/* branch if privileged */
 	streg	%r28,(CI_TEMPSAVE+CPUSAVE_R28)(%r1)	/* free r28 */
 	mfsprg2	%r28
 	streg	%r28,(CI_TEMPSAVE+CPUSAVE_R29)(%r1)	/* free r29 */
@@ -685,7 +686,7 @@
  */
 
 	.local	ipkdbstk
-	.comm	ipkdbstk,INTSTK,8		/* ipkdb stack */
+	.comm	ipkdbstk,INTSTK,16		/* ipkdb stack */
 
 /* LINTSTUB: Var: int ipkdblow[1], ipkdbsize[1]; */
 	.globl	_C_LABEL(ipkdblow),_C_LABEL(ipkdbsize)
@@ -856,7 +857,7 @@
 	GET_CPUINFO(%r2);						\
 	ldreg	%r3,(savearea+CPUSAVE_SRR1)(%r2);			\
 	mtcr	%r3;							\
-	bf	17,1f;			/* branch if PSL_PR is false */	\
+	bf	MSR_PR,1f;		/* branch if PSL_PR is false */	\
 /* Restore user SRs */							\
 	RESTORE_USER_SRS(%r2,%r3);					\
 1:	mfsprg1	%r2;			/* restore cr */		\
@@ -890,7 +891,7 @@
 #ifdef DDB
 	mfsrr1	%r31
 	mtcr	%r31
-	bt	17,trapstart		/* branch is user mode */
+	bt	MSR_PR,trapstart	/* branch is user mode */
 	mfsprg1	%r31			/* get old SP */
 #if 0
 	subf	%r30,%r30,%r31		/* subtract DAR from it */
@@ -926,7 +927,7 @@
 	mfsprg1	%r1			/* restore SP (might have been
 					   overwritten) */
 s_trap:
-	bf	17,k_trap		/* branch if PSL_PR is false */
+	bf	MSR_PR,k_trap		/* branch if PSL_PR is false */
 	GET_CPUINFO(%r1)		/* get cpu_info for this cpu */
 u_trap:
 	ldptr	%r1,CI_CURPCB(%r1)
@@ -961,7 +962,7 @@
 /* Test AST pending: */
 	ldreg	%r5,FRAME_SRR1(%r1)
 	mtcr	%r5
-	bf	17,trapleave		/* branch if PSL_PR is false */
+	bf	MSR_PR,trapleave	/* branch if PSL_PR is false */
 	GET_CPUINFO(%r3)
 	ldint	%r4,CI_ASTPENDING(%r3)
 	andi.	%r4,%r4,1
@@ -1126,7 +1127,7 @@
 /* Returning to user mode? */
 	ldreg	%r8,FRAME_SRR1(%r1)
 	mtcr	%r8			/* saved SRR1 */
-	bf	17,intrleave		/* branch if PSL_PR is false */
+	bf	MSR_PR,intrleave	/* branch if PSL_PR is false */
 
 	ldint	%r3,CI_ASTPENDING(%r5)	/* Test AST pending */
 	andi.	%r3,%r3,1

Reply via email to