blob: 62bc85600f4c370aa64f86a81e78541ceb789163 [file] [log] [blame]
/*
* Copyright (c) 2015 The Regents of the University of California
* Valmon Leymarie <leymariv@berkeley.edu>
* Kevin Klues <klueska@cs.berkeley.edu>
* See LICENSE for details.
*/
#pragma once
/* Forward declared from packed_corealloc.c. Internal representation of a
* node in the hierarchy of elements in the cpu topology of the machine (i.e.
* numa domain, socket, cpu, core, etc.). Needed here to provide a back
* reference for a sched_pcore to its node in the hierarchy. */
struct sched_pnode;
/* The core request algorithm maintains an internal array of these: the
* global pcore map. Note the prov_proc and alloc_proc are weak (internal)
* references, and should only be used as a ref source while the ksched has a
* valid kref. */
struct sched_pcore {
TAILQ_ENTRY(sched_pcore) prov_next; /* on a proc's prov list */
TAILQ_ENTRY(sched_pcore) alloc_next; /* on an alloc list (idle)*/
struct proc *prov_proc;
struct proc *alloc_proc;
struct core_info *core_info;
struct sched_pnode *sched_pnode;
};
TAILQ_HEAD(sched_pcore_tailq, sched_pcore);
struct core_request_data {
struct sched_pcore_tailq alloc_me;
struct sched_pcore_tailq prov_alloc_me;
struct sched_pcore_tailq prov_not_alloc_me;
};
static inline uint32_t spc2pcoreid(struct sched_pcore *spc)
{
return spc->core_info->core_id;
}
static inline struct sched_pcore *pcoreid2spc(uint32_t pcoreid)
{
extern struct sched_pcore *all_pcores;
return &all_pcores[pcoreid];
}