Changes in / [0a981e3:f570cdf] in mainline
- Location:
- uspace/lib/c
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/c/generic/async.c
r0a981e3 rf570cdf 1674 1674 1675 1675 ipc_call_async_4(exch->phone, imethod, arg1, arg2, arg3, arg4, msg, 1676 reply_received , true);1676 reply_received); 1677 1677 1678 1678 return (aid_t) msg; … … 1712 1712 1713 1713 ipc_call_async_5(exch->phone, imethod, arg1, arg2, arg3, arg4, arg5, 1714 msg, reply_received , true);1714 msg, reply_received); 1715 1715 1716 1716 return (aid_t) msg; … … 2001 2001 { 2002 2002 if (exch != NULL) 2003 ipc_call_async_0(exch->phone, imethod, NULL, NULL , true);2003 ipc_call_async_0(exch->phone, imethod, NULL, NULL); 2004 2004 } 2005 2005 … … 2007 2007 { 2008 2008 if (exch != NULL) 2009 ipc_call_async_1(exch->phone, imethod, arg1, NULL, NULL , true);2009 ipc_call_async_1(exch->phone, imethod, arg1, NULL, NULL); 2010 2010 } 2011 2011 … … 2014 2014 { 2015 2015 if (exch != NULL) 2016 ipc_call_async_2(exch->phone, imethod, arg1, arg2, NULL, NULL, 2017 true); 2016 ipc_call_async_2(exch->phone, imethod, arg1, arg2, NULL, NULL); 2018 2017 } 2019 2018 … … 2023 2022 if (exch != NULL) 2024 2023 ipc_call_async_3(exch->phone, imethod, arg1, arg2, arg3, NULL, 2025 NULL , true);2024 NULL); 2026 2025 } 2027 2026 … … 2031 2030 if (exch != NULL) 2032 2031 ipc_call_async_4(exch->phone, imethod, arg1, arg2, arg3, arg4, 2033 NULL, NULL , true);2032 NULL, NULL); 2034 2033 } 2035 2034 … … 2039 2038 if (exch != NULL) 2040 2039 ipc_call_async_5(exch->phone, imethod, arg1, arg2, arg3, arg4, 2041 arg5, NULL, NULL , true);2040 arg5, NULL, NULL); 2042 2041 } 2043 2042 … … 2162 2161 2163 2162 ipc_call_async_0(exch->phone, IPC_M_CLONE_ESTABLISH, msg, 2164 reply_received , true);2163 reply_received); 2165 2164 2166 2165 sysarg_t rc; … … 2211 2210 2212 2211 ipc_call_async_4(phone, IPC_M_CONNECT_ME_TO, arg1, arg2, arg3, arg4, 2213 msg, reply_received , true);2212 msg, reply_received); 2214 2213 2215 2214 sysarg_t rc; -
uspace/lib/c/generic/ipc.c
r0a981e3 rf570cdf 127 127 * @param phoneid Phone handle through which the call was made. 128 128 * @param call Structure returned by ipc_prepare_async(). 129 * @param can_preempt If true, the current fibril can be preempted130 * in this call.131 *132 129 */ 133 130 static inline void ipc_finish_async(ipc_callid_t callid, int phoneid, 134 async_call_t *call , bool can_preempt)131 async_call_t *call) 135 132 { 136 133 if (!call) { … … 159 156 list_append(&call->list, &queued_calls); 160 157 161 if (can_preempt) { 162 call->fid = fibril_get_id(); 163 fibril_switch(FIBRIL_TO_MANAGER); 164 /* Async futex unlocked by previous call */ 165 } else { 166 call->fid = 0; 167 futex_up(&async_futex); 168 } 158 call->fid = fibril_get_id(); 159 fibril_switch(FIBRIL_TO_MANAGER); 160 /* Async futex unlocked by previous call */ 169 161 170 162 return; … … 197 189 * @param private Argument to be passed to the answer/error callback. 198 190 * @param callback Answer or error callback. 199 * @param can_preempt If true, the current fibril will be preempted in200 * case the kernel temporarily refuses to accept more201 * asynchronous calls.202 *203 191 */ 204 192 void ipc_call_async_fast(int phoneid, sysarg_t imethod, sysarg_t arg1, 205 193 sysarg_t arg2, sysarg_t arg3, sysarg_t arg4, void *private, 206 ipc_async_callback_t callback , bool can_preempt)194 ipc_async_callback_t callback) 207 195 { 208 196 async_call_t *call = NULL; … … 246 234 } 247 235 248 ipc_finish_async(callid, phoneid, call , can_preempt);236 ipc_finish_async(callid, phoneid, call); 249 237 } 250 238 … … 266 254 * @param private Argument to be passed to the answer/error callback. 267 255 * @param callback Answer or error callback. 268 * @param can_preempt If true, the current fibril will be preempted in269 * case the kernel temporarily refuses to accept more270 * asynchronous calls.271 *272 256 */ 273 257 void ipc_call_async_slow(int phoneid, sysarg_t imethod, sysarg_t arg1, 274 258 sysarg_t arg2, sysarg_t arg3, sysarg_t arg4, sysarg_t arg5, void *private, 275 ipc_async_callback_t callback , bool can_preempt)259 ipc_async_callback_t callback) 276 260 { 277 261 async_call_t *call = ipc_prepare_async(private, callback); … … 295 279 ipc_call_async_internal(phoneid, &call->u.msg.data); 296 280 297 ipc_finish_async(callid, phoneid, call , can_preempt);281 ipc_finish_async(callid, phoneid, call); 298 282 } 299 283 … … 375 359 futex_up(&async_futex); 376 360 377 if (call->fid)378 361 assert(call->fid); 362 fibril_add_ready(call->fid); 379 363 380 364 if (callid == (ipc_callid_t) IPC_CALLRET_FATAL) { -
uspace/lib/c/include/ipc/ipc.h
r0a981e3 rf570cdf 89 89 */ 90 90 91 #define ipc_call_async_0(phoneid, method, private, callback , can_preempt) \91 #define ipc_call_async_0(phoneid, method, private, callback) \ 92 92 ipc_call_async_fast((phoneid), (method), 0, 0, 0, 0, (private), \ 93 (callback), (can_preempt)) 94 #define ipc_call_async_1(phoneid, method, arg1, private, callback, \ 95 can_preempt) \ 93 (callback)) 94 #define ipc_call_async_1(phoneid, method, arg1, private, callback) \ 96 95 ipc_call_async_fast((phoneid), (method), (arg1), 0, 0, 0, (private), \ 97 (callback), (can_preempt)) 98 #define ipc_call_async_2(phoneid, method, arg1, arg2, private, callback, \ 99 can_preempt) \ 96 (callback)) 97 #define ipc_call_async_2(phoneid, method, arg1, arg2, private, callback) \ 100 98 ipc_call_async_fast((phoneid), (method), (arg1), (arg2), 0, 0, \ 101 (private), (callback), (can_preempt)) 102 #define ipc_call_async_3(phoneid, method, arg1, arg2, arg3, private, callback, \ 103 can_preempt) \ 99 (private), (callback)) 100 #define ipc_call_async_3(phoneid, method, arg1, arg2, arg3, private, callback) \ 104 101 ipc_call_async_fast((phoneid), (method), (arg1), (arg2), (arg3), 0, \ 105 (private), (callback) , (can_preempt))102 (private), (callback)) 106 103 #define ipc_call_async_4(phoneid, method, arg1, arg2, arg3, arg4, private, \ 107 callback , can_preempt) \104 callback) \ 108 105 ipc_call_async_fast((phoneid), (method), (arg1), (arg2), (arg3), \ 109 (arg4), (private), (callback) , (can_preempt))106 (arg4), (private), (callback)) 110 107 #define ipc_call_async_5(phoneid, method, arg1, arg2, arg3, arg4, arg5, \ 111 private, callback , can_preempt) \108 private, callback) \ 112 109 ipc_call_async_slow((phoneid), (method), (arg1), (arg2), (arg3), \ 113 (arg4), (arg5), (private), (callback) , (can_preempt))110 (arg4), (arg5), (private), (callback)) 114 111 115 112 extern void ipc_call_async_fast(int, sysarg_t, sysarg_t, sysarg_t, sysarg_t, 116 sysarg_t, void *, ipc_async_callback_t , bool);113 sysarg_t, void *, ipc_async_callback_t); 117 114 extern void ipc_call_async_slow(int, sysarg_t, sysarg_t, sysarg_t, sysarg_t, 118 sysarg_t, sysarg_t, void *, ipc_async_callback_t , bool);115 sysarg_t, sysarg_t, void *, ipc_async_callback_t); 119 116 120 117 extern int ipc_hangup(int);
Note:
See TracChangeset
for help on using the changeset viewer.