Ignore:
File:
1 edited

Legend:

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

    rcde999a r48bcf49  
    137137#include <mm/slab.h>
    138138
     139/** Find call_t * in call table according to callid.
     140 *
     141 * @todo Some speedup (hash table?)
     142 *
     143 * @param callid Userspace hash of the call. Currently it is the call structure
     144 *               kernel address.
     145 *
     146 * @return NULL on not found, otherwise pointer to the call structure.
     147 *
     148 */
     149call_t *get_call(sysarg_t callid)
     150{
     151        call_t *result = NULL;
     152       
     153        irq_spinlock_lock(&TASK->answerbox.lock, true);
     154       
     155        list_foreach(TASK->answerbox.dispatched_calls, ab_link, call_t, call) {
     156                if ((sysarg_t) call == callid) {
     157                        result = call;
     158                        break;
     159                }
     160        }
     161       
     162        irq_spinlock_unlock(&TASK->answerbox.lock, true);
     163        return result;
     164}
     165
    139166static bool phone_reclaim(kobject_t *kobj)
    140167{
     
    153180{
    154181        phone_t *phone = (phone_t *) arg;
    155         slab_free(phone_cache, phone);
     182        slab_free(phone_slab, phone);
    156183}
    157184
     
    166193 * @param task  Task for which to allocate a new phone.
    167194 *
    168  * @param[out] out_handle  New phone capability handle.
    169  *
    170  * @return  An error code if a new capability cannot be allocated.
    171  */
    172 int phone_alloc(task_t *task, cap_handle_t *out_handle)
    173 {
    174         cap_handle_t handle;
    175         int rc = cap_alloc(task, &handle);
    176         if (rc == EOK) {
    177                 phone_t *phone = slab_alloc(phone_cache, FRAME_ATOMIC);
     195 * @return  New phone capability handle.
     196 * @return  Negative error code if a new capability cannot be allocated.
     197 */
     198cap_handle_t phone_alloc(task_t *task)
     199{
     200        cap_handle_t handle = cap_alloc(task);
     201        if (handle >= 0) {
     202                phone_t *phone = slab_alloc(phone_slab, FRAME_ATOMIC);
    178203                if (!phone) {
    179204                        cap_free(TASK, handle);
     
    183208                if (!kobject) {
    184209                        cap_free(TASK, handle);
    185                         slab_free(phone_cache, phone);
     210                        slab_free(phone_slab, phone);
    186211                        return ENOMEM;
    187212                }
     
    195220               
    196221                cap_publish(task, handle, kobject);
    197 
    198                 *out_handle = handle;
    199222        }
    200         return rc;
     223       
     224        return handle;
    201225}
    202226
Note: See TracChangeset for help on using the changeset viewer.