Changeset 05ffb41 in mainline for kernel/generic/src/kobject/kobject.c


Ignore:
Timestamp:
2017-08-17T19:11:14Z (7 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
1c85bae
Parents:
7e3826d9
Message:

Turn IPC phones into kobjects

File:
1 edited

Legend:

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

    r7e3826d9 r05ffb41  
    3737#include <synch/spinlock.h>
    3838
    39 kobject_t *kobject_get_local(int cap, kobject_type_t type)
     39void kobject_init(kobject_t *kobj)
     40{
     41        kobj->type = KOBJECT_TYPE_INVALID;
     42        kobj->can_reclaim = NULL;
     43}
     44
     45kobject_t *kobject_get(task_t *task, int cap, kobject_type_t type)
    4046{
    4147        if ((cap < 0) || (cap >= MAX_KERNEL_OBJECTS))
    4248                return NULL;
    43         if (TASK->kobject[cap].type != type)
     49        if (task->kobject[cap].type != type)
    4450                return NULL;
    45         return &TASK->kobject[cap];
     51        return &task->kobject[cap];
     52}
     53
     54kobject_t *kobject_get_current(int cap, kobject_type_t type)
     55{
     56        return kobject_get(TASK, cap, type);
    4657}
    4758
     
    5263        irq_spinlock_lock(&task->lock, true);
    5364        for (cap = 0; cap < MAX_KERNEL_OBJECTS; cap++) {
    54                 if (task->kobject[cap].type == KOBJECT_TYPE_INVALID) {
    55                         task->kobject[cap].type = KOBJECT_TYPE_ALLOCATED;
     65                kobject_t *kobj = &task->kobject[cap];
     66                if (kobj->type > KOBJECT_TYPE_ALLOCATED) {
     67                        if (kobj->can_reclaim && kobj->can_reclaim(kobj))
     68                                kobject_init(kobj);
     69                }
     70                if (kobj->type == KOBJECT_TYPE_INVALID) {
     71                        kobj->type = KOBJECT_TYPE_ALLOCATED;
    5672                        irq_spinlock_unlock(&task->lock, true);
    5773                        return cap;
     
    7086
    7187        irq_spinlock_lock(&task->lock, true);
    72         task->kobject[cap].type = KOBJECT_TYPE_INVALID;
     88        kobject_init(&task->kobject[cap]);
    7389        irq_spinlock_unlock(&task->lock, true);
    7490}
Note: See TracChangeset for help on using the changeset viewer.