Subversion Repositories HelenOS-historic

Compare Revisions

Ignore whitespace Rev 1460 → Rev 1461

/kernel/trunk/generic/include/ipc/ipc.h
131,11 → 131,10
/** Get as_area over IPC
* - ARG1 - Where the area will be mapped
* - ARG2 - Expected size of area
* - ARG3 - Requested rights for the area
* - ARG3 - User defined argument
* on answer - the server sets ARG1 as src as address of the as_area
* to be shared
*
*
* to be shared, ARG2 is set to rights that will be used for sharing,
* which is returned as part of answer back to the receiver
*/
#define IPC_M_AS_AREA_RECV 6
 
/kernel/trunk/generic/src/mm/as.c
516,7 → 516,7
src_backend = src_area->backend;
src_backend_data = src_area->backend_data;
if (src_size != acc_size) {
if (src_size != acc_size || (src_flags & dst_flags_mask) != dst_flags_mask) {
mutex_unlock(&src_area->lock);
mutex_unlock(&src_as->lock);
interrupts_restore(ipl);
554,7 → 554,7
* The flags of the source area are masked against dst_flags_mask
* to support sharing in less privileged mode.
*/
dst_area = as_area_create(dst_as, src_flags & dst_flags_mask, src_size, dst_base,
dst_area = as_area_create(dst_as, dst_flags_mask, src_size, dst_base,
AS_AREA_ATTR_PARTIAL, src_backend, &src_backend_data);
if (!dst_area) {
/*
/kernel/trunk/generic/src/ipc/sysipc.c
136,6 → 136,7
} else if (IPC_GET_METHOD(*olddata) == IPC_M_AS_AREA_SEND) {
if (!IPC_GET_RETVAL(answer->data)) { /* Accepted, handle as_area receipt */
ipl_t ipl;
int rc;
as_t *as;
ipl = interrupts_disable();
144,8 → 145,10
spinlock_unlock(&answer->sender->lock);
interrupts_restore(ipl);
return as_area_share(as, IPC_GET_ARG1(*olddata), IPC_GET_ARG2(*olddata),
AS, IPC_GET_ARG1(answer->data), IPC_GET_ARG3(*olddata));
rc = as_area_share(as, IPC_GET_ARG1(*olddata), IPC_GET_ARG2(*olddata),
AS, IPC_GET_ARG1(answer->data), IPC_GET_ARG3(*olddata));
IPC_SET_RETVAL(answer->data, rc);
return rc;
}
} else if (IPC_GET_METHOD(*olddata) == IPC_M_AS_AREA_RECV) {
if (!IPC_GET_RETVAL(answer->data)) {
160,7 → 163,7
interrupts_restore(ipl);
rc = as_area_share(AS, IPC_GET_ARG1(answer->data), IPC_GET_ARG2(*olddata),
as, IPC_GET_ARG1(*olddata), IPC_GET_ARG3(*olddata));
as, IPC_GET_ARG1(*olddata), IPC_GET_ARG2(answer->data));
IPC_SET_RETVAL(answer->data, rc);
}
}