diff options
-rw-r--r-- | Documentation/x86/x86_64/kernel-stacks | 6 | ||||
-rw-r--r-- | arch/x86/Kconfig.debug | 3 | ||||
-rw-r--r-- | arch/x86/include/asm/irq.h | 12 | ||||
-rw-r--r-- | arch/x86/kernel/irq_32.c | 6 |
4 files changed, 9 insertions, 18 deletions
diff --git a/Documentation/x86/x86_64/kernel-stacks b/Documentation/x86/x86_64/kernel-stacks index 5ad65d51fb95..a01eec5d1d0b 100644 --- a/Documentation/x86/x86_64/kernel-stacks +++ b/Documentation/x86/x86_64/kernel-stacks | |||
@@ -18,9 +18,9 @@ specialized stacks contain no useful data. The main CPU stacks are: | |||
18 | Used for external hardware interrupts. If this is the first external | 18 | Used for external hardware interrupts. If this is the first external |
19 | hardware interrupt (i.e. not a nested hardware interrupt) then the | 19 | hardware interrupt (i.e. not a nested hardware interrupt) then the |
20 | kernel switches from the current task to the interrupt stack. Like | 20 | kernel switches from the current task to the interrupt stack. Like |
21 | the split thread and interrupt stacks on i386 (with CONFIG_4KSTACKS), | 21 | the split thread and interrupt stacks on i386, this gives more room |
22 | this gives more room for kernel interrupt processing without having | 22 | for kernel interrupt processing without having to increase the size |
23 | to increase the size of every per thread stack. | 23 | of every per thread stack. |
24 | 24 | ||
25 | The interrupt stack is also used when processing a softirq. | 25 | The interrupt stack is also used when processing a softirq. |
26 | 26 | ||
diff --git a/arch/x86/Kconfig.debug b/arch/x86/Kconfig.debug index 75085080b63e..badda8e20e78 100644 --- a/arch/x86/Kconfig.debug +++ b/arch/x86/Kconfig.debug | |||
@@ -128,8 +128,7 @@ config 4KSTACKS | |||
128 | If you say Y here the kernel will use a 4Kb stacksize for the | 128 | If you say Y here the kernel will use a 4Kb stacksize for the |
129 | kernel stack attached to each process/thread. This facilitates | 129 | kernel stack attached to each process/thread. This facilitates |
130 | running more threads on a system and also reduces the pressure | 130 | running more threads on a system and also reduces the pressure |
131 | on the VM subsystem for higher order allocations. This option | 131 | on the VM subsystem for higher order allocations. |
132 | will also use IRQ stacks to compensate for the reduced stackspace. | ||
133 | 132 | ||
134 | config DOUBLEFAULT | 133 | config DOUBLEFAULT |
135 | default y | 134 | default y |
diff --git a/arch/x86/include/asm/irq.h b/arch/x86/include/asm/irq.h index 5458380b6ef8..0bf5b0083650 100644 --- a/arch/x86/include/asm/irq.h +++ b/arch/x86/include/asm/irq.h | |||
@@ -19,18 +19,16 @@ static inline int irq_canonicalize(int irq) | |||
19 | # define ARCH_HAS_NMI_WATCHDOG | 19 | # define ARCH_HAS_NMI_WATCHDOG |
20 | #endif | 20 | #endif |
21 | 21 | ||
22 | #ifdef CONFIG_4KSTACKS | 22 | #ifdef CONFIG_X86_32 |
23 | extern void irq_ctx_init(int cpu); | 23 | extern void irq_ctx_init(int cpu); |
24 | extern void irq_ctx_exit(int cpu); | 24 | extern void irq_ctx_exit(int cpu); |
25 | # define __ARCH_HAS_DO_SOFTIRQ | ||
26 | #else | 25 | #else |
27 | # define irq_ctx_init(cpu) do { } while (0) | 26 | # define irq_ctx_init(cpu) do { } while (0) |
28 | # define irq_ctx_exit(cpu) do { } while (0) | 27 | # define irq_ctx_exit(cpu) do { } while (0) |
29 | # ifdef CONFIG_X86_64 | ||
30 | # define __ARCH_HAS_DO_SOFTIRQ | ||
31 | # endif | ||
32 | #endif | 28 | #endif |
33 | 29 | ||
30 | #define __ARCH_HAS_DO_SOFTIRQ | ||
31 | |||
34 | #ifdef CONFIG_HOTPLUG_CPU | 32 | #ifdef CONFIG_HOTPLUG_CPU |
35 | #include <linux/cpumask.h> | 33 | #include <linux/cpumask.h> |
36 | extern void fixup_irqs(void); | 34 | extern void fixup_irqs(void); |
diff --git a/arch/x86/kernel/irq_32.c b/arch/x86/kernel/irq_32.c index 10709f29d166..67f5f9f5299f 100644 --- a/arch/x86/kernel/irq_32.c +++ b/arch/x86/kernel/irq_32.c | |||
@@ -49,7 +49,6 @@ static inline int check_stack_overflow(void) { return 0; } | |||
49 | static inline void print_stack_overflow(void) { } | 49 | static inline void print_stack_overflow(void) { } |
50 | #endif | 50 | #endif |
51 | 51 | ||
52 | #ifdef CONFIG_4KSTACKS | ||
53 | /* | 52 | /* |
54 | * per-CPU IRQ handling contexts (thread information and stack) | 53 | * per-CPU IRQ handling contexts (thread information and stack) |
55 | */ | 54 | */ |
@@ -187,11 +186,6 @@ asmlinkage void do_softirq(void) | |||
187 | local_irq_restore(flags); | 186 | local_irq_restore(flags); |
188 | } | 187 | } |
189 | 188 | ||
190 | #else | ||
191 | static inline int | ||
192 | execute_on_irq_stack(int overflow, struct irq_desc *desc, int irq) { return 0; } | ||
193 | #endif | ||
194 | |||
195 | bool handle_irq(unsigned irq, struct pt_regs *regs) | 189 | bool handle_irq(unsigned irq, struct pt_regs *regs) |
196 | { | 190 | { |
197 | struct irq_desc *desc; | 191 | struct irq_desc *desc; |