Blackfin: fix link failure due to CONFIG_EXCEPTION_L1_SCRATCH

Move exception stack mess from entry.S to init.c to fix link failure when
CONFIG_EXCEPTION_L1_SCRATCH is in use.

Signed-off-by: Graf Yang <graf.yang@analog.com>
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Signed-off-by: Bryan Wu <cooloney@kernel.org>
This commit is contained in:
Graf Yang 2009-04-08 08:30:22 +00:00 committed by Mike Frysinger
parent b8d0c778e6
commit f82e0a0c67
3 changed files with 13 additions and 20 deletions

View file

@ -808,7 +808,7 @@ config APP_STACK_L1
config EXCEPTION_L1_SCRATCH config EXCEPTION_L1_SCRATCH
bool "Locate exception stack in L1 Scratch Memory" bool "Locate exception stack in L1 Scratch Memory"
default n default n
depends on !APP_STACK_L1 && !SYSCALL_TAB_L1 depends on !APP_STACK_L1
help help
Whenever an exception occurs, use the L1 Scratch memory for Whenever an exception occurs, use the L1 Scratch memory for
stack storage. You cannot place the stacks of FLAT binaries stack storage. You cannot place the stacks of FLAT binaries

View file

@ -36,7 +36,6 @@
#include <linux/init.h> #include <linux/init.h>
#include <linux/linkage.h> #include <linux/linkage.h>
#include <linux/unistd.h> #include <linux/unistd.h>
#include <linux/threads.h>
#include <asm/blackfin.h> #include <asm/blackfin.h>
#include <asm/errno.h> #include <asm/errno.h>
#include <asm/fixed_code.h> #include <asm/fixed_code.h>
@ -1588,19 +1587,3 @@ ENTRY(_sys_call_table)
.long _sys_ni_syscall .long _sys_ni_syscall
.endr .endr
END(_sys_call_table) END(_sys_call_table)
#ifdef CONFIG_EXCEPTION_L1_SCRATCH
/* .section .l1.bss.scratch */
.set _exception_stack_top, L1_SCRATCH_START + L1_SCRATCH_LENGTH
#else
#ifdef CONFIG_SYSCALL_TAB_L1
.section .l1.bss
#else
.bss
#endif
ENTRY(_exception_stack)
.rept 1024 * NR_CPUS
.long 0
.endr
_exception_stack_top:
#endif

View file

@ -52,9 +52,14 @@ static unsigned long empty_bad_page_table;
static unsigned long empty_bad_page; static unsigned long empty_bad_page;
unsigned long empty_zero_page; static unsigned long empty_zero_page;
extern unsigned long exception_stack[NR_CPUS][1024]; #ifndef CONFIG_EXCEPTION_L1_SCRATCH
#if defined CONFIG_SYSCALL_TAB_L1
__attribute__((l1_data))
#endif
static unsigned long exception_stack[NR_CPUS][1024];
#endif
struct blackfin_pda cpu_pda[NR_CPUS]; struct blackfin_pda cpu_pda[NR_CPUS];
EXPORT_SYMBOL(cpu_pda); EXPORT_SYMBOL(cpu_pda);
@ -117,7 +122,12 @@ asmlinkage void __init init_pda(void)
cpu_pda[0].next = &cpu_pda[1]; cpu_pda[0].next = &cpu_pda[1];
cpu_pda[1].next = &cpu_pda[0]; cpu_pda[1].next = &cpu_pda[0];
#ifdef CONFIG_EXCEPTION_L1_SCRATCH
cpu_pda[cpu].ex_stack = (unsigned long *)(L1_SCRATCH_START + \
L1_SCRATCH_LENGTH);
#else
cpu_pda[cpu].ex_stack = exception_stack[cpu + 1]; cpu_pda[cpu].ex_stack = exception_stack[cpu + 1];
#endif
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
cpu_pda[cpu].imask = 0x1f; cpu_pda[cpu].imask = 0x1f;