David S. Miller wrote:

On Wed, 19 Jan 2005 20:48:37 +0100
Krzysztof Helt <[EMAIL PROTECTED]> wrote:



How should it be done? Should copy_flags() during do_fork() preserve FPU context/registers for child task? Should SMP and UP context switching be handled differently?



copy_thread(), via do_fork(), copies the FPU state in this code here:

#ifndef CONFIG_SMP
        if(last_task_used_math == current) {
#else
        if(current_thread_info()->flags & _TIF_USEDFPU) {
#endif
                put_psr(get_psr() | PSR_EF);
                fpsave(&p->thread.float_regs[0], &p->thread.fsr,
                       &p->thread.fpqueue[0], &p->thread.fpqdepth);
#ifdef CONFIG_SMP
                current_thread_info()->flags &= ~_TIF_USEDFPU;
#endif
        }



It is not enough or I do not understand something. The new thread will have a _TIF_USEDFPU flag disabled (if not cleared here, it is cleared in copy_flags() in the do_fork()). So, a FP disabled trap handler will initialize FPU state from default values, not from the ones saved here. BTW, the new thread is p or current in the copy_thread function? I suppose it is current.

Krzysztof

-
To unsubscribe from this list: send the line "unsubscribe sparclinux" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to