Changeset ce732e74 in mainline for kernel/generic/src/cap/cap.c


Ignore:
Timestamp:
2017-10-12T17:59:31Z (7 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
d51838f
Parents:
d29ae35
Message:

Allocate capabilities from a dedicated slab cache

File:
1 edited

Legend:

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

    rd29ae35 rce732e74  
    8383#define MAX_CAPS        INT_MAX
    8484
     85static slab_cache_t *cap_slab;
     86
    8587static kobject_t *cap_unpublish_locked(task_t *, cap_handle_t, kobject_type_t);
    8688
     
    109111        .key_equal = caps_key_equal
    110112};
     113
     114void caps_init(void)
     115{
     116        cap_slab = slab_cache_create("cap_t", sizeof(cap_t), 0, NULL,
     117            NULL, 0);
     118}
    111119
    112120/** Allocate the capability info structure
     
    267275         */
    268276        if (!cap) {
    269                 cap = malloc(sizeof(cap_t), 0);
     277                cap = slab_alloc(cap_slab, FRAME_ATOMIC);
    270278                if (!cap) {
    271279                        mutex_unlock(&task->cap_info->lock);
     
    274282                uintptr_t hbase;
    275283                if (!ra_alloc(task->cap_info->handles, 1, 1, &hbase)) {
    276                         free(cap);
     284                        slab_free(cap_slab, cap);
    277285                        mutex_unlock(&task->cap_info->lock);
    278286                        return ENOMEM;
     
    370378        hash_table_remove_item(&task->cap_info->caps, &cap->caps_link);
    371379        ra_free(task->cap_info->handles, handle, 1);
    372         free(cap);
     380        slab_free(cap_slab, cap);
    373381        mutex_unlock(&task->cap_info->lock);
    374382}
Note: See TracChangeset for help on using the changeset viewer.