Daemons
struct daemon_thread { struct list_head list_node; bool background; struct thread *thread; struct daemon *daemon; atomic_bool executing_work; enum daemon_thread_command command;};struct daemon_thread referenced types:
struct daemon_work { daemon_fn function; struct work_args args; struct daemon *daemon; void *private;};struct daemon_work referenced types:
struct daemon_attributes { size_t max_timesharing_threads; atomic_size_t timesharing_threads; atomic_size_t idle_timesharing_threads; atomic_bool background_thread_present; struct cpu_mask thread_cpu_mask; enum daemon_flags flags;};struct daemon_attributes referenced types:
struct daemon { char *name; struct semaphore ts_sem; struct semaphore bg_sem; struct list_head timesharing_threads; struct daemon_work *timesharing_work; struct daemon_thread *background_thread; struct daemon_work *background_work; struct workqueue *workqueue; struct daemon_attributes attrs; struct spinlock lock; enum daemon_state state;};struct daemon referenced types:
struct semaphorestruct list_headstruct daemon_workstruct daemon_threadstruct workqueuestruct daemon_attributesstruct spinlockenum daemon_state
enum daemon_thread_command { DAEMON_THREAD_COMMAND_NONE, DAEMON_THREAD_COMMAND_EXIT, DAEMON_THREAD_COMMAND_RESTART, DAEMON_THREAD_COMMAND_SLEEP, DAEMON_THREAD_COMMAND_DEFAULT = DAEMON_THREAD_COMMAND_SLEEP,};enum daemon_flags { DAEMON_FLAG_HAS_WORKQUEUE = 1, DAEMON_FLAG_HAS_NAME = 1 << 1, DAEMON_FLAG_AUTO_SPAWN = 1 << 2, DAEMON_FLAG_NO_TS_THREADS = 1 << 3, DAEMON_FLAG_NONE = 0,};enum daemon_state { DAEMON_STATE_ACTIVE, DAEMON_STATE_DESTROYING, DAEMON_STATE_DEAD,};typedef enum daemon_thread_command (*daemon_fn)(struct daemon_work * work, struct daemon_thread * executor, void * arg, void * arg2);type alias daemon_fn referenced types:
char daemon_state_str(enum daemon_state s);daemon_state_str referenced types:
Defines
Section titled “Defines”#define DAEMON_WORK_FROM(fn, a) \ ((struct daemon_work) {.function = fn, .args = a})#define daemon_thread_from_list_node(ln) \ container_of(ln, struct daemon_thread, list_node)#define DAEMON_FLAG_TEST(daemon, flag) (daemon->attrs.flags & flag)