#include <asm/numa.h>
 
 #include <mach_wakecpu.h>
+#include <smpboot_hooks.h>
 
 /* Set when the idlers are all forked */
 int smp_threads_ready;
 
        Dprintk("Setting warm reset code and vector.\n");
 
-       CMOS_WRITE(0xa, 0xf);
-       local_flush_tlb();
-       Dprintk("1.\n");
-       *((volatile unsigned short *) phys_to_virt(0x469)) = start_rip >> 4;
-       Dprintk("2.\n");
-       *((volatile unsigned short *) phys_to_virt(0x467)) = start_rip & 0xf;
-       Dprintk("3.\n");
-
+       smpboot_setup_warm_reset_vector(start_rip);
        /*
         * Be paranoid about clearing APIC errors.
         */
 cycles_t cacheflush_time;
 unsigned long cache_decay_ticks;
 
-/*
- * Cleanup possible dangling ends...
- */
-static __cpuinit void smp_cleanup_boot(void)
-{
-       /*
-        * Paranoid:  Set warm reset code and vector here back
-        * to default values.
-        */
-       CMOS_WRITE(0, 0xf);
-
-       /*
-        * Reset trampoline flag
-        */
-       *((volatile int *) phys_to_virt(0x467)) = 0;
-}
-
 /*
  * Fall back to non SMP mode after errors.
  *
  */
 void __init native_smp_cpus_done(unsigned int max_cpus)
 {
-       smp_cleanup_boot();
+       smpboot_restore_warm_reset_vector();
 
        Dprintk("Boot done.\n");