18 #ifndef _COPPERPLATE_INTERNAL_H 19 #define _COPPERPLATE_INTERNAL_H 21 #include <sys/types.h> 25 #include <semaphore.h> 26 #include <xeno_config.h> 27 #include <boilerplate/list.h> 28 #include <boilerplate/ancillaries.h> 29 #include <boilerplate/limits.h> 30 #include <boilerplate/sched.h> 31 #include <boilerplate/setup.h> 32 #include <copperplate/heapobj.h> 33 #include <copperplate/tunables.h> 35 #ifdef CONFIG_XENO_PSHARED 37 #include <boilerplate/shavl.h> 39 #define SHEAPMEM_PAGE_SHIFT 9 40 #define SHEAPMEM_PAGE_SIZE (1UL << SHEAPMEM_PAGE_SHIFT) 41 #define SHEAPMEM_PAGE_MASK (~(SHEAPMEM_PAGE_SIZE - 1)) 42 #define SHEAPMEM_MIN_LOG2 4 47 #define SHEAPMEM_MAX (SHEAPMEM_PAGE_SHIFT - SHEAPMEM_MIN_LOG2) 48 #define SHEAPMEM_MIN_ALIGN (1U << SHEAPMEM_MIN_LOG2) 50 #define SHEAPMEM_MAX_EXTSZ (4294967295U - SHEAPMEM_PAGE_SIZE + 1) 52 #define SHEAPMEM_PGENT_BITS (32 - SHEAPMEM_PAGE_SHIFT) 55 #define SHEAPMEM_PGMAP_BYTES sizeof(struct sheapmem_pgentry) 57 struct sheapmem_pgentry {
59 unsigned int prev : SHEAPMEM_PGENT_BITS;
60 unsigned int next : SHEAPMEM_PGENT_BITS;
62 unsigned int type : 6;
81 struct sheapmem_range {
82 struct shavlh addr_node;
83 struct shavlh size_node;
87 struct sheapmem_extent {
91 struct shavl addr_tree;
92 struct shavl size_tree;
93 struct sheapmem_pgentry pagemap[0];
96 #define __SHEAPMEM_MAP_SIZE(__nrpages) \ 97 ((__nrpages) * SHEAPMEM_PGMAP_BYTES) 99 #define __SHEAPMEM_ARENA_SIZE(__size) \ 101 __align_to(sizeof(struct sheapmem_extent) + \ 102 __SHEAPMEM_MAP_SIZE((__size) >> SHEAPMEM_PAGE_SHIFT), \ 110 #define SHEAPMEM_ARENA_SIZE(__user_size) \ 111 __SHEAPMEM_ARENA_SIZE(__align_to(__user_size, SHEAPMEM_PAGE_SIZE)) 117 struct shared_heap_memory {
118 char name[XNOBJECT_NAME_LEN];
119 pthread_mutex_t lock;
120 struct listobj extents;
125 uint32_t buckets[SHEAPMEM_MAX];
126 struct sysgroup_memspec memspec;
129 ssize_t sheapmem_check(
struct shared_heap_memory *heap,
void *block);
133 #ifdef CONFIG_XENO_REGISTRY 134 #define DEFAULT_REGISTRY_ROOT CONFIG_XENO_REGISTRY_ROOT 136 #define DEFAULT_REGISTRY_ROOT NULL 139 struct corethread_attributes {
143 struct sched_param_ex param_ex;
144 int (*prologue)(
void *arg);
145 void *(*run)(
void *arg);
158 void copperplate_set_current_name(
const char *name);
160 int copperplate_get_current_name(
char *name,
size_t maxlen);
162 int copperplate_kill_tid(pid_t tid,
int sig);
164 int copperplate_probe_tid(pid_t tid);
166 int copperplate_create_thread(
struct corethread_attributes *cta,
169 int copperplate_renice_local_thread(pthread_t ptid,
int policy,
170 const struct sched_param_ex *param_ex);
172 void copperplate_bootstrap_internal(
const char *arg0,
173 char *mountpt,
int regflags);