linux-mips
[Top] [All Lists]

Re: Re: used_math not cleared for new processes?

To: Jun Sun <jsun@mvista.com>
Subject: Re: Re: used_math not cleared for new processes?
From: Zhang Fuxin <fxzhang@ict.ac.cn>
Date: Thu, 28 Feb 2002 15:10:57 +0800
Cc: "linux-mips@oss.sgi.com" <linux-mips@oss.sgi.com>
Sender: owner-linux-mips@oss.sgi.com
hi,

在 2002-02-27 14:53:00 you wrote:
>Zhang Fuxin wrote:
>
>> hi,linux-mips,
>>    I find that current->used_math isn't cleared when we start a new 
>> process.Is it
>> intended? I mean 'start_thread' in do_exec but not 'copy_thread' in do_fork 
>> when
>> speaking 'start a new process'. We can/should? keep used_math for the 
>> latter,but for
>> the former?
>> 
>
>
>I think it make sense to clear used_math in do_exec().  It also improvies the
> performance slightly by not loading the parent's FPU context when it uses the
>FPU for the first time.
>
>Do you have a patch for this?
Yes. Here it is.

--- processor.h.ori     Thu Feb 28 15:02:20 2002
+++ processor.h Thu Feb 28 15:00:10 2002
@@ -215,6 +215,7 @@
        regs->cp0_epc = new_pc;                                         \
        regs->regs[29] = new_sp;                                        \
        current->thread.current_ds = USER_DS;                           \
+       current->used_math = 0;                                         \
 } while (0)
 
 unsigned long get_wchan(struct task_struct *p);


--- traps.c.ori Thu Feb 28 15:04:48 2002
+++ traps.c     Thu Feb 28 15:05:23 2002
@@ -668,8 +668,12 @@
        if (current->used_math) {               /* Using the FPU again.  */
                lazy_fpu_switch(last_task_used_math);
        } else {                                /* First time FPU user.  */
-               if (last_task_used_math != NULL)
+               if (last_task_used_math != NULL) {
+                       int status = read_32bit_cp0_register(CP0_STATUS);
+                       write_32bit_cp0_register(CP0_STATUS,status|ST0_CU1);
+
                        save_fp(last_task_used_math);
+               }
                init_fpu();
                current->used_math = 1;
        }


>
>Jun

Regards
            Zhang Fuxin
            fxzhang@ict.ac.cn


<Prev in Thread] Current Thread [Next in Thread>