Commit d1fed2d6 authored by Russell King (Oracle)'s avatar Russell King (Oracle)
Browse files

ARM: provide individual is_translation_fault() and is_permission_fault()



Provide individual LPAE and non-LPAE definitions for both these
functions, rather than having ifdefs inside the function body. This
places the functions closer to their associated definitions.

Reviewed-by: default avatarSebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: default avatarRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
parent a542de44
Loading
Loading
Loading
Loading
+19 −17
Original line number Diff line number Diff line
@@ -21,6 +21,20 @@ static inline int fsr_fs(unsigned int fsr)
{
	return fsr & FSR_FS5_0;
}

static inline bool is_translation_fault(unsigned int fsr)
{
	int fs = fsr_fs(fsr);

	return (fs & FS_MMU_NOLL_MASK) == FS_TRANS_NOLL;
}

static inline bool is_permission_fault(unsigned int fsr)
{
	int fs = fsr_fs(fsr);

	return (fs & FS_MMU_NOLL_MASK) == FS_PERM_NOLL;
}
#else
#define FSR_FS_AEA		22
#define FS_L1_TRANS		0x5
@@ -35,33 +49,21 @@ static inline int fsr_fs(unsigned int fsr)
{
	return (fsr & FSR_FS3_0) | (fsr & FSR_FS4) >> 6;
}
#endif

static inline bool is_translation_fault(unsigned int fsr)
{
	int fs = fsr_fs(fsr);
#ifdef CONFIG_ARM_LPAE
	if ((fs & FS_MMU_NOLL_MASK) == FS_TRANS_NOLL)
		return true;
#else
	if (fs == FS_L1_TRANS || fs == FS_L2_TRANS)
		return true;
#endif
	return false;

	return fs == FS_L1_TRANS || fs == FS_L2_TRANS;
}

static inline bool is_permission_fault(unsigned int fsr)
{
	int fs = fsr_fs(fsr);
#ifdef CONFIG_ARM_LPAE
	if ((fs & FS_MMU_NOLL_MASK) == FS_PERM_NOLL)
		return true;
#else
	if (fs == FS_L1_PERM || fs == FS_L2_PERM)
		return true;
#endif
	return false;

	return fs == FS_L1_PERM || fs == FS_L2_PERM;
}
#endif

void do_bad_area(unsigned long addr, unsigned int fsr, struct pt_regs *regs);
void early_abt_enable(void);