diff options
Diffstat (limited to 'arch')
-rw-r--r-- | arch/x86_64/kernel/setup64.c | 21 | ||||
-rw-r--r-- | arch/x86_64/kernel/traps.c | 21 |
2 files changed, 6 insertions, 36 deletions
diff --git a/arch/x86_64/kernel/setup64.c b/arch/x86_64/kernel/setup64.c index 491361752c70..9332d2361e08 100644 --- a/arch/x86_64/kernel/setup64.c +++ b/arch/x86_64/kernel/setup64.c | |||
@@ -237,28 +237,17 @@ void __cpuinit cpu_init (void) | |||
237 | * set up and load the per-CPU TSS | 237 | * set up and load the per-CPU TSS |
238 | */ | 238 | */ |
239 | for (v = 0; v < N_EXCEPTION_STACKS; v++) { | 239 | for (v = 0; v < N_EXCEPTION_STACKS; v++) { |
240 | static const unsigned int order[N_EXCEPTION_STACKS] = { | ||
241 | [0 ... N_EXCEPTION_STACKS - 1] = EXCEPTION_STACK_ORDER, | ||
242 | [DEBUG_STACK - 1] = DEBUG_STACK_ORDER | ||
243 | }; | ||
240 | if (cpu) { | 244 | if (cpu) { |
241 | static const unsigned int order[N_EXCEPTION_STACKS] = { | ||
242 | [0 ... N_EXCEPTION_STACKS - 1] = EXCEPTION_STACK_ORDER, | ||
243 | [DEBUG_STACK - 1] = DEBUG_STACK_ORDER | ||
244 | }; | ||
245 | |||
246 | estacks = (char *)__get_free_pages(GFP_ATOMIC, order[v]); | 245 | estacks = (char *)__get_free_pages(GFP_ATOMIC, order[v]); |
247 | if (!estacks) | 246 | if (!estacks) |
248 | panic("Cannot allocate exception stack %ld %d\n", | 247 | panic("Cannot allocate exception stack %ld %d\n", |
249 | v, cpu); | 248 | v, cpu); |
250 | } | 249 | } |
251 | switch (v + 1) { | 250 | estacks += PAGE_SIZE << order[v]; |
252 | #if DEBUG_STKSZ > EXCEPTION_STKSZ | ||
253 | case DEBUG_STACK: | ||
254 | cpu_pda(cpu)->debugstack = (unsigned long)estacks; | ||
255 | estacks += DEBUG_STKSZ; | ||
256 | break; | ||
257 | #endif | ||
258 | default: | ||
259 | estacks += EXCEPTION_STKSZ; | ||
260 | break; | ||
261 | } | ||
262 | orig_ist->ist[v] = t->ist[v] = (unsigned long)estacks; | 251 | orig_ist->ist[v] = t->ist[v] = (unsigned long)estacks; |
263 | } | 252 | } |
264 | 253 | ||
diff --git a/arch/x86_64/kernel/traps.c b/arch/x86_64/kernel/traps.c index 38bc821e457b..fb8486eca1b6 100644 --- a/arch/x86_64/kernel/traps.c +++ b/arch/x86_64/kernel/traps.c | |||
@@ -162,26 +162,7 @@ static unsigned long *in_exception_stack(unsigned cpu, unsigned long stack, | |||
162 | * 'stack' is in one of them: | 162 | * 'stack' is in one of them: |
163 | */ | 163 | */ |
164 | for (k = 0; k < N_EXCEPTION_STACKS; k++) { | 164 | for (k = 0; k < N_EXCEPTION_STACKS; k++) { |
165 | unsigned long end; | 165 | unsigned long end = per_cpu(orig_ist, cpu).ist[k]; |
166 | |||
167 | /* | ||
168 | * set 'end' to the end of the exception stack. | ||
169 | */ | ||
170 | switch (k + 1) { | ||
171 | /* | ||
172 | * TODO: this block is not needed i think, because | ||
173 | * setup64.c:cpu_init() sets up t->ist[DEBUG_STACK] | ||
174 | * properly too. | ||
175 | */ | ||
176 | #if DEBUG_STKSZ > EXCEPTION_STKSZ | ||
177 | case DEBUG_STACK: | ||
178 | end = cpu_pda(cpu)->debugstack + DEBUG_STKSZ; | ||
179 | break; | ||
180 | #endif | ||
181 | default: | ||
182 | end = per_cpu(orig_ist, cpu).ist[k]; | ||
183 | break; | ||
184 | } | ||
185 | /* | 166 | /* |
186 | * Is 'stack' above this exception frame's end? | 167 | * Is 'stack' above this exception frame's end? |
187 | * If yes then skip to the next frame. | 168 | * If yes then skip to the next frame. |