struct domain {
size_t id;
size_t num_cores;
struct core **cores;
struct numa_node *associated_node;
struct slab_domain *slab_domain;
struct domain_buddy *domain_buddy;
struct cpu_mask cpu_mask;
};
void domain_init(void);
struct cpu_mask * domain_create_cpu_mask(struct domain *domain);
void domain_set_cpu_mask(struct cpu_mask *mask, struct domain *domain);
bool domain_idle(struct domain *domain);
numa_node_t numa_node_for_cpu(cpu_id_t cpu);
domain_id_t domain_for_cpu(cpu_id_t cpu);
void domain_init_after_smp();
void domain_caller_verify(enum topology_caller caller);
void domain_dump(void);
struct domain domain_local(enum topology_caller c);
domain_id_t domain_local_id(enum topology_caller c);
#define CORES_PER_DOMAIN 4
#define domain_for_each_domain(__dom) \
for (domain_id_t __i = 0; \
(__dom = global.domains[__i]), (__i < global.domain_count); __i++)
#define domain_for_each_domain_id(__id) \
for (domain_id_t __i = 0; \
(__id = global.domains[__i]->id), (__i < global.domain_count); __i++)
#define domain_for_each_core(__pos, __dom) \
for (domain_id_t __i = 0; \
(__pos = __dom->cores[__i]), (__i < __dom->num_cores); __i++)
#define domain_for_each_core_id(__pos, __dom) \
for (domain_id_t __i = 0; \
(__pos = __dom->cores[__i]->id), (__i < __dom->num_cores); __i++)
#define domain_for_each_core_local(__clr, __pos) \
domain_for_each_core(__pos, smp_core(__clr)->domain)