[PATCH] x86-32: Allocate irq stacks seperate from percpu area

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Brian Gerst
Date: Tuesday, October 26, 2010 - 10:43 pm

The percpu allocator cannot handle alignments larger than one page.
Allocate the irq stacks seperately, and only keep the pointers as
percpu data.

Signed-off-by: Brian Gerst <brgerst@gmail.com>
---
 arch/x86/include/asm/irq.h |    2 --
 arch/x86/kernel/irq_32.c   |   12 ++----------
 arch/x86/kernel/smpboot.c  |    1 -
 3 files changed, 2 insertions(+), 13 deletions(-)

diff --git a/arch/x86/include/asm/irq.h b/arch/x86/include/asm/irq.h
index 0bf5b00..13b0eba 100644
--- a/arch/x86/include/asm/irq.h
+++ b/arch/x86/include/asm/irq.h
@@ -21,10 +21,8 @@ static inline int irq_canonicalize(int irq)
 
 #ifdef CONFIG_X86_32
 extern void irq_ctx_init(int cpu);
-extern void irq_ctx_exit(int cpu);
 #else
 # define irq_ctx_init(cpu) do { } while (0)
-# define irq_ctx_exit(cpu) do { } while (0)
 #endif
 
 #define __ARCH_HAS_DO_SOFTIRQ
diff --git a/arch/x86/kernel/irq_32.c b/arch/x86/kernel/irq_32.c
index 50fbbe6..64668db 100644
--- a/arch/x86/kernel/irq_32.c
+++ b/arch/x86/kernel/irq_32.c
@@ -60,9 +60,6 @@ union irq_ctx {
 static DEFINE_PER_CPU(union irq_ctx *, hardirq_ctx);
 static DEFINE_PER_CPU(union irq_ctx *, softirq_ctx);
 
-static DEFINE_PER_CPU_MULTIPAGE_ALIGNED(union irq_ctx, hardirq_stack, THREAD_SIZE);
-static DEFINE_PER_CPU_MULTIPAGE_ALIGNED(union irq_ctx, softirq_stack, THREAD_SIZE);
-
 static void call_on_stack(void *func, void *stack)
 {
 	asm volatile("xchgl	%%ebx,%%esp	\n"
@@ -128,7 +125,7 @@ void __cpuinit irq_ctx_init(int cpu)
 	if (per_cpu(hardirq_ctx, cpu))
 		return;
 
-	irqctx = &per_cpu(hardirq_stack, cpu);
+	irqctx = (union irq_ctx *)__get_free_pages(THREAD_FLAGS, THREAD_ORDER);
 	irqctx->tinfo.task		= NULL;
 	irqctx->tinfo.exec_domain	= NULL;
 	irqctx->tinfo.cpu		= cpu;
@@ -137,7 +134,7 @@ void __cpuinit irq_ctx_init(int cpu)
 
 	per_cpu(hardirq_ctx, cpu) = irqctx;
 
-	irqctx = &per_cpu(softirq_stack, cpu);
+	irqctx = (union irq_ctx *)__get_free_pages(THREAD_FLAGS, THREAD_ORDER);
 	irqctx->tinfo.task		= NULL;
 	irqctx->tinfo.exec_domain	= NULL;
 	irqctx->tinfo.cpu		= cpu;
@@ -150,11 +147,6 @@ void __cpuinit irq_ctx_init(int cpu)
 	       cpu, per_cpu(hardirq_ctx, cpu),  per_cpu(softirq_ctx, cpu));
 }
 
-void irq_ctx_exit(int cpu)
-{
-	per_cpu(hardirq_ctx, cpu) = NULL;
-}
-
 asmlinkage void do_softirq(void)
 {
 	unsigned long flags;
diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c
index 6af1185..90baf56 100644
--- a/arch/x86/kernel/smpboot.c
+++ b/arch/x86/kernel/smpboot.c
@@ -1373,7 +1373,6 @@ void play_dead_common(void)
 {
 	idle_task_exit();
 	reset_lazy_tlbstate();
-	irq_ctx_exit(raw_smp_processor_id());
 	c1e_remove_cpu(raw_smp_processor_id());
 
 	mb();
-- 
1.7.2.3

--
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[PATCH] x86, percpu: revert commit fe8e0c25, Tejun Heo, (Tue Oct 26, 5:45 am)
Re: [PATCH] x86, percpu: revert commit fe8e0c25, Ingo Molnar, (Tue Oct 26, 6:25 am)
Re: [PATCH] x86, percpu: revert commit fe8e0c25, Tejun Heo, (Tue Oct 26, 6:34 am)
Re: [PATCH] x86, percpu: revert commit fe8e0c25, Brian Gerst, (Tue Oct 26, 6:49 am)
Re: [PATCH] x86, percpu: revert commit fe8e0c25, Linus Torvalds, (Tue Oct 26, 8:08 am)
[PATCH] x86-32: Allocate irq stacks seperate from percpu area, Brian Gerst, (Tue Oct 26, 10:43 pm)
[tip:x86/urgent] x86-32: Allocate irq stacks seperate from ..., tip-bot for Brian Gerst, (Wed Oct 27, 9:03 am)
[tip:x86/urgent] percpu: Remove the multi-page alignment f ..., tip-bot for Ingo Molnar, (Wed Oct 27, 9:04 am)
[PATCH] numa: fix slab_node(MPOL_BIND), Eric Dumazet, (Wed Oct 27, 10:33 am)
[PATCH] x86-32: NUMA irq stacks allocations, Eric Dumazet, (Thu Oct 28, 7:40 am)
Re: [PATCH] numa: fix slab_node(MPOL_BIND), Linus Torvalds, (Thu Oct 28, 8:59 am)
Re: [PATCH] numa: fix slab_node(MPOL_BIND), Eric Dumazet, (Thu Oct 28, 9:27 am)
Re: [PATCH] numa: fix slab_node(MPOL_BIND), Mel Gorman, (Thu Oct 28, 9:45 am)
Re: [PATCH] numa: fix slab_node(MPOL_BIND), Christoph Lameter, (Thu Oct 28, 9:55 am)
Re: [PATCH] numa: fix slab_node(MPOL_BIND), Andrew Morton, (Thu Oct 28, 2:07 pm)
[tip:x86/urgent] x86-32: Restore irq stacks NUMA-aware all ..., tip-bot for Eric Dumazet, (Thu Oct 28, 11:43 pm)
Re: [PATCH] numa: fix slab_node(MPOL_BIND), Christoph Lameter, (Fri Oct 29, 7:55 am)