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
|