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

Changeset abf6c01 in mainline


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

Add FRAME_ATOMIC to some allocations

Location:
kernel
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • kernel/generic/src/ipc/ipc.c

    rba9a150 rabf6c01  
    213213errno_t ipc_call_sync(phone_t *phone, call_t *request)
    214214{
    215         answerbox_t *mybox = slab_alloc(answerbox_cache, 0);
     215        answerbox_t *mybox = slab_alloc(answerbox_cache, FRAME_ATOMIC);
     216        if (!mybox)
     217                return ENOMEM;
     218
    216219        ipc_answerbox_init(mybox, TASK);
    217220
  • kernel/generic/src/main/kinit.c

    rba9a150 rabf6c01  
    120120                thread = thread_create(kmp, NULL, TASK,
    121121                    THREAD_FLAG_UNCOUNTED, "kmp");
    122                 if (thread != NULL) {
    123                         thread_wire(thread, &cpus[0]);
    124                         thread_ready(thread);
    125                 } else
     122                if (!thread)
    126123                        panic("Unable to create kmp thread.");
    127124
     125                thread_wire(thread, &cpus[0]);
     126                thread_ready(thread);
    128127                thread_join(thread);
    129128                thread_detach(thread);
  • kernel/generic/src/mm/as.c

    rba9a150 rabf6c01  
    151151as_t *as_create(unsigned int flags)
    152152{
    153         as_t *as = (as_t *) slab_alloc(as_cache, 0);
     153        as_t *as = (as_t *) slab_alloc(as_cache, FRAME_ATOMIC);
     154        if (!as)
     155                return NULL;
     156
    154157        (void) as_create_arch(as, 0);
    155158
  • kernel/generic/src/mm/slab.c

    rba9a150 rabf6c01  
    667667    size_t (*destructor)(void *obj), unsigned int flags)
    668668{
    669         slab_cache_t *cache = slab_alloc(&slab_cache_cache, 0);
     669        slab_cache_t *cache = slab_alloc(&slab_cache_cache, FRAME_ATOMIC);
     670        if (!cache)
     671                panic("Not enough memory to allocate slab cache %s.", name);
     672
    670673        _slab_cache_create(cache, name, size, align, constructor, destructor,
    671674            flags);
     
    730733NO_TRACE static void _slab_free(slab_cache_t *cache, void *obj, slab_t *slab)
    731734{
     735        if (!obj)
     736                return;
     737
    732738        ipl_t ipl = interrupts_disable();
    733739
  • kernel/generic/src/proc/task.c

    rba9a150 rabf6c01  
    199199task_t *task_create(as_t *as, const char *name)
    200200{
    201         task_t *task = (task_t *) slab_alloc(task_cache, 0);
    202         if (task == NULL) {
     201        task_t *task = (task_t *) slab_alloc(task_cache, FRAME_ATOMIC);
     202        if (!task)
    203203                return NULL;
    204         }
    205204
    206205        task_create_arch(task);
  • kernel/generic/src/proc/thread.c

    rba9a150 rabf6c01  
    165165
    166166#ifdef CONFIG_FPU
    167         thread->saved_fpu_context = slab_alloc(fpu_context_cache, kmflags);
     167        thread->saved_fpu_context = slab_alloc(fpu_context_cache,
     168            FRAME_ATOMIC | kmflags);
    168169        if (!thread->saved_fpu_context)
    169170                return ENOMEM;
     
    338339    thread_flags_t flags, const char *name)
    339340{
    340         thread_t *thread = (thread_t *) slab_alloc(thread_cache, 0);
     341        thread_t *thread = (thread_t *) slab_alloc(thread_cache, FRAME_ATOMIC);
    341342        if (!thread)
    342343                return NULL;
     
    652653
    653654        return waitq_sleep_timeout(&thread->join_wq, usec, flags, NULL);
     655
     656        // FIXME: join should deallocate the thread.
     657        //        Current code calls detach after join, that's contrary to how
     658        //        join is used in other threading APIs.
    654659}
    655660
  • kernel/generic/src/sysinfo/sysinfo.c

    rba9a150 rabf6c01  
    204204
    205205                *psubtree =
    206                     (sysinfo_item_t *) slab_alloc(sysinfo_item_cache, 0);
     206                    (sysinfo_item_t *) slab_alloc(sysinfo_item_cache, FRAME_ATOMIC);
    207207                if (!*psubtree)
    208208                        return NULL;
     
    280280
    281281                        sysinfo_item_t *item =
    282                             (sysinfo_item_t *) slab_alloc(sysinfo_item_cache, 0);
     282                            (sysinfo_item_t *) slab_alloc(sysinfo_item_cache, FRAME_ATOMIC);
    283283                        if (!item)
    284284                                return NULL;
  • kernel/test/mm/slab1.c

    rba9a150 rabf6c01  
    5050
    5151        for (i = 0; i < count; i++) {
    52                 data[i] = slab_alloc(cache, 0);
    53                 memsetb(data[i], size, 0);
     52                data[i] = slab_alloc(cache, FRAME_ATOMIC);
     53                if (data[i])
     54                        memsetb(data[i], size, 0);
    5455        }
    5556
     
    6667
    6768        for (i = 0; i < count; i++) {
    68                 data[i] = slab_alloc(cache, 0);
    69                 memsetb(data[i], size, 0);
     69                data[i] = slab_alloc(cache, FRAME_ATOMIC);
     70                if (data[i])
     71                        memsetb(data[i], size, 0);
    7072        }
    7173
     
    8284
    8385        for (i = count / 2; i < count; i++) {
    84                 data[i] = slab_alloc(cache, 0);
    85                 memsetb(data[i], size, 0);
     86                data[i] = slab_alloc(cache, FRAME_ATOMIC);
     87                if (data[i])
     88                        memsetb(data[i], size, 0);
    8689        }
    8790
     
    131134        for (j = 0; j < 10; j++) {
    132135                for (i = 0; i < THR_MEM_COUNT; i++)
    133                         thr_data[offs][i] = slab_alloc(thr_cache, 0);
     136                        thr_data[offs][i] = slab_alloc(thr_cache, FRAME_ATOMIC);
    134137                for (i = 0; i < THR_MEM_COUNT / 2; i++)
    135138                        slab_free(thr_cache, thr_data[offs][i]);
    136139                for (i = 0; i < THR_MEM_COUNT / 2; i++)
    137                         thr_data[offs][i] = slab_alloc(thr_cache, 0);
     140                        thr_data[offs][i] = slab_alloc(thr_cache, FRAME_ATOMIC);
    138141                for (i = 0; i < THR_MEM_COUNT; i++)
    139142                        slab_free(thr_cache, thr_data[offs][i]);
Note: See TracChangeset for help on using the changeset viewer.