瀏覽代碼

x86: make c_idle.work have a static address.

Currently, c_idle is declared in the stack, and thus, have no static address.

Peter Zijlstra points out this simple solution, in which c_idle.work
is initializated separatedly. Note that the INIT_WORK macro has a static
declaration of a key inside.

Signed-off-by: Glauber Costa <gcosta@redhat.com>
Acked-by: Peter Zijlstra <pzijlstr@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Glauber Costa 17 年之前
父節點
當前提交
2b775a27c0
共有 1 個文件被更改,包括 1 次插入1 次删除
  1. 1 1
      arch/x86/kernel/smpboot_64.c

+ 1 - 1
arch/x86/kernel/smpboot_64.c

@@ -554,10 +554,10 @@ static int __cpuinit do_boot_cpu(int cpu, int apicid)
 	int timeout;
 	int timeout;
 	unsigned long start_rip;
 	unsigned long start_rip;
 	struct create_idle c_idle = {
 	struct create_idle c_idle = {
-		.work = __WORK_INITIALIZER(c_idle.work, do_fork_idle),
 		.cpu = cpu,
 		.cpu = cpu,
 		.done = COMPLETION_INITIALIZER_ONSTACK(c_idle.done),
 		.done = COMPLETION_INITIALIZER_ONSTACK(c_idle.done),
 	};
 	};
+	INIT_WORK(&c_idle.work, do_fork_idle);
 
 
 	/* allocate memory for gdts of secondary cpus. Hotplug is considered */
 	/* allocate memory for gdts of secondary cpus. Hotplug is considered */
 	if (!cpu_gdt_descr[cpu].address &&
 	if (!cpu_gdt_descr[cpu].address &&