71,9 → 71,9 |
#else |
fpu_enable(); |
if (THREAD->fpu_context_exists) |
fpu_context_restore(&(THREAD->saved_fpu_context)); |
fpu_context_restore(THREAD->saved_fpu_context); |
else { |
fpu_init(&(THREAD->saved_fpu_context)); |
fpu_init(); |
THREAD->fpu_context_exists=1; |
} |
#endif |
102,7 → 102,7 |
/* Save old context */ |
if (CPU->fpu_owner != NULL) { |
spinlock_lock(&CPU->fpu_owner->lock); |
fpu_context_save(&CPU->fpu_owner->saved_fpu_context); |
fpu_context_save(CPU->fpu_owner->saved_fpu_context); |
/* don't prevent migration */ |
CPU->fpu_owner->fpu_context_engaged=0; |
spinlock_unlock(&CPU->fpu_owner->lock); |
110,9 → 110,17 |
|
spinlock_lock(&THREAD->lock); |
if (THREAD->fpu_context_exists) { |
fpu_context_restore(&THREAD->saved_fpu_context); |
fpu_context_restore(THREAD->saved_fpu_context); |
} else { |
fpu_init(&(THREAD->saved_fpu_context)); |
/* Allocate FPU context */ |
if (!THREAD->saved_fpu_context) { |
/* Might sleep */ |
spinlock_unlock(&THREAD->lock); |
THREAD->saved_fpu_context = slab_alloc(fpu_context_slab, |
0); |
spinlock_lock(&THREAD->lock); |
} |
fpu_init(); |
THREAD->fpu_context_exists=1; |
} |
CPU->fpu_owner=THREAD; |
275,7 → 283,7 |
if (THREAD) { |
spinlock_lock(&THREAD->lock); |
#ifndef CONFIG_FPU_LAZY |
fpu_context_save(&(THREAD->saved_fpu_context)); |
fpu_context_save(THREAD->saved_fpu_context); |
#endif |
if (!context_save(&THREAD->saved_context)) { |
/* |