aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorGlauber de Oliveira Costa <gcosta@redhat.com>2008-03-19 13:25:32 -0400
committerIngo Molnar <mingo@elte.hu>2008-04-17 11:41:01 -0400
commiteb44d0a2a9c4d64ed89044fcf1f75e6a27c42ea7 (patch)
treedc7ef962744d2282265c7be902109db46011ef97 /arch
parent8d77010f8c93b4d41ffd71c7ad9d07fc1668cd5a (diff)
x86: include smpboot_hooks.h in smpboot_64.c
We do it and also fix conflicts, which makes x86_64 automatically closer to i386 Signed-off-by: Glauber Costa <gcosta@redhat.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch')
-rw-r--r--arch/x86/kernel/smpboot_64.c29
1 files changed, 3 insertions, 26 deletions
diff --git a/arch/x86/kernel/smpboot_64.c b/arch/x86/kernel/smpboot_64.c
index c6c993f4c415..b9384b3af017 100644
--- a/arch/x86/kernel/smpboot_64.c
+++ b/arch/x86/kernel/smpboot_64.c
@@ -61,6 +61,7 @@
61#include <asm/numa.h> 61#include <asm/numa.h>
62 62
63#include <mach_wakecpu.h> 63#include <mach_wakecpu.h>
64#include <smpboot_hooks.h>
64 65
65/* Set when the idlers are all forked */ 66/* Set when the idlers are all forked */
66int smp_threads_ready; 67int smp_threads_ready;
@@ -517,14 +518,7 @@ do_rest:
517 518
518 Dprintk("Setting warm reset code and vector.\n"); 519 Dprintk("Setting warm reset code and vector.\n");
519 520
520 CMOS_WRITE(0xa, 0xf); 521 smpboot_setup_warm_reset_vector(start_rip);
521 local_flush_tlb();
522 Dprintk("1.\n");
523 *((volatile unsigned short *) phys_to_virt(0x469)) = start_rip >> 4;
524 Dprintk("2.\n");
525 *((volatile unsigned short *) phys_to_virt(0x467)) = start_rip & 0xf;
526 Dprintk("3.\n");
527
528 /* 522 /*
529 * Be paranoid about clearing APIC errors. 523 * Be paranoid about clearing APIC errors.
530 */ 524 */
@@ -594,23 +588,6 @@ cycles_t cacheflush_time;
594unsigned long cache_decay_ticks; 588unsigned long cache_decay_ticks;
595 589
596/* 590/*
597 * Cleanup possible dangling ends...
598 */
599static __cpuinit void smp_cleanup_boot(void)
600{
601 /*
602 * Paranoid: Set warm reset code and vector here back
603 * to default values.
604 */
605 CMOS_WRITE(0, 0xf);
606
607 /*
608 * Reset trampoline flag
609 */
610 *((volatile int *) phys_to_virt(0x467)) = 0;
611}
612
613/*
614 * Fall back to non SMP mode after errors. 591 * Fall back to non SMP mode after errors.
615 * 592 *
616 * RED-PEN audit/test this more. I bet there is more state messed up here. 593 * RED-PEN audit/test this more. I bet there is more state messed up here.
@@ -827,7 +804,7 @@ extern void smp_checks(void);
827 */ 804 */
828void __init native_smp_cpus_done(unsigned int max_cpus) 805void __init native_smp_cpus_done(unsigned int max_cpus)
829{ 806{
830 smp_cleanup_boot(); 807 smpboot_restore_warm_reset_vector();
831 808
832 Dprintk("Boot done.\n"); 809 Dprintk("Boot done.\n");
833 810