Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/generic/src/proc/scheduler.c

    rba9a150 raae365bc  
    134134void scheduler_fpu_lazy_request(void)
    135135{
     136restart:
    136137        fpu_enable();
    137138        irq_spinlock_lock(&CPU->lock, false);
     
    152153                fpu_context_restore(THREAD->saved_fpu_context);
    153154        } else {
     155                /* Allocate FPU context */
     156                if (!THREAD->saved_fpu_context) {
     157                        /* Might sleep */
     158                        irq_spinlock_unlock(&THREAD->lock, false);
     159                        irq_spinlock_unlock(&CPU->lock, false);
     160                        THREAD->saved_fpu_context =
     161                            (fpu_context_t *) slab_alloc(fpu_context_cache, 0);
     162
     163                        /* We may have switched CPUs during slab_alloc */
     164                        goto restart;
     165                }
    154166                fpu_init();
    155167                THREAD->fpu_context_exists = true;
Note: See TracChangeset for help on using the changeset viewer.