Subversion Repositories HelenOS-historic

Compare Revisions

Ignore whitespace Rev 1426 → Rev 1428

/kernel/trunk/generic/src/mm/slab.c
127,7 → 127,7
"malloc-16","malloc-32","malloc-64","malloc-128",
"malloc-256","malloc-512","malloc-1K","malloc-2K",
"malloc-4K","malloc-8K","malloc-16K","malloc-32K",
"malloc-64K","malloc-128K"
"malloc-64K","malloc-128K","malloc-256K"
};
 
/** Slab descriptor */
/kernel/trunk/generic/src/mm/as.c
456,6 → 456,7
* @param src_as Pointer to source address space.
* @param src_base Base address of the source address space area.
* @param acc_size Expected size of the source area.
* @param dst_as Pointer to destination address space.
* @param dst_base Target base address.
* @param dst_flags_mask Destination address space area flags mask.
*
467,7 → 468,7
* to share non-anonymous address space area is detected.
*/
int as_area_share(as_t *src_as, __address src_base, size_t acc_size,
__address dst_base, int dst_flags_mask)
as_t *dst_as, __address dst_base, int dst_flags_mask)
{
ipl_t ipl;
int src_flags;
543,7 → 544,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(AS, src_flags & dst_flags_mask, src_size, dst_base,
dst_area = as_area_create(dst_as, src_flags & 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
64,7 → 64,8
*/
static inline int is_forwardable(__native method)
{
if (method == IPC_M_PHONE_HUNGUP || method == IPC_M_AS_AREA_SEND)
if (method == IPC_M_PHONE_HUNGUP || method == IPC_M_AS_AREA_SEND \
|| method == IPC_M_AS_AREA_RECV)
return 0; /* This message is meant only for the receiver */
return 1;
}
85,10 → 86,15
return 1;
if (IPC_GET_METHOD(call->data) == IPC_M_AS_AREA_SEND)
return 1;
if (IPC_GET_METHOD(call->data) == IPC_M_AS_AREA_RECV)
return 1;
return 0;
}
 
/** Interpret process answer as control information */
/** Interpret process answer as control information
*
* This function is called directly after sys_ipc_answer
*/
static inline int answer_preprocess(call_t *answer, ipc_data_t *olddata)
{
int phoneid;
139,8 → 145,22
interrupts_restore(ipl);
return as_area_share(as, IPC_GET_ARG1(*olddata), IPC_GET_ARG2(*olddata),
IPC_GET_ARG1(answer->data), IPC_GET_ARG3(*olddata));
AS, IPC_GET_ARG1(answer->data), IPC_GET_ARG3(*olddata));
}
} else if (IPC_GET_METHOD(*olddata) == IPC_M_AS_AREA_RECV) {
if (!IPC_GET_RETVAL(answer->data)) {
ipl_t ipl;
as_t *as;
ipl = interrupts_disable();
spinlock_lock(&answer->sender->lock);
as = answer->sender->as;
spinlock_unlock(&answer->sender->lock);
interrupts_restore(ipl);
return as_area_share(AS, IPC_GET_ARG1(answer->data), IPC_GET_ARG2(*olddata),
as, IPC_GET_ARG1(*olddata), IPC_GET_ARG3(*olddata));
}
}
return 0;
}