* [PATCH 1/3] powerpc/book3e: load critical/machine/debug exception stack
@ 2012-10-25 6:43 Tiejun Chen
2012-10-25 6:43 ` [PATCH 2/3] powerpc/book3e: support kgdb for kernel space Tiejun Chen
` (2 more replies)
0 siblings, 3 replies; 5+ messages in thread
From: Tiejun Chen @ 2012-10-25 6:43 UTC (permalink / raw)
To: benh; +Cc: linuxppc-dev, linux-kernel, jason.wessel
We always alloc critical/machine/debug check exceptions. This is
different from the normal exception. So we should load these exception
stack properly like we did for booke.
Signed-off-by: Tiejun Chen <tiejun.chen@windriver.com>
---
arch/powerpc/kernel/exceptions-64e.S | 27 +++++++++++++++++++++++++++
1 file changed, 27 insertions(+)
diff --git a/arch/powerpc/kernel/exceptions-64e.S b/arch/powerpc/kernel/exceptions-64e.S
index 4684e33..43b654a 100644
--- a/arch/powerpc/kernel/exceptions-64e.S
+++ b/arch/powerpc/kernel/exceptions-64e.S
@@ -36,6 +36,30 @@
*/
#define SPECIAL_EXC_FRAME_SIZE INT_FRAME_SIZE
+/* only on book3e */
+#define DBG_STACK_BASE dbgirq_ctx
+#define MC_STACK_BASE mcheckirq_ctx
+#define CRIT_STACK_BASE critirq_ctx
+
+#ifdef CONFIG_SMP
+#define BOOK3E_LOAD_EXC_LEVEL_STACK(level) \
+ std r14,PACA_EX##level+EX_R14(r13); \
+ mfspr r14,SPRN_PIR; \
+ slwi r14,r14,3; \
+ LOAD_REG_ADDR(r10, level##_STACK_BASE); \
+ add r10,r10,r14; \
+ ld r10,0(r10); \
+ addi r10,r10,THREAD_SIZE; \
+ std r10,PACA_DBG_STACK(r13); \
+ ld r14,PACA_EX##level+EX_R14(r13);
+#else
+#define BOOK3E_LOAD_EXC_LEVEL_STACK(level) \
+ LOAD_REG_ADDR(r10, level##_STACK_BASE); \
+ ld r10,0(r10); \
+ addi r10,r10,THREAD_SIZE; \
+ std r10,PACA_DBG_STACK(r13);
+#endif
+
/* Exception prolog code for all exceptions */
#define EXCEPTION_PROLOG(n, intnum, type, addition) \
mtspr SPRN_SPRG_##type##_SCRATCH,r13; /* get spare registers */ \
@@ -68,18 +92,21 @@
#define SPRN_GDBELL_SRR1 SPRN_GSRR1
#define CRIT_SET_KSTACK \
+ BOOK3E_LOAD_EXC_LEVEL_STACK(CRIT); \
ld r1,PACA_CRIT_STACK(r13); \
subi r1,r1,SPECIAL_EXC_FRAME_SIZE;
#define SPRN_CRIT_SRR0 SPRN_CSRR0
#define SPRN_CRIT_SRR1 SPRN_CSRR1
#define DBG_SET_KSTACK \
+ BOOK3E_LOAD_EXC_LEVEL_STACK(DBG); \
ld r1,PACA_DBG_STACK(r13); \
subi r1,r1,SPECIAL_EXC_FRAME_SIZE;
#define SPRN_DBG_SRR0 SPRN_DSRR0
#define SPRN_DBG_SRR1 SPRN_DSRR1
#define MC_SET_KSTACK \
+ BOOK3E_LOAD_EXC_LEVEL_STACK(MC); \
ld r1,PACA_MC_STACK(r13); \
subi r1,r1,SPECIAL_EXC_FRAME_SIZE;
#define SPRN_MC_SRR0 SPRN_MCSRR0
--
1.7.9.5
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 2/3] powerpc/book3e: support kgdb for kernel space
2012-10-25 6:43 [PATCH 1/3] powerpc/book3e: load critical/machine/debug exception stack Tiejun Chen
@ 2012-10-25 6:43 ` Tiejun Chen
2012-10-25 6:43 ` [PATCH 3/3] kgdb/kgdbts: support ppc64 Tiejun Chen
2012-12-18 22:10 ` [PATCH 1/3] powerpc/book3e: load critical/machine/debug exception stack Tabi Timur-B04825
2 siblings, 0 replies; 5+ messages in thread
From: Tiejun Chen @ 2012-10-25 6:43 UTC (permalink / raw)
To: benh; +Cc: linuxppc-dev, linux-kernel, jason.wessel
Currently we need to skip this for supporting KGDB.
Signed-off-by: Tiejun Chen <tiejun.chen@windriver.com>
---
arch/powerpc/kernel/exceptions-64e.S | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/arch/powerpc/kernel/exceptions-64e.S b/arch/powerpc/kernel/exceptions-64e.S
index 43b654a..c5564d4 100644
--- a/arch/powerpc/kernel/exceptions-64e.S
+++ b/arch/powerpc/kernel/exceptions-64e.S
@@ -566,11 +566,14 @@ kernel_dbg_exc:
rfdi
/* Normal debug exception */
+1:
+#ifndef CONFIG_KGDB
/* XXX We only handle coming from userspace for now since we can't
* quite save properly an interrupted kernel state yet
*/
-1: andi. r14,r11,MSR_PR; /* check for userspace again */
+ andi. r14,r11,MSR_PR; /* check for userspace again */
beq kernel_dbg_exc; /* if from kernel mode */
+#endif
/* Now we mash up things to make it look like we are coming on a
* normal exception
--
1.7.9.5
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 3/3] kgdb/kgdbts: support ppc64
2012-10-25 6:43 [PATCH 1/3] powerpc/book3e: load critical/machine/debug exception stack Tiejun Chen
2012-10-25 6:43 ` [PATCH 2/3] powerpc/book3e: support kgdb for kernel space Tiejun Chen
@ 2012-10-25 6:43 ` Tiejun Chen
2012-12-18 22:10 ` [PATCH 1/3] powerpc/book3e: load critical/machine/debug exception stack Tabi Timur-B04825
2 siblings, 0 replies; 5+ messages in thread
From: Tiejun Chen @ 2012-10-25 6:43 UTC (permalink / raw)
To: benh; +Cc: linuxppc-dev, linux-kernel, jason.wessel
We can't look up the address of the entry point of the function simply
via that function symbol for all architectures.
For PPC64 ABI, actually there is a function descriptors structure.
A function descriptor is a three doubleword data structure that contains
the following values:
* The first doubleword contains the address of the entry point of
the function.
* The second doubleword contains the TOC base address for
the function.
* The third doubleword contains the environment pointer for
languages such as Pascal and PL/1.
So we should call a wapperred dereference_function_descriptor() to get
the address of the entry point of the function.
Note this is also safe for other architecture after refer to
"include/asm-generic/sections.h" since:
dereference_function_descriptor(p) always is (p) if without arched definition.
Signed-off-by: Tiejun Chen <tiejun.chen@windriver.com>
---
drivers/misc/kgdbts.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/drivers/misc/kgdbts.c b/drivers/misc/kgdbts.c
index 3aa9a96..4799e1f 100644
--- a/drivers/misc/kgdbts.c
+++ b/drivers/misc/kgdbts.c
@@ -103,6 +103,7 @@
#include <linux/delay.h>
#include <linux/kthread.h>
#include <linux/module.h>
+#include <asm/sections.h>
#define v1printk(a...) do { \
if (verbose) \
@@ -222,6 +223,7 @@ static unsigned long lookup_addr(char *arg)
addr = (unsigned long)do_fork;
else if (!strcmp(arg, "hw_break_val"))
addr = (unsigned long)&hw_break_val;
+ addr = (unsigned long )dereference_function_descriptor((void *)addr);
return addr;
}
--
1.7.9.5
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 1/3] powerpc/book3e: load critical/machine/debug exception stack
2012-10-25 6:43 [PATCH 1/3] powerpc/book3e: load critical/machine/debug exception stack Tiejun Chen
2012-10-25 6:43 ` [PATCH 2/3] powerpc/book3e: support kgdb for kernel space Tiejun Chen
2012-10-25 6:43 ` [PATCH 3/3] kgdb/kgdbts: support ppc64 Tiejun Chen
@ 2012-12-18 22:10 ` Tabi Timur-B04825
2012-12-20 9:14 ` tiejun.chen
2 siblings, 1 reply; 5+ messages in thread
From: Tabi Timur-B04825 @ 2012-12-18 22:10 UTC (permalink / raw)
To: Tiejun Chen; +Cc: linuxppc-dev, linux-kernel, jason.wessel
On Thu, Oct 25, 2012 at 1:43 AM, Tiejun Chen <tiejun.chen@windriver.com> wr=
ote:
> We always alloc critical/machine/debug check exceptions. This is
> different from the normal exception. So we should load these exception
> stack properly like we did for booke.
Tiejun,
I'm a little confused by these patches, because the actual critical
exception handlers are still commented out:
/* Critical Input Interrupt */
START_EXCEPTION(critical_input);
CRIT_EXCEPTION_PROLOG(0x100, BOOKE_INTERRUPT_CRITICAL,
PROLOG_ADDITION_NONE)
// EXCEPTION_COMMON(0x100, PACA_EXCRIT, INTS_DISABLE)
// bl special_reg_save_crit
// CHECK_NAPPING();
// addi r3,r1,STACK_FRAME_OVERHEAD
// bl .critical_exception
// b ret_from_crit_except
b .
Are you working on fixing this? I'm trying to fix it, too, but I
think you're way ahead of me.
--=20
Timur Tabi
Linux kernel developer at Freescale=
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 1/3] powerpc/book3e: load critical/machine/debug exception stack
2012-12-18 22:10 ` [PATCH 1/3] powerpc/book3e: load critical/machine/debug exception stack Tabi Timur-B04825
@ 2012-12-20 9:14 ` tiejun.chen
0 siblings, 0 replies; 5+ messages in thread
From: tiejun.chen @ 2012-12-20 9:14 UTC (permalink / raw)
To: Tabi Timur-B04825; +Cc: linuxppc-dev, linux-kernel, jason.wessel
On 12/19/2012 06:10 AM, Tabi Timur-B04825 wrote:
> On Thu, Oct 25, 2012 at 1:43 AM, Tiejun Chen <tiejun.chen@windriver.com> wrote:
>> We always alloc critical/machine/debug check exceptions. This is
>> different from the normal exception. So we should load these exception
>> stack properly like we did for booke.
>
> Tiejun,
>
> I'm a little confused by these patches, because the actual critical
> exception handlers are still commented out:
>
> /* Critical Input Interrupt */
> START_EXCEPTION(critical_input);
> CRIT_EXCEPTION_PROLOG(0x100, BOOKE_INTERRUPT_CRITICAL,
> PROLOG_ADDITION_NONE)
> // EXCEPTION_COMMON(0x100, PACA_EXCRIT, INTS_DISABLE)
> // bl special_reg_save_crit
> // CHECK_NAPPING();
> // addi r3,r1,STACK_FRAME_OVERHEAD
> // bl .critical_exception
> // b ret_from_crit_except
> b .
>
> Are you working on fixing this? I'm trying to fix it, too, but I
No, I have no approach to Crit/MC and currently I'm focus only on Debug so
please do this as you expect :)
BTW, I send next version just now since there are something needed to
correct/improve.
Tiejun
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2012-12-20 9:14 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-10-25 6:43 [PATCH 1/3] powerpc/book3e: load critical/machine/debug exception stack Tiejun Chen
2012-10-25 6:43 ` [PATCH 2/3] powerpc/book3e: support kgdb for kernel space Tiejun Chen
2012-10-25 6:43 ` [PATCH 3/3] kgdb/kgdbts: support ppc64 Tiejun Chen
2012-12-18 22:10 ` [PATCH 1/3] powerpc/book3e: load critical/machine/debug exception stack Tabi Timur-B04825
2012-12-20 9:14 ` tiejun.chen
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).