Other parts of the kernel can treat the kernel events subsystem
as opaque; these structures are not manipulated directly and
are only relevant if you are interested in the implementation.
struct source
{
struct source *next, *prev; /* list of all sources */
struct listener *listener_list;
struct wait_queue *wq;
char name; /* "name" is really an embedded string, to avoid
a separate kmalloc(). */
};
struct listener
{
struct client *ptr;
struct listener *next, *prev;
};
struct client
{
struct source *src;
int *buffer;
int buffer_capacity;
int next_msg_slot; /* next msg waiting to be retrieved (next free
slot is queue_len places further on) */
int queue_len;
};