Skip to content

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:

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:

#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)