提交 d04ec773 编写于 作者: A Andreas Herrmann 提交者: Ingo Molnar

x86: pda_init(): fix memory leak when using CPU hotplug

pda->irqstackptr is allocated whenever a CPU is set online.
But it is never freed. This results in a memory leak of 16K
for each CPU offline/online cycle.

Fix is to allocate pda->irqstackptr only once.
Signed-off-by: NAndreas Herrmann <andreas.herrmann3@amd.com>
Cc: akpm@linux-foundation.org
Signed-off-by: NIngo Molnar <mingo@elte.hu>
上级 e4a6be4d
...@@ -529,17 +529,20 @@ void pda_init(int cpu) ...@@ -529,17 +529,20 @@ void pda_init(int cpu)
/* others are initialized in smpboot.c */ /* others are initialized in smpboot.c */
pda->pcurrent = &init_task; pda->pcurrent = &init_task;
pda->irqstackptr = boot_cpu_stack; pda->irqstackptr = boot_cpu_stack;
pda->irqstackptr += IRQSTACKSIZE - 64;
} else { } else {
pda->irqstackptr = (char *) if (!pda->irqstackptr) {
__get_free_pages(GFP_ATOMIC, IRQSTACK_ORDER); pda->irqstackptr = (char *)
if (!pda->irqstackptr) __get_free_pages(GFP_ATOMIC, IRQSTACK_ORDER);
panic("cannot allocate irqstack for cpu %d", cpu); if (!pda->irqstackptr)
panic("cannot allocate irqstack for cpu %d",
cpu);
pda->irqstackptr += IRQSTACKSIZE - 64;
}
if (pda->nodenumber == 0 && cpu_to_node(cpu) != NUMA_NO_NODE) if (pda->nodenumber == 0 && cpu_to_node(cpu) != NUMA_NO_NODE)
pda->nodenumber = cpu_to_node(cpu); pda->nodenumber = cpu_to_node(cpu);
} }
pda->irqstackptr += IRQSTACKSIZE-64;
} }
char boot_exception_stacks[(N_EXCEPTION_STACKS - 1) * EXCEPTION_STKSZ + char boot_exception_stacks[(N_EXCEPTION_STACKS - 1) * EXCEPTION_STKSZ +
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册