mirror of
https://github.com/drasko/codezero.git
synced 2026-01-13 03:13:15 +01:00
ipc_sendrecv() replaces ipc_sendwait() which was flawed. See ipc_sendrecv() for how client/server communication works. Tested with page faults where the kernel does an ipc_sendrecv() to faulty thread's pager and the pager successfully handles the request, and returns back the result, which effectively restarts the faulty thread.
31 lines
646 B
C
31 lines
646 B
C
#ifndef __IPC_H__
|
|
#define __IPC_H__
|
|
|
|
|
|
#define L4_NILTHREAD -1
|
|
#define L4_ANYTHREAD -2
|
|
|
|
#define L4_IPC_TAG_MR_OFFSET 0
|
|
|
|
|
|
/* To synchronise two threads */
|
|
#define L4_IPC_TAG_WAIT 0
|
|
|
|
/* Pagefault */
|
|
#define L4_IPC_TAG_PFAULT 2
|
|
|
|
#if defined (__KERNEL__) /* These are kernel internal calls */
|
|
/* A helper call for sys_ipc() or internally created ipc paths. */
|
|
int ipc_send(l4id_t to);
|
|
int ipc_sendrecv(l4id_t to, l4id_t from);
|
|
|
|
/*
|
|
* This version sends an extra wait ipc to its receiver so that
|
|
* the receiver can explicitly make it runnable later by accepting
|
|
* this wait ipc.
|
|
*/
|
|
int ipc_sendwait(l4id_t tid);
|
|
#endif
|
|
|
|
#endif /* __IPC_H__ */
|