Thread (15 messages) 15 messages, 4 authors, 2011-08-31

Re: [v3 PATCH 1/1] booke/kprobe: make program exception to use one dedicated exception stack

From: Scott Wood <hidden>
Date: 2011-07-14 15:54:03

On Thu, 14 Jul 2011 08:27:44 -0500
Kumar Gala [off-list ref] wrote:
On Jul 11, 2011, at 6:31 AM, Tiejun Chen wrote:
quoted
When kprobe these operations such as store-and-update-word for SP(r1),

stwu r1, -A(r1)

The program exception is triggered, and PPC always allocate an exception frame
as shown as the follows:

old r1 ----------
        ...
        nip
        gpr[2] ~ gpr[31]
        gpr[1] <--------- old r1 is stored.
        gpr[0]
      -------- <--------- pr_regs @offset 16 bytes
      padding
      STACK_FRAME_REGS_MARKER
      LR
      back chain
new r1 ----------
Then emulate_step() will emulate this instruction, 'stwu'. Actually its
equivalent to:
1> Update pr_regs->gpr[1] = mem[old r1 + (-A)]
2> stw [old r1], mem[old r1 + (-A)]

Please notice the stack based on new r1 may be covered with mem[old r1
+(-A)] when addr[old r1 + (-A)] < addr[old r1 + sizeof(an exception frame0].
So the above 2# operation will overwirte something to break this exception
frame then unexpected kernel problem will be issued.

So looks we have to implement independed interrupt stack for PPC program
exception when CONFIG_BOOKE is enabled. Here we can use
EXC_LEVEL_EXCEPTION_PROLOG to replace original NORMAL_EXCEPTION_PROLOG
for program exception if CONFIG_BOOKE. Then its always safe for kprobe
with independed exc stack from one pre-allocated and dedicated thread_info.
Actually this is just waht we did for critical/machine check exceptions
on PPC.

Signed-off-by: Tiejun Chen <redacted>
---
I'm still very confused why we need a unique stack frame for kprobe/program exceptions on book-e devices.
I don't know why it's booke-specific (or why they're emulating rather than
using single-step), but the problem is trying to emulate an instruction
that's expanding the non-exception stack into the area that the exception
handler is sitting on, and writing to that new stack area.

-Scott
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help