Rev 2619 | Rev 2622 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 2619 | Rev 2620 | ||
---|---|---|---|
Line 318... | Line 318... | ||
318 | IPC_SET_METHOD(call->u.msg.data, method); |
318 | IPC_SET_METHOD(call->u.msg.data, method); |
319 | IPC_SET_ARG1(call->u.msg.data, arg1); |
319 | IPC_SET_ARG1(call->u.msg.data, arg1); |
320 | IPC_SET_ARG2(call->u.msg.data, arg2); |
320 | IPC_SET_ARG2(call->u.msg.data, arg2); |
321 | IPC_SET_ARG3(call->u.msg.data, arg3); |
321 | IPC_SET_ARG3(call->u.msg.data, arg3); |
322 | IPC_SET_ARG4(call->u.msg.data, arg4); |
322 | IPC_SET_ARG4(call->u.msg.data, arg4); |
- | 323 | /* |
|
- | 324 | * To achieve deterministic behavior, we always zero out the |
|
- | 325 | * arguments that are beyond the limits of the fast version. |
|
- | 326 | */ |
|
- | 327 | IPC_SET_ARG5(call->u.msg.data, 0); |
|
323 | } |
328 | } |
324 | ipc_finish_async(callid, phoneid, call, can_preempt); |
329 | ipc_finish_async(callid, phoneid, call, can_preempt); |
325 | } |
330 | } |
326 | 331 | ||
327 | /** Make an asynchronous call transmitting the entire payload. |
332 | /** Make an asynchronous call transmitting the entire payload. |
Line 433... | Line 438... | ||
433 | * ipc_call_async_*(), until it is added to dispatched_calls. |
438 | * ipc_call_async_*(), until it is added to dispatched_calls. |
434 | */ |
439 | */ |
435 | futex_down(&async_futex); |
440 | futex_down(&async_futex); |
436 | while (!list_empty(&queued_calls)) { |
441 | while (!list_empty(&queued_calls)) { |
437 | call = list_get_instance(queued_calls.next, async_call_t, list); |
442 | call = list_get_instance(queued_calls.next, async_call_t, list); |
438 | callid = _ipc_call_async(call->u.msg.phoneid, &call->u.msg.data); |
443 | callid = _ipc_call_async(call->u.msg.phoneid, |
- | 444 | &call->u.msg.data); |
|
439 | if (callid == IPC_CALLRET_TEMPORARY) { |
445 | if (callid == IPC_CALLRET_TEMPORARY) { |
440 | break; |
446 | break; |
441 | } |
447 | } |
442 | list_remove(&call->list); |
448 | list_remove(&call->list); |
443 | 449 | ||
Line 643... | Line 649... | ||
643 | * |
649 | * |
644 | * @return Zero on success or an error code. |
650 | * @return Zero on success or an error code. |
645 | * |
651 | * |
646 | * For non-system methods, the old method and arg1 are rewritten by the new |
652 | * For non-system methods, the old method and arg1 are rewritten by the new |
647 | * values. For system methods, the new method and arg1 are written to the old |
653 | * values. For system methods, the new method and arg1 are written to the old |
648 | * arg1 and arg2, respectivelly. |
654 | * arg1 and arg2, respectivelly. Calls with immutable methods are forwarded |
- | 655 | * verbatim. |
|
649 | */ |
656 | */ |
650 | int ipc_forward_fast(ipc_callid_t callid, int phoneid, int method, ipcarg_t arg1) |
657 | int ipc_forward_fast(ipc_callid_t callid, int phoneid, int method, |
- | 658 | ipcarg_t arg1) |
|
651 | { |
659 | { |
652 | return __SYSCALL4(SYS_IPC_FORWARD_FAST, callid, phoneid, method, arg1); |
660 | return __SYSCALL4(SYS_IPC_FORWARD_FAST, callid, phoneid, method, arg1); |
653 | } |
661 | } |
654 | 662 | ||
655 | /** Wrapper for making IPC_M_DATA_SEND calls. |
663 | /** Wrapper for making IPC_M_DATA_SEND calls. |