Add EPLAN9 to the error list (XCC)
[akaros.git] / kern / include / corealloc_packed.h
1 /*
2  * Copyright (c) 2015 The Regents of the University of California
3  * Valmon Leymarie <leymariv@berkeley.edu>
4  * Kevin Klues <klueska@cs.berkeley.edu>
5  * See LICENSE for details.
6  */
7
8 #pragma once
9
10 /* Forward declared from packed_corealloc.c. Internal representation of a
11  * node in the hierarchy of elements in the cpu topology of the machine (i.e.
12  * numa domain, socket, cpu, core, etc.). Needed here to provide a back
13  * reference for a sched_pcore to its node in the hierarchy. */
14 struct sched_pnode;
15
16 /* The core request algorithm maintains an internal array of these: the
17  * global pcore map. Note the prov_proc and alloc_proc are weak (internal)
18  * references, and should only be used as a ref source while the ksched has a
19  * valid kref. */
20 struct sched_pcore {
21         TAILQ_ENTRY(sched_pcore)   prov_next;    /* on a proc's prov list */
22         TAILQ_ENTRY(sched_pcore)   alloc_next;   /* on an alloc list (idle)*/
23         struct proc                *prov_proc;   /* who this is prov to */
24         struct proc                *alloc_proc;  /* who this is alloc to */
25         struct core_info           *core_info;
26         struct sched_pnode         *sched_pnode;
27 };
28 TAILQ_HEAD(sched_pcore_tailq, sched_pcore);
29
30 struct core_request_data {
31         struct sched_pcore_tailq  alloc_me;           /* cores alloced to us */
32         struct sched_pcore_tailq  prov_alloc_me;      /* prov cores alloced us */
33         struct sched_pcore_tailq  prov_not_alloc_me;  /* maybe alloc to others */
34 };
35
36 static inline uint32_t spc2pcoreid(struct sched_pcore *spc)
37 {
38         return spc->core_info->core_id;
39 }
40
41 static inline struct sched_pcore *pcoreid2spc(uint32_t pcoreid)
42 {
43         extern struct sched_pcore *all_pcores;
44
45         return &all_pcores[pcoreid];
46 }