diff options
author | Kumar Gala <galak@kernel.crashing.org> | 2008-04-28 02:21:22 -0400 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2008-04-29 01:57:34 -0400 |
commit | 85218827cc4ca900867807f19345418164ffc108 (patch) | |
tree | 1813b7fadb7c077acd0ef62f57385b7424ca0121 /arch/powerpc/kernel/process.c | |
parent | dd18434ff0b7d9b9ad3d596985fc84b329d2f9a8 (diff) |
[POWERPC] Add IRQSTACKS support on ppc32
This makes it possible to use separate stacks for hard and soft IRQs
on 32-bit powerpc as well as on 64-bit. The code for 32-bit is just
the 32-bit analog of the 64-bit code.
* Added allocation and initialization of the irq stacks. We limit the
stacks to be in lowmem for ppc32.
* Implemented ppc32 versions of call_do_softirq() and call_handle_irq()
to switch the stack pointers
* Reworked how we do stack overflow detection. We now keep around the
limit of the stack in the thread_struct and compare against the limit
to see if we've overflowed. We can now use this on ppc64 if desired.
[ paulus@samba.org: Fixed bug on 6xx where we need to reload r9 with the
thread_info pointer. ]
Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'arch/powerpc/kernel/process.c')
-rw-r--r-- | arch/powerpc/kernel/process.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c index 6caad17ea72e..7de41c3948ec 100644 --- a/arch/powerpc/kernel/process.c +++ b/arch/powerpc/kernel/process.c | |||
@@ -589,6 +589,8 @@ int copy_thread(int nr, unsigned long clone_flags, unsigned long usp, | |||
589 | kregs = (struct pt_regs *) sp; | 589 | kregs = (struct pt_regs *) sp; |
590 | sp -= STACK_FRAME_OVERHEAD; | 590 | sp -= STACK_FRAME_OVERHEAD; |
591 | p->thread.ksp = sp; | 591 | p->thread.ksp = sp; |
592 | p->thread.ksp_limit = (unsigned long)task_stack_page(p) + | ||
593 | _ALIGN_UP(sizeof(struct thread_info), 16); | ||
592 | 594 | ||
593 | #ifdef CONFIG_PPC64 | 595 | #ifdef CONFIG_PPC64 |
594 | if (cpu_has_feature(CPU_FTR_SLB)) { | 596 | if (cpu_has_feature(CPU_FTR_SLB)) { |