18 #ifndef _COBALT_POSIX_THREAD_H
19 #define _COBALT_POSIX_THREAD_H
22 #include <linux/types.h>
23 #include <linux/time.h>
24 #include <linux/signal.h>
25 #include <cobalt/kernel/thread.h>
26 #include <cobalt/uapi/thread.h>
27 #include <cobalt/uapi/sched.h>
29 #include <xenomai/posix/syscall.h>
30 #include <xenomai/posix/extension.h>
32 #define PTHREAD_PROCESS_PRIVATE 0
33 #define PTHREAD_PROCESS_SHARED 1
35 #define PTHREAD_CREATE_JOINABLE 0
36 #define PTHREAD_CREATE_DETACHED 1
38 #define PTHREAD_INHERIT_SCHED 0
39 #define PTHREAD_EXPLICIT_SCHED 1
41 #define PTHREAD_MUTEX_NORMAL 0
42 #define PTHREAD_MUTEX_RECURSIVE 1
43 #define PTHREAD_MUTEX_ERRORCHECK 2
44 #define PTHREAD_MUTEX_DEFAULT 0
47 struct cobalt_threadstat;
55 struct _pthread_fastlock {
61 struct _pthread_fastlock __c_lock;
63 char __padding[48 -
sizeof (
struct _pthread_fastlock)
64 - sizeof (long) - sizeof (long long)];
79 struct _pthread_fastlock __m_lock;
82 struct cobalt_local_hkey {
89 struct cobalt_thread {
91 struct xnthread threadbase;
92 struct cobalt_extref extref;
93 struct cobalt_process *process;
96 struct list_head link;
97 struct list_head *container;
101 struct list_head sigqueues[_NSIG];
102 struct xnsynch sigwait;
103 struct list_head signext;
106 struct xnsynch monitor_synch;
107 struct list_head monitor_link;
109 struct cobalt_local_hkey hkey;
112 struct cobalt_sigwait_context {
113 struct xnthread_wait_context wc;
118 static inline struct cobalt_thread *cobalt_current_thread(
void)
121 return curr ? container_of(curr,
struct cobalt_thread, threadbase) : NULL;
124 int __cobalt_thread_create(
unsigned long pth,
int policy,
125 struct sched_param_ex __user *u_param,
126 int xid, __u32 __user *u_winoff);
128 int __cobalt_thread_setschedparam_ex(
unsigned long pth,
130 const struct sched_param_ex *param_ex,
131 __u32 __user *u_winoff,
132 int __user *u_promoted);
134 int __cobalt_thread_getschedparam_ex(
unsigned long pth,
135 int __user *u_policy,
136 struct sched_param_ex *param_ex);
138 struct cobalt_thread *cobalt_thread_find(pid_t pid);
140 struct cobalt_thread *cobalt_thread_find_local(pid_t pid);
142 struct cobalt_thread *cobalt_thread_lookup(
unsigned long pth);
144 COBALT_SYSCALL_DECL(thread_create,
145 (
unsigned long pth,
int policy,
146 struct sched_param_ex __user *u_param,
147 int xid, __u32 __user *u_winoff));
149 struct cobalt_thread *
150 cobalt_thread_shadow(
struct task_struct *p,
151 struct cobalt_local_hkey *lhkey,
152 __u32 __user *u_winoff);
154 COBALT_SYSCALL_DECL(thread_setmode,
155 (
int clrmask,
int setmask,
int __user *u_mode_r));
157 COBALT_SYSCALL_DECL(thread_setname,
158 (
unsigned long pth,
const char __user *u_name));
160 COBALT_SYSCALL_DECL(thread_kill, (
unsigned long pth,
int sig));
162 COBALT_SYSCALL_DECL(thread_join, (
unsigned long pth));
164 COBALT_SYSCALL_DECL(thread_getpid, (
unsigned long pth));
166 COBALT_SYSCALL_DECL(thread_getstat,
167 (pid_t pid,
struct cobalt_threadstat __user *u_stat));
169 COBALT_SYSCALL_DECL(thread_setschedparam_ex,
172 const struct sched_param_ex __user *u_param,
173 __u32 __user *u_winoff,
174 int __user *u_promoted));
176 COBALT_SYSCALL_DECL(thread_getschedparam_ex,
178 int __user *u_policy,
179 struct sched_param_ex __user *u_param));
181 void cobalt_thread_map(
struct xnthread *curr);
183 struct xnthread_personality *cobalt_thread_exit(
struct xnthread *curr);
185 struct xnthread_personality *cobalt_thread_finalize(
struct xnthread *zombie);
187 #ifdef CONFIG_XENO_OPT_COBALT_EXTENSION
189 int cobalt_thread_extend(
struct cobalt_extension *ext,
192 void cobalt_thread_restrict(
void);
195 int cobalt_thread_extended_p(
const struct cobalt_thread *thread,
196 const struct cobalt_extension *ext)
198 return thread->extref.extension == ext;
204 int cobalt_thread_extended_p(
const struct cobalt_thread *thread,
205 const struct cobalt_extension *ext)
212 extern xnticks_t cobalt_time_slice;
static struct xnthread * xnthread_current(void)
Retrieve the current Cobalt core TCB.
Definition: thread.h:352