diff options
Diffstat (limited to 'arch/arm/kernel/process.c')
| -rw-r--r-- | arch/arm/kernel/process.c | 33 | 
1 files changed, 18 insertions, 15 deletions
| diff --git a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c index 7a7c4cea5523..4adfb46e3ee9 100644 --- a/arch/arm/kernel/process.c +++ b/arch/arm/kernel/process.c @@ -95,6 +95,22 @@ void __show_regs(struct pt_regs *regs)  {  	unsigned long flags;  	char buf[64]; +#ifndef CONFIG_CPU_V7M +	unsigned int domain; +#ifdef CONFIG_CPU_SW_DOMAIN_PAN +	/* +	 * Get the domain register for the parent context. In user +	 * mode, we don't save the DACR, so lets use what it should +	 * be. For other modes, we place it after the pt_regs struct. +	 */ +	if (user_mode(regs)) +		domain = DACR_UACCESS_ENABLE; +	else +		domain = *(unsigned int *)(regs + 1); +#else +	domain = get_domain(); +#endif +#endif  	show_regs_print_info(KERN_DEFAULT); @@ -123,21 +139,8 @@ void __show_regs(struct pt_regs *regs)  #ifndef CONFIG_CPU_V7M  	{ -		unsigned int domain = get_domain();  		const char *segment; -#ifdef CONFIG_CPU_SW_DOMAIN_PAN -		/* -		 * Get the domain register for the parent context. In user -		 * mode, we don't save the DACR, so lets use what it should -		 * be. For other modes, we place it after the pt_regs struct. -		 */ -		if (user_mode(regs)) -			domain = DACR_UACCESS_ENABLE; -		else -			domain = *(unsigned int *)(regs + 1); -#endif -  		if ((domain & domain_mask(DOMAIN_USER)) ==  		    domain_val(DOMAIN_USER, DOMAIN_NOACCESS))  			segment = "none"; @@ -163,11 +166,11 @@ void __show_regs(struct pt_regs *regs)  		buf[0] = '\0';  #ifdef CONFIG_CPU_CP15_MMU  		{ -			unsigned int transbase, dac = get_domain(); +			unsigned int transbase;  			asm("mrc p15, 0, %0, c2, c0\n\t"  			    : "=r" (transbase));  			snprintf(buf, sizeof(buf), "  Table: %08x  DAC: %08x", -			  	transbase, dac); +				transbase, domain);  		}  #endif  		asm("mrc p15, 0, %0, c1, c0\n" : "=r" (ctrl)); | 
