|
@@ -60,9 +60,6 @@ union irq_ctx {
|
|
static DEFINE_PER_CPU(union irq_ctx *, hardirq_ctx);
|
|
static DEFINE_PER_CPU(union irq_ctx *, hardirq_ctx);
|
|
static DEFINE_PER_CPU(union irq_ctx *, softirq_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)
|
|
static void call_on_stack(void *func, void *stack)
|
|
{
|
|
{
|
|
asm volatile("xchgl %%ebx,%%esp \n"
|
|
asm volatile("xchgl %%ebx,%%esp \n"
|
|
@@ -128,7 +125,7 @@ void __cpuinit irq_ctx_init(int cpu)
|
|
if (per_cpu(hardirq_ctx, cpu))
|
|
if (per_cpu(hardirq_ctx, cpu))
|
|
return;
|
|
return;
|
|
|
|
|
|
- irqctx = &per_cpu(hardirq_stack, cpu);
|
|
|
|
|
|
+ irqctx = (union irq_ctx *)__get_free_pages(THREAD_FLAGS, THREAD_ORDER);
|
|
irqctx->tinfo.task = NULL;
|
|
irqctx->tinfo.task = NULL;
|
|
irqctx->tinfo.exec_domain = NULL;
|
|
irqctx->tinfo.exec_domain = NULL;
|
|
irqctx->tinfo.cpu = cpu;
|
|
irqctx->tinfo.cpu = cpu;
|
|
@@ -137,7 +134,7 @@ void __cpuinit irq_ctx_init(int cpu)
|
|
|
|
|
|
per_cpu(hardirq_ctx, cpu) = irqctx;
|
|
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.task = NULL;
|
|
irqctx->tinfo.exec_domain = NULL;
|
|
irqctx->tinfo.exec_domain = NULL;
|
|
irqctx->tinfo.cpu = cpu;
|
|
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));
|
|
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)
|
|
asmlinkage void do_softirq(void)
|
|
{
|
|
{
|
|
unsigned long flags;
|
|
unsigned long flags;
|