xref: /haiku/src/libs/compat/freebsd_iflib/kthread.cpp (revision 189ed5d80619a1ac87718c171fc6aa937b34457d)
1 /*
2  * Copyright 2018, Haiku, Inc. All rights reserved.
3  * Distributed under the terms of the MIT License.
4  */
5 
6 extern "C" {
7 #include <sys/systm.h>
8 #include <sys/kthread.h>
9 }
10 
11 #include <thread.h>
12 
13 
14 int
kthread_add(void (* func)(void *),void * arg,void * p,struct thread ** newtdp,int flags,int pages,const char * fmt,...)15 kthread_add(void (*func)(void *), void *arg, void* p,
16 	struct thread **newtdp, int flags, int pages, const char *fmt, ...)
17 {
18 	va_list ap;
19 	char name[B_OS_NAME_LENGTH];
20 	va_start(ap, fmt);
21 	vsnprintf(name, sizeof(name), fmt, ap);
22 	va_end(ap);
23 
24 	thread_id id = spawn_kernel_thread((status_t (*)(void *))func, /* HACK! */
25 		name, B_NORMAL_PRIORITY, arg);
26 	if (id < 0)
27 		return id;
28 	if (newtdp != NULL) {
29 		intptr_t thread = id;
30 		*newtdp = (struct thread*)thread;
31 	}
32 	return 0;
33 }
34 
35 
36 void
sched_prio(struct thread * td,u_char prio)37 sched_prio(struct thread* td, u_char prio)
38 {
39 	uintptr_t tdi = (uintptr_t)td;
40 	set_thread_priority((thread_id)tdi, prio);
41 }
42 
43 
44 void
sched_add(struct thread * td,int)45 sched_add(struct thread* td, int /* flags */)
46 {
47 	uintptr_t tdi = (uintptr_t)td;
48 	resume_thread((thread_id)tdi);
49 }
50 
51 
52 void
kthread_exit()53 kthread_exit()
54 {
55 	thread_exit();
56 }
57