Re: Re: used_math not cleared for new processes?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


[Index of Archives]     [Linux MIPS Home]     [LKML Archive]     [Linux ARM Kernel]     [Linux ARM]     [Linux]     [Git]     [Yosemite News]     [Linux SCSI]     [Linux Hams]

  Powered by Linux