Przeglądaj źródła

x86: standalone trampoline code

move the trampoline setup code out of smpboot.c - UP kernels can have
suspend support too.

Signed-off-by: Ingo Molnar <mingo@elte.hu>
Ingo Molnar 17 lat temu
rodzic
commit
77ad386e59

+ 1 - 0
arch/x86/kernel/Makefile

@@ -28,6 +28,7 @@ obj-y			+= alternative.o i8253.o
 obj-$(CONFIG_X86_64)	+= pci-nommu_64.o bugs_64.o
 obj-$(CONFIG_X86_64)	+= pci-nommu_64.o bugs_64.o
 obj-y			+= tsc_$(BITS).o io_delay.o rtc.o
 obj-y			+= tsc_$(BITS).o io_delay.o rtc.o
 
 
+obj-$(CONFIG_X86_TRAMPOLINE)	+= trampoline.o
 obj-y				+= i387.o
 obj-y				+= i387.o
 obj-y				+= ptrace.o
 obj-y				+= ptrace.o
 obj-y				+= ds.o
 obj-y				+= ds.o

+ 0 - 15
arch/x86/kernel/smpboot.c

@@ -140,9 +140,6 @@ static atomic_t init_deasserted;
 
 
 static int boot_cpu_logical_apicid;
 static int boot_cpu_logical_apicid;
 
 
-/* ready for x86_64, no harm for x86, since it will overwrite after alloc */
-unsigned char *trampoline_base = __va(TRAMPOLINE_BASE);
-
 /* representing cpus for which sibling maps can be computed */
 /* representing cpus for which sibling maps can be computed */
 static cpumask_t cpu_sibling_setup_map;
 static cpumask_t cpu_sibling_setup_map;
 
 
@@ -550,18 +547,6 @@ cpumask_t cpu_coregroup_map(int cpu)
 		return c->llc_shared_map;
 		return c->llc_shared_map;
 }
 }
 
 
-/*
- * Currently trivial. Write the real->protected mode
- * bootstrap into the page concerned. The caller
- * has made sure it's suitably aligned.
- */
-unsigned long setup_trampoline(void)
-{
-	memcpy(trampoline_base, trampoline_data,
-	       trampoline_end - trampoline_data);
-	return virt_to_phys(trampoline_base);
-}
-
 #ifdef CONFIG_X86_32
 #ifdef CONFIG_X86_32
 /*
 /*
  * We are called very early to get the low memory for the
  * We are called very early to get the low memory for the

+ 18 - 0
arch/x86/kernel/trampoline.c

@@ -0,0 +1,18 @@
+#include <linux/io.h>
+
+#include <asm/trampoline.h>
+
+/* ready for x86_64, no harm for x86, since it will overwrite after alloc */
+unsigned char *trampoline_base = __va(TRAMPOLINE_BASE);
+
+/*
+ * Currently trivial. Write the real->protected mode
+ * bootstrap into the page concerned. The caller
+ * has made sure it's suitably aligned.
+ */
+unsigned long setup_trampoline(void)
+{
+	memcpy(trampoline_base, trampoline_data,
+	       trampoline_end - trampoline_data);
+	return virt_to_phys(trampoline_base);
+}