#ifdef CONFIG_PPC_ISERIES set_ti_thread_flag(p->thread_info, TIF_RUN_LIGHT); #endif 
copy_thread(int nr, unsigned long clone_flags, unsigned long usp,	    unsigned long unused, struct task_struct *p, struct pt_regs *regs){	struct pt_regs *childregs, *kregs;	extern void ret_from_fork(void);	unsigned long sp = (unsigned long)p->thread_info + THREAD_SIZE;	/* Copy registers */	sp -= sizeof(struct pt_regs);	childregs = (struct pt_regs *) sp;	*childregs = *regs;	if ((childregs->msr & MSR_PR) == 0) {		/* for kernel thread, set stackptr in new task */		childregs->gpr[1] = sp + sizeof(struct pt_regs);		p->thread.regs = NULL;	/* no user register state */		clear_ti_thread_flag(p->thread_info, TIF_32BIT);#ifdef CONFIG_PPC_ISERIES		set_ti_thread_flag(p->thread_info, TIF_RUN_LIGHT);#endif	} else {		childregs->gpr[1] = usp;		p->thread.regs = childregs;		if (clone_flags & CLONE_SETTLS) {			if (test_thread_flag(TIF_32BIT))				childregs->gpr[2] = childregs->gpr[6];			else				childregs->gpr[13] = childregs->gpr[6];		}	}	childregs->gpr[3] = 0;  /* Result from fork() */	sp -= STACK_FRAME_OVERHEAD;	/*	 * The way this works is that at some point in the future	 * some task will call _switch to switch to the new task.	 * That will pop off the stack frame created below and start	 * the new task running at ret_from_fork.  The new task will	 * do some house keeping and then return from the fork or clone	 * system call, using the stack frame created above.	 */	sp -= sizeof(struct pt_regs);	kregs = (struct pt_regs *) sp;	sp -= STACK_FRAME_OVERHEAD;	p->thread.ksp = sp;	if (cpu_has_feature(CPU_FTR_SLB)) {		unsigned long sp_vsid = get_kernel_vsid(sp);		sp_vsid <<= SLB_VSID_SHIFT;		sp_vsid |= SLB_VSID_KERNEL;		if (cpu_has_feature(CPU_FTR_16M_PAGE))			sp_vsid |= SLB_VSID_L;		p->thread.ksp_vsid = sp_vsid;	}	/*	 * The PPC64 ABI makes use of a TOC to contain function 	 * pointers.  The function (ret_from_except) is actually a pointer	 * to the TOC entry.  The first entry is a pointer to the actual	 * function. 	 */	kregs->nip = *((unsigned long *)ret_from_fork);	return 0;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/6dc2f0c7df6cefda5932ac8bcd9ca5ef45de36ee/process.c/clean/arch/ppc64/kernel/process.c