Changeset 46fc2f9 in mainline for generic/src/ipc/sysipc.c


Ignore:
Timestamp:
2006-05-27T22:57:21Z (19 years ago)
Author:
Ondrej Palkovsky <ondrap@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
6212095
Parents:
00b595b
Message:

Added 256K slab, so that AMD can boot (until ELF loader is fixed).
Added AS_AREA_RECV so that the caller can receive AS_AREA.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • generic/src/ipc/sysipc.c

    r00b595b r46fc2f9  
    6565static inline int is_forwardable(__native method)
    6666{
    67         if (method == IPC_M_PHONE_HUNGUP || method == IPC_M_AS_AREA_SEND)
     67        if (method == IPC_M_PHONE_HUNGUP || method == IPC_M_AS_AREA_SEND \
     68            || method == IPC_M_AS_AREA_RECV)
    6869                return 0; /* This message is meant only for the receiver */
    6970        return 1;
     
    8687        if (IPC_GET_METHOD(call->data) == IPC_M_AS_AREA_SEND)
    8788                return 1;
    88         return 0;
    89 }
    90 
    91 /** Interpret process answer as control information */
     89        if (IPC_GET_METHOD(call->data) == IPC_M_AS_AREA_RECV)
     90                return 1;
     91        return 0;
     92}
     93
     94/** Interpret process answer as control information
     95 *
     96 * This function is called directly after sys_ipc_answer
     97 */
    9298static inline int answer_preprocess(call_t *answer, ipc_data_t *olddata)
    9399{
     
    140146                       
    141147                        return as_area_share(as, IPC_GET_ARG1(*olddata), IPC_GET_ARG2(*olddata),
    142                                 IPC_GET_ARG1(answer->data), IPC_GET_ARG3(*olddata));
     148                                             AS, IPC_GET_ARG1(answer->data), IPC_GET_ARG3(*olddata));
     149                }
     150        } else if (IPC_GET_METHOD(*olddata) == IPC_M_AS_AREA_RECV) {
     151                if (!IPC_GET_RETVAL(answer->data)) {
     152                        ipl_t ipl;
     153                        as_t *as;
     154                       
     155                        ipl = interrupts_disable();
     156                        spinlock_lock(&answer->sender->lock);
     157                        as = answer->sender->as;
     158                        spinlock_unlock(&answer->sender->lock);
     159                        interrupts_restore(ipl);
     160                       
     161                        return as_area_share(AS, IPC_GET_ARG1(answer->data), IPC_GET_ARG2(*olddata),
     162                                             as, IPC_GET_ARG1(*olddata), IPC_GET_ARG3(*olddata));
    143163                }
    144164        }
Note: See TracChangeset for help on using the changeset viewer.