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

Commit fc2a6cfe authored by Bharat Bhushan's avatar Bharat Bhushan Committed by Benjamin Herrenschmidt
Browse files

powerpc: Fix interrupt range check on debug exception



We do not want to take single step and branch-taken debug exception
in kernel exception code. But the address range check was not covering
all kernel exception handlers address range.

With this patch we defined the interrupt_end label which defines the
end on kernel exception code. So now we check interrupt_base to
interrupt_end range for not handling debug exception in kernel
exception entry.

Signed-off-by: default avatarBharat Bhushan <bharat.bhushan@freescale.com>
Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
parent 1f6aaacc
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -769,6 +769,8 @@ finish_tlb_load_47x:
	 */
	DEBUG_CRIT_EXCEPTION

interrupt_end:

/*
 * Global functions
 */
+8 −8
Original line number Diff line number Diff line
@@ -281,13 +281,13 @@
	andis.	r10,r10,(DBSR_IC|DBSR_BT)@h;				      \
	beq+	2f;							      \
									      \
	lis	r10,KERNELBASE@h;	/* check if exception in vectors */   \
	ori	r10,r10,KERNELBASE@l;					      \
	lis	r10,interrupt_base@h;	/* check if exception in vectors */   \
	ori	r10,r10,interrupt_base@l;				      \
	cmplw	r12,r10;						      \
	blt+	2f;			/* addr below exception vectors */    \
									      \
	lis	r10,DebugDebug@h;					      \
	ori	r10,r10,DebugDebug@l;					      \
	lis	r10,interrupt_end@h;					      \
	ori	r10,r10,interrupt_end@l;				      \
	cmplw	r12,r10;						      \
	bgt+	2f;			/* addr above exception vectors */    \
									      \
@@ -334,13 +334,13 @@
	andis.	r10,r10,(DBSR_IC|DBSR_BT)@h;				      \
	beq+	2f;							      \
									      \
	lis	r10,KERNELBASE@h;	/* check if exception in vectors */   \
	ori	r10,r10,KERNELBASE@l;					      \
	lis	r10,interrupt_base@h;	/* check if exception in vectors */   \
	ori	r10,r10,interrupt_base@l;				      \
	cmplw	r12,r10;						      \
	blt+	2f;			/* addr below exception vectors */    \
									      \
	lis	r10,DebugCrit@h;					      \
	ori	r10,r10,DebugCrit@l;					      \
	lis	r10,interrupt_end@h;					      \
	ori	r10,r10,interrupt_end@l;				      \
	cmplw	r12,r10;						      \
	bgt+	2f;			/* addr above exception vectors */    \
									      \
+2 −0
Original line number Diff line number Diff line
@@ -605,6 +605,8 @@ END_FTR_SECTION_IFSET(CPU_FTR_EMB_HV)
	/* Embedded Hypervisor Privilege */
	EXCEPTION(0, HV_PRIV, Ehvpriv, unknown_exception, EXC_XFER_EE)

interrupt_end:

/*
 * Local functions
 */