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

Changeset e68765e in mainline


Ignore:
Timestamp:
2017-08-20T16:58:10Z (3 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
master
Children:
88db88d
Parents:
3f74275
Message:

Store capability's handle inside of it

Location:
kernel/generic
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • kernel/generic/include/cap/cap.h

    r3f74275 re68765e  
    5959typedef struct cap {
    6060        cap_type_t type;
     61        int handle;
     62
    6163        bool (* can_reclaim)(struct cap *);
    6264
     
    7476void caps_task_init(struct task *);
    7577
    76 extern void cap_initialize(cap_t *);
     78extern void cap_initialize(cap_t *, int);
    7779extern cap_t *cap_get(struct task *, int, cap_type_t);
    7880extern cap_t *cap_get_current(int, cap_type_t);
     
    8082extern void cap_free(struct task *, int);
    8183
    82 extern int cap_get_handle(struct task *, cap_t *);
    83 
    8484#endif
    8585
  • kernel/generic/src/cap/cap.c

    r3f74275 re68765e  
    3939#include <mm/slab.h>
    4040
    41 void cap_initialize(cap_t *cap)
     41void cap_initialize(cap_t *cap, int handle)
    4242{
    4343        cap->type = CAP_TYPE_INVALID;
     44        cap->handle = handle;
    4445        cap->can_reclaim = NULL;
    4546}
     
    5354{
    5455        for (int i = 0; i < MAX_CAPS; i++)
    55                 cap_initialize(&task->caps[i]);
     56                cap_initialize(&task->caps[i], i);
    5657}
    5758
     
    8485                if (cap->type > CAP_TYPE_ALLOCATED) {
    8586                        if (cap->can_reclaim && cap->can_reclaim(cap))
    86                                 cap_initialize(cap);
     87                                cap_initialize(cap, handle);
    8788                }
    8889                if (cap->type == CAP_TYPE_INVALID) {
     
    104105
    105106        irq_spinlock_lock(&task->lock, true);
    106         cap_initialize(&task->caps[handle]);
     107        cap_initialize(&task->caps[handle], handle);
    107108        irq_spinlock_unlock(&task->lock, true);
    108 }
    109 
    110 int cap_get_handle(task_t *task, cap_t *cap)
    111 {
    112         return cap - task->caps;
    113109}
    114110
  • kernel/generic/src/ipc/ipc.c

    r3f74275 re68765e  
    913913        for_each_cap(task, cap, CAP_TYPE_PHONE) {
    914914                phone_t *phone = &cap->phone;
    915                 int cap_handle = cap_get_handle(task, cap);
    916915       
    917916                if (SYNCH_FAILED(mutex_trylock(&phone->lock))) {
    918                         printf("%-11d (mutex busy)\n", cap_handle);
     917                        printf("%-11d (mutex busy)\n", cap->handle);
    919918                        continue;
    920919                }
    921920               
    922921                if (phone->state != IPC_PHONE_FREE) {
    923                         printf("%-11d %7" PRIun " ", cap_handle,
     922                        printf("%-11d %7" PRIun " ", cap->handle,
    924923                            atomic_get(&phone->active_calls));
    925924                       
  • kernel/generic/src/proc/task.c

    r3f74275 re68765e  
    627627                        phone_t *phone = &cap->phone;
    628628                        if (phone->callee)
    629                                 printf(" %d:%p", cap_get_handle(task, cap),
    630                                     phone->callee);
     629                                printf(" %d:%p", cap->handle, phone->callee);
    631630                }
    632631                printf("\n");
Note: See TracChangeset for help on using the changeset viewer.