diff options
Diffstat (limited to 'arch/sparc64/kernel/traps.c')
-rw-r--r-- | arch/sparc64/kernel/traps.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/arch/sparc64/kernel/traps.c b/arch/sparc64/kernel/traps.c index 8d44ae5a15e3..f47f4874253c 100644 --- a/arch/sparc64/kernel/traps.c +++ b/arch/sparc64/kernel/traps.c | |||
@@ -2130,7 +2130,22 @@ void do_getpsr(struct pt_regs *regs) | |||
2130 | } | 2130 | } |
2131 | } | 2131 | } |
2132 | 2132 | ||
2133 | struct trap_per_cpu trap_block[NR_CPUS]; | ||
2134 | |||
2135 | /* This can get invoked before sched_init() so play it super safe | ||
2136 | * and use hard_smp_processor_id(). | ||
2137 | */ | ||
2138 | void init_cur_cpu_trap(void) | ||
2139 | { | ||
2140 | int cpu = hard_smp_processor_id(); | ||
2141 | struct trap_per_cpu *p = &trap_block[cpu]; | ||
2142 | |||
2143 | p->thread = current_thread_info(); | ||
2144 | p->pgd_paddr = 0; | ||
2145 | } | ||
2146 | |||
2133 | extern void thread_info_offsets_are_bolixed_dave(void); | 2147 | extern void thread_info_offsets_are_bolixed_dave(void); |
2148 | extern void trap_per_cpu_offsets_are_bolixed_dave(void); | ||
2134 | 2149 | ||
2135 | /* Only invoked on boot processor. */ | 2150 | /* Only invoked on boot processor. */ |
2136 | void __init trap_init(void) | 2151 | void __init trap_init(void) |
@@ -2165,6 +2180,10 @@ void __init trap_init(void) | |||
2165 | (TI_FPREGS & (64 - 1))) | 2180 | (TI_FPREGS & (64 - 1))) |
2166 | thread_info_offsets_are_bolixed_dave(); | 2181 | thread_info_offsets_are_bolixed_dave(); |
2167 | 2182 | ||
2183 | if (TRAP_PER_CPU_THREAD != offsetof(struct trap_per_cpu, thread) || | ||
2184 | TRAP_PER_CPU_PGD_PADDR != offsetof(struct trap_per_cpu, pgd_paddr)) | ||
2185 | trap_per_cpu_offsets_are_bolixed_dave(); | ||
2186 | |||
2168 | /* Attach to the address space of init_task. On SMP we | 2187 | /* Attach to the address space of init_task. On SMP we |
2169 | * do this in smp.c:smp_callin for other cpus. | 2188 | * do this in smp.c:smp_callin for other cpus. |
2170 | */ | 2189 | */ |