vserver 1.9.3
[linux-2.6.git] / arch / sparc / kernel / sun4d_smp.c
index 9f659c2..1de4c8a 100644 (file)
@@ -19,6 +19,7 @@
 #include <linux/spinlock.h>
 #include <linux/mm.h>
 #include <linux/swap.h>
+#include <linux/profile.h>
 
 #include <asm/ptrace.h>
 #include <asm/atomic.h>
@@ -29,7 +30,6 @@
 #include <asm/pgalloc.h>
 #include <asm/pgtable.h>
 #include <asm/oplib.h>
-#include <asm/hardirq.h>
 #include <asm/sbus.h>
 #include <asm/sbi.h>
 #include <asm/tlbflush.h>
@@ -201,18 +201,9 @@ void __init smp4d_boot_cpus(void)
                        int no;
 
                        /* Cook up an idler for this guy. */
-                       kernel_thread(start_secondary, NULL, CLONE_IDLETASK);
-
+                       p = fork_idle(i);
                        cpucount++;
-
-                       p = prev_task(&init_task);
-
-                       init_idle(p, i);
-
                        current_set[i] = p->thread_info;
-
-                       unhash_process(p);
-
                        for (no = 0; !cpu_find_by_instance(no, NULL, &mid)
                                     && mid != i; no++) ;
 
@@ -418,8 +409,6 @@ void smp4d_message_pass(int target, int msg, unsigned long data, int wait)
        panic("Bogon SMP message pass.");
 }
 
-extern void sparc_do_profile(unsigned long pc, unsigned long o7);
-
 void smp4d_percpu_timer_interrupt(struct pt_regs *regs)
 {
        int cpu = hard_smp4d_processor_id();
@@ -437,8 +426,7 @@ void smp4d_percpu_timer_interrupt(struct pt_regs *regs)
                show_leds(cpu);
        }
 
-       if(!user_mode(regs))
-               sparc_do_profile(regs->pc, regs->u_regs[UREG_RETPC]);
+       profile_tick(CPU_PROFILING, regs);
 
        if(!--prof_counter(cpu)) {
                int user = user_mode(regs);