Changeset db4d6de in mainline for kernel/generic/include
- Timestamp:
- 2009-11-28T16:30:43Z (17 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/fix-logger-deadlock, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- c4702804
- Parents:
- ba8f8cb (diff), 67392fa (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)links above to see all the changes relative to each parent. - Location:
- kernel/generic/include
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/include/context.h
rba8f8cb rdb4d6de 51 51 /** Save register context. 52 52 * 53 * Save current register context (including stack pointers) 54 * to context structure. 55 * 56 * Note that call to context_restore() will return at the same 53 * Save the current register context (including stack pointer) to a context 54 * structure. A subsequent call to context_restore() will return to the same 57 55 * address as the corresponding call to context_save(). 58 56 * 59 * This MUST be a macro, gcc -O0 does not inline functions even 60 * if they are marked inline and context_save_arch must be called 61 * from level <= that when context_restore is called. 57 * Note that context_save_arch() must reuse the stack frame of the function 58 * which called context_save(). We guarantee this by: 62 59 * 63 * @param c Context structure. 60 * a) implementing context_save_arch() in assembly so that it does not create 61 * its own stack frame, and by 62 * b) defining context_save() as a macro because the inline keyword is just a 63 * hint for the compiler, not a real constraint; the application of a macro 64 * will definitely not create a stack frame either. 64 65 * 65 * @return context_save() returns 1, context_restore() returns 0. 66 * To imagine what could happen if there were some extra stack frames created 67 * either by context_save() or context_save_arch(), we need to realize that the 68 * sp saved in the contex_t structure points to the current stack frame as it 69 * existed when context_save_arch() was executing. After the return from 70 * context_save_arch() and context_save(), any extra stack frames created by 71 * these functions will be destroyed and their contents sooner or later 72 * overwritten by functions called next. Any attempt to restore to a context 73 * saved like that would therefore lead to a disaster. 74 * 75 * @param c Context structure. 76 * 77 * @return context_save() returns 1, context_restore() returns 0. 66 78 */ 67 79 #define context_save(c) context_save_arch(c) … … 69 81 /** Restore register context. 70 82 * 71 * Restore previously saved register context (including stack pointers)72 * fromcontext structure.83 * Restore a previously saved register context (including stack pointer) from 84 * a context structure. 73 85 * 74 * Note that this function does not normally return. 75 * Instead, it returns at the same address as the 76 * corresponding call to context_save(), the only 77 * difference being return value. 86 * Note that this function does not normally return. Instead, it returns to the 87 * same address as the corresponding call to context_save(), the only difference 88 * being return value. 78 89 * 79 * @param c Context structure.90 * @param c Context structure. 80 91 */ 81 92 static inline void context_restore(context_t *c) -
kernel/generic/include/ipc/ipc.h
rba8f8cb rdb4d6de 51 51 /** This is answer to a call */ 52 52 #define IPC_CALL_ANSWERED (1 << 0) 53 /** This call will not be freed on error */54 #define IPC_CALL_STATIC_ALLOC (1 << 1)55 53 /** Answer will not be passed to userspace, will be discarded */ 56 #define IPC_CALL_DISCARD_ANSWER (1 << 2)54 #define IPC_CALL_DISCARD_ANSWER (1 << 1) 57 55 /** Call was forwarded */ 58 #define IPC_CALL_FORWARDED (1 << 3)56 #define IPC_CALL_FORWARDED (1 << 2) 59 57 /** Identify connect_me_to answer */ 60 #define IPC_CALL_CONN_ME_TO (1 << 4)58 #define IPC_CALL_CONN_ME_TO (1 << 3) 61 59 /** Interrupt notification */ 62 #define IPC_CALL_NOTIF (1 << 5)60 #define IPC_CALL_NOTIF (1 << 4) 63 61 64 62 /* … … 267 265 waitq_t wq; 268 266 267 /** Linkage for the list of task's synchronous answerboxes. */ 268 link_t sync_box_link; 269 269 270 /** Phones connected to this answerbox. */ 270 271 link_t connected_phones; … … 316 317 } call_t; 317 318 319 320 extern answerbox_t *ipc_phone_0; 321 322 318 323 extern void ipc_init(void); 319 extern call_t * ipc_wait_for_call(answerbox_t *, uint32_t, int); 320 extern void ipc_answer(answerbox_t *, call_t *); 324 325 extern call_t * ipc_call_alloc(int); 326 extern void ipc_call_free(call_t *); 327 321 328 extern int ipc_call(phone_t *, call_t *); 322 329 extern int ipc_call_sync(phone_t *, call_t *); 330 extern call_t * ipc_wait_for_call(answerbox_t *, uint32_t, int); 331 extern int ipc_forward(call_t *, phone_t *, answerbox_t *, int); 332 extern void ipc_answer(answerbox_t *, call_t *); 333 323 334 extern void ipc_phone_init(phone_t *); 324 335 extern void ipc_phone_connect(phone_t *, answerbox_t *); 325 extern void ipc_call_free(call_t *);326 extern call_t * ipc_call_alloc(int); 336 extern int ipc_phone_hangup(phone_t *); 337 327 338 extern void ipc_answerbox_init(answerbox_t *, struct task *); 328 extern void ipc_call_static_init(call_t *); 329 extern void task_print_list(void); 330 extern int ipc_forward(call_t *, phone_t *, answerbox_t *, int); 339 331 340 extern void ipc_cleanup(void); 332 extern int ipc_phone_hangup(phone_t *);333 341 extern void ipc_backsend_err(phone_t *, call_t *, unative_t); 334 extern void ipc_print_task(task_id_t);335 342 extern void ipc_answerbox_slam_phones(answerbox_t *, bool); 336 343 extern void ipc_cleanup_call_list(link_t *); 337 344 338 extern answerbox_t *ipc_phone_0;345 extern void ipc_print_task(task_id_t); 339 346 340 347 #endif -
kernel/generic/include/proc/task.h
rba8f8cb rdb4d6de 98 98 */ 99 99 atomic_t active_calls; 100 /** List of synchronous answerboxes. */ 101 link_t sync_box_head; 100 102 101 103 #ifdef CONFIG_UDEBUG … … 132 134 extern int task_kill(task_id_t id); 133 135 extern uint64_t task_get_accounting(task_t *t); 136 extern void task_print_list(void); 134 137 135 138 extern void cap_set(task_t *t, cap_t caps);
Note:
See TracChangeset
for help on using the changeset viewer.
