--- linux-2.6.4-rc2/arch/sparc/kernel/devices.c.orig 2004-03-04 06:17:04.000000000 +0000 +++ linux-2.6.4-rc2/arch/sparc/kernel/devices.c 2004-03-05 14:43:27.000000000 +0000 @@ -15,7 +15,7 @@ #include #include -struct prom_cpuinfo linux_cpus[32]; +struct prom_cpuinfo linux_cpus[NR_CPUS]; int linux_num_cpus = 0; extern void cpu_probe(void); --- linux-2.6.4-rc2/arch/sparc/kernel/smp.c.orig 2004-03-04 06:16:40.000000000 +0000 +++ linux-2.6.4-rc2/arch/sparc/kernel/smp.c 2004-03-05 19:37:41.000000000 +0000 @@ -58,6 +58,7 @@ volatile int __cpu_number_map[NR_CPUS]; volatile int __cpu_logical_map[NR_CPUS]; cycles_t cacheflush_time = 0; /* XXX */ +unsigned long cache_decay_ticks = 1; /* XXX */ /* The only guaranteed locking primitive available on all Sparc * processors is 'ldstub [%reg + immediate], %dest_reg' which atomically @@ -248,7 +249,7 @@ /* Reschedule call back. */ void smp_reschedule_irq(void) { - current->work.need_resched = 1; + set_need_resched(); } /* Stopping processors. */ --- linux-2.6.4-rc2/include/asm-sparc/system.h.orig 2004-03-04 06:16:54.000000000 +0000 +++ linux-2.6.4-rc2/include/asm-sparc/system.h 2004-03-05 15:49:07.000000000 +0000 @@ -75,7 +75,7 @@ #ifdef CONFIG_SMP #define SWITCH_ENTER(prv) \ do { \ - if (test_tsk_thread_flag(prv, TIF_USEDFPU) { \ + if (test_tsk_thread_flag(prv, TIF_USEDFPU)) { \ put_psr(get_psr() | PSR_EF); \ fpsave(&(prv)->thread.float_regs[0], &(prv)->thread.fsr, \ &(prv)->thread.fpqueue[0], &(prv)->thread.fpqdepth); \ --- linux-2.6.4-rc2/arch/sparc/kernel/sun4m_smp.c.orig 2004-03-04 06:17:00.000000000 +0000 +++ linux-2.6.4-rc2/arch/sparc/kernel/sun4m_smp.c 2004-03-05 15:19:21.000000000 +0000 @@ -15,6 +15,7 @@ #include #include #include +#include #include #include @@ -26,6 +27,8 @@ #include #include #include +#include +#include #define __KERNEL_SYSCALLS__ #include @@ -100,8 +103,6 @@ * the SMP initialization the master will be just allowed * to call the scheduler code. */ - init_idle(); - /* Allow master to continue. */ swap((unsigned long *)&cpu_callin_map[cpuid], 1); @@ -166,7 +167,7 @@ mid_xlate[boot_cpu_id] = (linux_cpus[boot_cpu_id].mid & ~8); __cpu_number_map[boot_cpu_id] = 0; __cpu_logical_map[0] = boot_cpu_id; - current->cpu = boot_cpu_id; + current->thread_info->cpu = boot_cpu_id; smp_store_cpu_info(boot_cpu_id); set_irq_udt(mid_xlate[boot_cpu_id]); @@ -191,9 +192,9 @@ p = prev_task(&init_task); - p->cpu = i; + p->thread_info->cpu = i; - current_set[i] = p; + current_set[i] = p->thread_info; unhash_process(p); --- linux-2.6.4-rc2/arch/sparc/kernel/sun4d_smp.c.orig 2004-03-04 06:16:37.000000000 +0000 +++ linux-2.6.4-rc2/arch/sparc/kernel/sun4d_smp.c 2004-03-05 15:29:11.000000000 +0000 @@ -18,6 +18,7 @@ #include #include #include +#include #include #include @@ -31,6 +32,8 @@ #include #include #include +#include +#include #define __KERNEL_SYSCALLS__ #include @@ -103,7 +106,6 @@ * the SMP initialization the master will be just allowed * to call the scheduler code. */ - init_idle(); /* Get our local ticker going. */ smp_setup_percpu_timer(); @@ -193,7 +195,7 @@ mid_xlate[i] = i; __cpu_number_map[boot_cpu_id] = 0; __cpu_logical_map[0] = boot_cpu_id; - current->cpu = boot_cpu_id; + current->thread_info->cpu = boot_cpu_id; smp_store_cpu_info(boot_cpu_id); smp_setup_percpu_timer(); local_flush_cache_all(); @@ -218,9 +220,9 @@ p = prev_task(&init_task); - p->cpu = i; + p->thread_info->cpu = i; - current_set[i] = p; + current_set[i] = p->thread_info; unhash_process(p); --- linux-2.6.4-rc2/arch/sparc/kernel/sparc_ksyms.c.orig 2004-03-04 06:16:36.000000000 +0000 +++ linux-2.6.4-rc2/arch/sparc/kernel/sparc_ksyms.c 2004-03-05 15:34:54.000000000 +0000 @@ -157,7 +157,6 @@ #ifdef CONFIG_SMP /* IRQ implementation. */ -EXPORT_SYMBOL(global_irq_holder); EXPORT_SYMBOL(synchronize_irq); /* Misc SMP information */ --- linux-2.6.4-rc2/include/asm-sparc/smp.h.orig 2004-03-04 06:16:39.000000000 +0000 +++ linux-2.6.4-rc2/include/asm-sparc/smp.h 2004-03-05 17:44:57.000000000 +0000 @@ -54,6 +54,7 @@ extern unsigned char boot_cpu_id; extern unsigned long cpu_present_map; #define cpu_online_map cpu_present_map +#define cpu_possible_map cpu_present_map typedef void (*smpfunc_t)(unsigned long, unsigned long, unsigned long, unsigned long, unsigned long); --- linux-2.6.4-rc2/arch/sparc/kernel/trampoline.S.orig 2004-03-04 06:17:04.000000000 +0000 +++ linux-2.6.4-rc2/arch/sparc/kernel/trampoline.S 2004-03-05 18:59:45.000000000 +0000 @@ -13,6 +13,7 @@ #include #include #include +#include .globl sun4m_cpu_startup, __smp4m_processor_id .globl sun4d_cpu_startup, __smp4d_processor_id --- linux-2.6.4-rc2/arch/sparc/mm/nosun4c.c.orig 2004-03-04 06:17:10.000000000 +0000 +++ linux-2.6.4-rc2/arch/sparc/mm/nosun4c.c 2004-03-05 19:58:10.000000000 +0000 @@ -52,7 +52,7 @@ { } -pte_t *sun4c_pte_offset(pmd_t * dir, unsigned long address) +pte_t *sun4c_pte_offset_kernel(pmd_t * dir, unsigned long address) { return NULL; }