X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=arch%2Fsparc64%2Fkernel%2Fprocess.c;fp=arch%2Fsparc64%2Fkernel%2Fprocess.c;h=26d3ec41da1c376fbe855ec1253c56c327fed43f;hb=6a77f38946aaee1cd85eeec6cf4229b204c15071;hp=f3e3c657e9cb87c5c77d052f8ff3580de1faed1a;hpb=87fc8d1bb10cd459024a742c6a10961fefcef18f;p=linux-2.6.git diff --git a/arch/sparc64/kernel/process.c b/arch/sparc64/kernel/process.c index f3e3c657e..26d3ec41d 100644 --- a/arch/sparc64/kernel/process.c +++ b/arch/sparc64/kernel/process.c @@ -60,10 +60,10 @@ void default_idle(void) /* * the idle loop on a Sparc... ;) */ -int cpu_idle(void) +void cpu_idle(void) { if (current->pid != 0) - return -EPERM; + return; /* endless idle loop with no priority at all */ for (;;) { @@ -80,7 +80,7 @@ int cpu_idle(void) schedule(); check_pgt_cache(); } - return 0; + return; } #else @@ -90,7 +90,7 @@ int cpu_idle(void) */ #define idle_me_harder() (cpu_data(smp_processor_id()).idle_volume += 1) #define unidle_me() (cpu_data(smp_processor_id()).idle_volume = 0) -int cpu_idle(void) +void cpu_idle(void) { set_thread_flag(TIF_POLLING_NRFLAG); while(1) { @@ -167,7 +167,7 @@ static void show_regwindow32(struct pt_regs *regs) mm_segment_t old_fs; __asm__ __volatile__ ("flushw"); - rw = (struct reg_window32 __user *)((long)(unsigned)regs->u_regs[14]); + rw = compat_ptr((unsigned)regs->u_regs[14]); old_fs = get_fs(); set_fs (USER_DS); if (copy_from_user (&r_w, rw, sizeof(r_w))) { @@ -282,7 +282,7 @@ void show_stackframe32(struct sparc_stackf32 *sf) } #ifdef CONFIG_SMP -static spinlock_t regdump_lock = SPIN_LOCK_UNLOCKED; +static DEFINE_SPINLOCK(regdump_lock); #endif void __show_regs(struct pt_regs * regs) @@ -434,14 +434,13 @@ void flush_thread(void) if (test_thread_flag(TIF_32BIT)) { struct mm_struct *mm = t->task->mm; pgd_t *pgd0 = &mm->pgd[0]; + pud_t *pud0 = pud_offset(pgd0, 0); - if (pgd_none(*pgd0)) { - pmd_t *page = pmd_alloc_one_fast(NULL, 0); - if (!page) - page = pmd_alloc_one(NULL, 0); - pgd_set(pgd0, page); + if (pud_none(*pud0)) { + pmd_t *page = pmd_alloc_one(mm, 0); + pud_set(pud0, page); } - pgd_cache = ((unsigned long) pgd_val(*pgd0)) << 11UL; + pgd_cache = get_pgd_cache(pgd0); } __asm__ __volatile__("stxa %0, [%1] %2\n\t" "membar #Sync" @@ -621,8 +620,6 @@ int copy_thread(int nr, unsigned long clone_flags, unsigned long sp, p->thread.smp_lock_pc = 0; #endif - p->set_child_tid = p->clear_child_tid = NULL; - /* Calculate offset to stack_frame & pt_regs */ child_trap_frame = ((char *)t) + (THREAD_SIZE - (TRACEREG_SZ+STACKFRAME_SZ)); memcpy(child_trap_frame, (((struct sparc_stackf *)regs)-1), (TRACEREG_SZ+STACKFRAME_SZ)); @@ -829,7 +826,9 @@ asmlinkage int sparc_execve(struct pt_regs *regs) current_thread_info()->xfsr[0] = 0; current_thread_info()->fpsaved[0] = 0; regs->tstate &= ~TSTATE_PEF; + task_lock(current); current->ptrace &= ~PT_DTRACE; + task_unlock(current); } out: return error;