Fork us on GitHub Follow us on Facebook Follow us on Twitter

Changeset ba9a150 in mainline


Ignore:
Timestamp:
2018-11-09T22:03:24Z (3 years ago)
Author:
Jiří Zárevúcky <zarevucky.jiri@…>
Branches:
lfn, master
Children:
abf6c01
Parents:
4f3aa76
git-author:
Jiří Zárevúcky <zarevucky.jiri@…> (2018-11-08 17:08:07)
git-committer:
Jiří Zárevúcky <zarevucky.jiri@…> (2018-11-09 22:03:24)
Message:

Always allocate FPU context ahead of time, even when switching is lazy

Location:
kernel/generic/src/proc
Files:
2 edited

Legend:

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

    r4f3aa76 rba9a150  
    134134void scheduler_fpu_lazy_request(void)
    135135{
    136 restart:
    137136        fpu_enable();
    138137        irq_spinlock_lock(&CPU->lock, false);
     
    153152                fpu_context_restore(THREAD->saved_fpu_context);
    154153        } 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                 }
    166154                fpu_init();
    167155                THREAD->fpu_context_exists = true;
  • kernel/generic/src/proc/thread.c

    r4f3aa76 rba9a150  
    165165
    166166#ifdef CONFIG_FPU
    167 #ifdef CONFIG_FPU_LAZY
    168         thread->saved_fpu_context = NULL;
    169 #else /* CONFIG_FPU_LAZY */
    170167        thread->saved_fpu_context = slab_alloc(fpu_context_cache, kmflags);
    171168        if (!thread->saved_fpu_context)
    172169                return ENOMEM;
    173 #endif /* CONFIG_FPU_LAZY */
    174170#endif /* CONFIG_FPU */
    175171
     
    200196        if (!stack_phys) {
    201197#ifdef CONFIG_FPU
    202                 if (thread->saved_fpu_context)
    203                         slab_free(fpu_context_cache, thread->saved_fpu_context);
     198                assert(thread->saved_fpu_context);
     199                slab_free(fpu_context_cache, thread->saved_fpu_context);
    204200#endif
    205201                return ENOMEM;
     
    226222
    227223#ifdef CONFIG_FPU
    228         if (thread->saved_fpu_context)
    229                 slab_free(fpu_context_cache, thread->saved_fpu_context);
     224        assert(thread->saved_fpu_context);
     225        slab_free(fpu_context_cache, thread->saved_fpu_context);
    230226#endif
    231227
Note: See TracChangeset for help on using the changeset viewer.