Changeset 05ffb41 in mainline for kernel/generic/src/kobject/kobject.c
- Timestamp:
- 2017-08-17T19:11:14Z (7 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 1c85bae
- Parents:
- 7e3826d9
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/src/kobject/kobject.c
r7e3826d9 r05ffb41 37 37 #include <synch/spinlock.h> 38 38 39 kobject_t *kobject_get_local(int cap, kobject_type_t type) 39 void kobject_init(kobject_t *kobj) 40 { 41 kobj->type = KOBJECT_TYPE_INVALID; 42 kobj->can_reclaim = NULL; 43 } 44 45 kobject_t *kobject_get(task_t *task, int cap, kobject_type_t type) 40 46 { 41 47 if ((cap < 0) || (cap >= MAX_KERNEL_OBJECTS)) 42 48 return NULL; 43 if ( TASK->kobject[cap].type != type)49 if (task->kobject[cap].type != type) 44 50 return NULL; 45 return &TASK->kobject[cap]; 51 return &task->kobject[cap]; 52 } 53 54 kobject_t *kobject_get_current(int cap, kobject_type_t type) 55 { 56 return kobject_get(TASK, cap, type); 46 57 } 47 58 … … 52 63 irq_spinlock_lock(&task->lock, true); 53 64 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; 56 72 irq_spinlock_unlock(&task->lock, true); 57 73 return cap; … … 70 86 71 87 irq_spinlock_lock(&task->lock, true); 72 task->kobject[cap].type = KOBJECT_TYPE_INVALID;88 kobject_init(&task->kobject[cap]); 73 89 irq_spinlock_unlock(&task->lock, true); 74 90 }
Note:
See TracChangeset
for help on using the changeset viewer.