diff options
Diffstat (limited to 'arch/powerpc/include/asm/exception-64e.h')
| -rw-r--r-- | arch/powerpc/include/asm/exception-64e.h | 49 | 
1 files changed, 28 insertions, 21 deletions
diff --git a/arch/powerpc/include/asm/exception-64e.h b/arch/powerpc/include/asm/exception-64e.h index 6d53f311d94..a8b52b61043 100644 --- a/arch/powerpc/include/asm/exception-64e.h +++ b/arch/powerpc/include/asm/exception-64e.h @@ -37,6 +37,7 @@   * critical data   */ +#define PACA_EXGDBELL PACA_EXGEN  /* We are out of SPRGs so we save some things in the PACA. The normal   * exception frame is smaller than the CRIT or MC one though @@ -48,30 +49,33 @@  #define EX_R14		(4 * 8)  #define EX_R15		(5 * 8) -/* The TLB miss exception uses different slots */ +/* + * The TLB miss exception uses different slots. + * + * The bolted variant uses only the first six fields, + * which in combination with pgd and kernel_pgd fits in + * one 64-byte cache line. + */  #define EX_TLB_R10	( 0 * 8)  #define EX_TLB_R11	( 1 * 8) -#define EX_TLB_R12	( 2 * 8) -#define EX_TLB_R13	( 3 * 8) -#define EX_TLB_R14	( 4 * 8) -#define EX_TLB_R15	( 5 * 8) -#define EX_TLB_R16	( 6 * 8) -#define EX_TLB_CR	( 7 * 8) +#define EX_TLB_R14	( 2 * 8) +#define EX_TLB_R15	( 3 * 8) +#define EX_TLB_R16	( 4 * 8) +#define EX_TLB_CR	( 5 * 8) +#define EX_TLB_R12	( 6 * 8) +#define EX_TLB_R13	( 7 * 8)  #define EX_TLB_DEAR	( 8 * 8) /* Level 0 and 2 only */  #define EX_TLB_ESR	( 9 * 8) /* Level 0 and 2 only */  #define EX_TLB_SRR0	(10 * 8)  #define EX_TLB_SRR1	(11 * 8) -#define EX_TLB_MMUCR0	(12 * 8) /* Level 0 */ -#define EX_TLB_MAS1	(12 * 8) /* Level 0 */ -#define EX_TLB_MAS2	(13 * 8) /* Level 0 */  #ifdef CONFIG_BOOK3E_MMU_TLB_STATS -#define EX_TLB_R8	(14 * 8) -#define EX_TLB_R9	(15 * 8) -#define EX_TLB_LR	(16 * 8) -#define EX_TLB_SIZE	(17 * 8) +#define EX_TLB_R8	(12 * 8) +#define EX_TLB_R9	(13 * 8) +#define EX_TLB_LR	(14 * 8) +#define EX_TLB_SIZE	(15 * 8)  #else -#define EX_TLB_SIZE	(14 * 8) +#define EX_TLB_SIZE	(12 * 8)  #endif  #define	START_EXCEPTION(label)						\ @@ -170,10 +174,10 @@ exc_##label##_book3e:  	mtlr	r16;  #define TLB_MISS_STATS_D(name)						    \  	addi	r9,r13,MMSTAT_DSTATS+name;				    \ -	bl	.tlb_stat_inc; +	bl	tlb_stat_inc;  #define TLB_MISS_STATS_I(name)						    \  	addi	r9,r13,MMSTAT_ISTATS+name;				    \ -	bl	.tlb_stat_inc; +	bl	tlb_stat_inc;  #define TLB_MISS_STATS_X(name)						    \  	ld	r8,PACA_EXTLB+EX_TLB_ESR(r13);				    \  	cmpdi	cr2,r8,-1;						    \ @@ -181,19 +185,22 @@ exc_##label##_book3e:  	addi	r9,r13,MMSTAT_DSTATS+name;				    \  	b	62f;							    \  61:	addi	r9,r13,MMSTAT_ISTATS+name;				    \ -62:	bl	.tlb_stat_inc; +62:	bl	tlb_stat_inc;  #define TLB_MISS_STATS_SAVE_INFO					    \ -	std	r14,EX_TLB_ESR(r12);	/* save ESR */			    \ - - +	std	r14,EX_TLB_ESR(r12);	/* save ESR */ +#define TLB_MISS_STATS_SAVE_INFO_BOLTED					    \ +	std	r14,PACA_EXTLB+EX_TLB_ESR(r13);	/* save ESR */  #else  #define TLB_MISS_PROLOG_STATS  #define TLB_MISS_RESTORE_STATS +#define TLB_MISS_PROLOG_STATS_BOLTED +#define TLB_MISS_RESTORE_STATS_BOLTED  #define TLB_MISS_STATS_D(name)  #define TLB_MISS_STATS_I(name)  #define TLB_MISS_STATS_X(name)  #define TLB_MISS_STATS_Y(name)  #define TLB_MISS_STATS_SAVE_INFO +#define TLB_MISS_STATS_SAVE_INFO_BOLTED  #endif  #define SET_IVOR(vector_number, vector_offset)	\  | 
