Changeset 706b4de in mainline
- Timestamp:
- 2017-11-10T19:33:50Z (7 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- f3365b6
- Parents:
- d420b22
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
abi/include/abi/ipc/ipc.h
rd420b22 r706b4de 82 82 /* Return values from sys_ipc_call_async(). */ 83 83 #define IPC_CALLRET_FATAL -1 84 #define IPC_CALLRET_TEMPORARY -285 86 84 87 85 /* Macros for manipulating calling data */ -
kernel/generic/src/ipc/sysipc.c
rd420b22 r706b4de 359 359 * @return Call hash on success. 360 360 * @return IPC_CALLRET_FATAL in case of a fatal error. 361 * @return IPC_CALLRET_TEMPORARY if there are too many pending362 * asynchronous requests; answers should be handled first.363 361 * 364 362 */ -
uspace/app/trace/trace.c
rd420b22 r706b4de 284 284 sysarg_t phoneid; 285 285 286 if (sc_rc == (sysarg_t) IPC_CALLRET_FATAL || 287 sc_rc == (sysarg_t) IPC_CALLRET_TEMPORARY) 286 if (sc_rc == (sysarg_t) IPC_CALLRET_FATAL) 288 287 return; 289 288 … … 305 304 int rc; 306 305 307 if (sc_rc == (sysarg_t) IPC_CALLRET_FATAL || 308 sc_rc == (sysarg_t) IPC_CALLRET_TEMPORARY) 306 if (sc_rc == (sysarg_t) IPC_CALLRET_FATAL) 309 307 return; 310 308 -
uspace/lib/c/generic/ipc.c
rd420b22 r706b4de 148 148 } 149 149 150 if (callid == (ipc_callid_t) IPC_CALLRET_TEMPORARY) {151 futex_unlock(&ipc_futex);152 153 call->u.msg.phoneid = phoneid;154 155 futex_down(&async_futex);156 list_append(&call->list, &queued_calls);157 158 call->fid = fibril_get_id();159 fibril_switch(FIBRIL_TO_MANAGER);160 /* Async futex unlocked by previous call */161 162 return;163 }164 165 150 call->u.callid = callid; 166 151 … … 210 195 ipc_callid_t callid = __SYSCALL6(SYS_IPC_CALL_ASYNC_FAST, phoneid, 211 196 imethod, arg1, arg2, arg3, arg4); 212 213 if (callid == (ipc_callid_t) IPC_CALLRET_TEMPORARY) {214 if (!call) {215 call = ipc_prepare_async(private, callback);216 if (!call) {217 futex_unlock(&ipc_futex);218 return;219 }220 }221 222 IPC_SET_IMETHOD(call->u.msg.data, imethod);223 IPC_SET_ARG1(call->u.msg.data, arg1);224 IPC_SET_ARG2(call->u.msg.data, arg2);225 IPC_SET_ARG3(call->u.msg.data, arg3);226 IPC_SET_ARG4(call->u.msg.data, arg4);227 228 /*229 * To achieve deterministic behavior, we always zero out the230 * arguments that are beyond the limits of the fast version.231 */232 233 IPC_SET_ARG5(call->u.msg.data, 0);234 }235 197 236 198 ipc_finish_async(callid, phoneid, call); … … 351 313 ipc_callid_t callid = 352 314 ipc_call_async_internal(call->u.msg.phoneid, &call->u.msg.data); 353 354 if (callid == (ipc_callid_t) IPC_CALLRET_TEMPORARY)355 break;356 315 357 316 list_remove(&call->list);
Note:
See TracChangeset
for help on using the changeset viewer.