291,8 → 291,6 |
* |
* @param id Task ID of the accepting task. |
* @param base Base address of the source address space area. |
* @param size Size of the source address space area. |
* @param flags Flags of the source address space area. |
* |
* @return 0 on success or ENOENT if there is no such task or |
* if there is no such address space area, |
300,7 → 298,7 |
* ENOMEM if there was a problem in allocating destination |
* address space area. |
*/ |
int as_area_send(task_id_t id, __address base, size_t size, int flags) |
int as_area_send(task_id_t id, __address base) |
{ |
ipl_t ipl; |
task_t *t; |
307,6 → 305,9 |
count_t i; |
as_t *as; |
__address dst_base; |
int flags; |
size_t size; |
as_area_t *area; |
|
ipl = interrupts_disable(); |
spinlock_lock(&tasks_lock); |
333,6 → 334,22 |
interrupts_restore(ipl); |
return EPERM; |
} |
|
spinlock_lock(&AS->lock); |
area = find_area_and_lock(AS, base); |
if (!area) { |
/* |
* Could not find the source address space area. |
*/ |
spinlock_unlock(&t->lock); |
spinlock_unlock(&AS->lock); |
interrupts_restore(ipl); |
return ENOENT; |
} |
size = area->pages * PAGE_SIZE; |
flags = area->flags; |
spinlock_unlock(&area->lock); |
spinlock_unlock(&AS->lock); |
|
if ((t->accept_arg.task_id != TASK->taskid) || (t->accept_arg.size != size) || |
(t->accept_arg.flags != flags)) { |
879,5 → 896,5 |
return (__native) EPERM; |
} |
|
return (__native) as_area_send(arg.task_id, (__address) arg.base, arg.size, arg.flags); |
return (__native) as_area_send(arg.task_id, (__address) arg.base); |
} |