[PATCH] powerpc: Fix interrupt range check on debug exception
Bharat Bhushan
r65777 at freescale.com
Tue Apr 30 18:18:11 EST 2013
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: Bharat Bhushan <bharat.bhushan at freescale.com>
---
arch/powerpc/kernel/head_44x.S | 2 ++
arch/powerpc/kernel/head_booke.h | 16 ++++++++--------
arch/powerpc/kernel/head_fsl_booke.S | 2 ++
3 files changed, 12 insertions(+), 8 deletions(-)
diff --git a/arch/powerpc/kernel/head_44x.S b/arch/powerpc/kernel/head_44x.S
index 7a2e5e4..97e2671 100644
--- a/arch/powerpc/kernel/head_44x.S
+++ b/arch/powerpc/kernel/head_44x.S
@@ -769,6 +769,8 @@ finish_tlb_load_47x:
*/
DEBUG_CRIT_EXCEPTION
+interrupt_end:
+
/*
* Global functions
*/
diff --git a/arch/powerpc/kernel/head_booke.h b/arch/powerpc/kernel/head_booke.h
index 5f051ee..df564e9 100644
--- a/arch/powerpc/kernel/head_booke.h
+++ b/arch/powerpc/kernel/head_booke.h
@@ -286,13 +286,13 @@ label:
andis. r10,r10,(DBSR_IC|DBSR_BT)@h; \
beq+ 2f; \
\
- lis r10,KERNELBASE at h; /* check if exception in vectors */ \
- ori r10,r10,KERNELBASE at l; \
+ lis r10,interrupt_base at h; /* check if exception in vectors */ \
+ ori r10,r10,interrupt_base at l; \
cmplw r12,r10; \
blt+ 2f; /* addr below exception vectors */ \
\
- lis r10,DebugDebug at h; \
- ori r10,r10,DebugDebug at l; \
+ lis r10,interrupt_end at h; \
+ ori r10,r10,interrupt_end at l; \
cmplw r12,r10; \
bgt+ 2f; /* addr above exception vectors */ \
\
@@ -339,13 +339,13 @@ label:
andis. r10,r10,(DBSR_IC|DBSR_BT)@h; \
beq+ 2f; \
\
- lis r10,KERNELBASE at h; /* check if exception in vectors */ \
- ori r10,r10,KERNELBASE at l; \
+ lis r10,interrupt_base at h; /* check if exception in vectors */ \
+ ori r10,r10,interrupt_base at l; \
cmplw r12,r10; \
blt+ 2f; /* addr below exception vectors */ \
\
- lis r10,DebugCrit at h; \
- ori r10,r10,DebugCrit at l; \
+ lis r10,interrupt_end at h; \
+ ori r10,r10,interrupt_end at l; \
cmplw r12,r10; \
bgt+ 2f; /* addr above exception vectors */ \
\
diff --git a/arch/powerpc/kernel/head_fsl_booke.S b/arch/powerpc/kernel/head_fsl_booke.S
index 6f62a73..d10a7ca 100644
--- a/arch/powerpc/kernel/head_fsl_booke.S
+++ b/arch/powerpc/kernel/head_fsl_booke.S
@@ -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
*/
--
1.5.6.5
More information about the Linuxppc-dev
mailing list