MCPcopy Create free account
hub / github.com/HelenOS/helenos / cap_alloc

Function cap_alloc

kernel/generic/src/cap/cap.c:265–287  ·  view source on GitHub ↗

Allocate new capability * * @param task Task for which to allocate the new capability. * * @param[out] handle New capability handle on success. * * @return An error code in case of error. */

Source from the content-addressed store, hash-verified

263 * @return An error code in case of error.
264 */
265errno_t cap_alloc(task_t *task, cap_handle_t *handle)
266{
267 mutex_lock(&task->cap_info->lock);
268 cap_t *cap = slab_alloc(cap_cache, FRAME_ATOMIC);
269 if (!cap) {
270 mutex_unlock(&task->cap_info->lock);
271 return ENOMEM;
272 }
273 uintptr_t hbase;
274 if (!ra_alloc(task->cap_info->handles, 1, 1, &hbase)) {
275 slab_free(cap_cache, cap);
276 mutex_unlock(&task->cap_info->lock);
277 return ENOMEM;
278 }
279 cap_initialize(cap, task, (cap_handle_t) hbase);
280 hash_table_insert(&task->cap_info->caps, &cap->caps_link);
281
282 cap->state = CAP_STATE_ALLOCATED;
283 *handle = cap->handle;
284 mutex_unlock(&task->cap_info->lock);
285
286 return EOK;
287}
288
289/** Publish allocated capability
290 *

Callers 4

sys_waitq_createFunction · 0.85
sys_ipc_wait_for_callFunction · 0.85
phone_allocFunction · 0.85
ipc_irq_subscribeFunction · 0.85

Calls 6

slab_allocFunction · 0.85
mutex_unlockFunction · 0.85
ra_allocFunction · 0.85
slab_freeFunction · 0.85
cap_initializeFunction · 0.85
hash_table_insertFunction · 0.50

Tested by

no test coverage detected