Subversion Repositories HelenOS-historic

Compare Revisions

Ignore whitespace Rev 74 → Rev 75

/SPARTAN/trunk/include/cpu.h
66,6 → 66,8
__u32 delay_loop_const;
 
cpu_arch_t arch;
 
thread_t *fpu_owner;
__u8 *stack;
};
/SPARTAN/trunk/src/Makefile.config
1,6 → 1,6
ARCH=ia32
#ARCH=ia32
#ARCH=mips
#ARCH=ia64
ARCH=ia64
#ARCH=powerpc
#ARCH=amd64
 
/SPARTAN/trunk/src/proc/scheduler.c
269,7 → 269,7
spinlock_unlock(&threads_lock);
 
spinlock_lock(&THREAD->cpu->lock);
if(THREAD->cpu->arch.fpu_owner==THREAD) THREAD->cpu->arch.fpu_owner=NULL;
if(THREAD->cpu->fpu_owner==THREAD) THREAD->cpu->fpu_owner=NULL;
spinlock_unlock(&THREAD->cpu->lock);
 
/SPARTAN/trunk/arch/ia32/include/cpu.h
47,7 → 47,6
int model;
int stepping;
struct tss *tss;
thread_t *fpu_owner;
};
 
 
/SPARTAN/trunk/arch/ia32/src/fpu_context.c
40,8 → 40,8
 
void fpu_context_restore(fpu_context_t *fctx)
{
if(THREAD==CPU->arch.fpu_owner) {reset_TS_flag(); }
else {set_TS_flag(); ((CPU->arch).fpu_owner)->fpu_context_engaged=1;}
if(THREAD==CPU->fpu_owner) {reset_TS_flag(); }
else {set_TS_flag(); (CPU->fpu_owner)->fpu_context_engaged=1;}
}
 
 
/SPARTAN/trunk/arch/ia32/src/cpu/cpu.c
92,7 → 92,7
void cpu_arch_init(void)
{
CPU->arch.tss = tss_p;
CPU->arch.fpu_owner=NULL;
CPU->fpu_owner=NULL;
}
 
 
/SPARTAN/trunk/arch/ia32/src/interrupt.c
88,16 → 88,16
void nm_fault(__u8 n, __u32 stack[])
{
 
if (((CPU->arch).fpu_owner)!=NULL)
if ((CPU->fpu_owner)!=NULL)
{
fpu_lazy_context_save(&(((CPU->arch).fpu_owner)->saved_fpu_context));
((CPU->arch).fpu_owner)->fpu_context_engaged=0; /* Enables migration */
fpu_lazy_context_save(&((CPU->fpu_owner)->saved_fpu_context));
(CPU->fpu_owner)->fpu_context_engaged=0; /* Enables migration */
}
if(THREAD->fpu_context_exists) fpu_lazy_context_restore(&(THREAD->saved_fpu_context));
else {fpu_init();THREAD->fpu_context_exists=1;}
 
(CPU->arch).fpu_owner=THREAD;
CPU->fpu_owner=THREAD;
 
reset_TS_flag();