]>
Commit | Line | Data |
---|---|---|
4b393c50 | 1 | /* |
716154c5 BB |
2 | * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. |
3 | * Copyright (C) 2007 The Regents of the University of California. | |
4 | * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). | |
5 | * Written by Brian Behlendorf <behlendorf1@llnl.gov>. | |
715f6251 BB |
6 | * UCRL-CODE-235197 |
7 | * | |
716154c5 | 8 | * This file is part of the SPL, Solaris Porting Layer. |
715f6251 | 9 | * |
716154c5 BB |
10 | * The SPL is free software; you can redistribute it and/or modify it |
11 | * under the terms of the GNU General Public License as published by the | |
12 | * Free Software Foundation; either version 2 of the License, or (at your | |
13 | * option) any later version. | |
14 | * | |
15 | * The SPL is distributed in the hope that it will be useful, but WITHOUT | |
715f6251 BB |
16 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
17 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
18 | * for more details. | |
19 | * | |
20 | * You should have received a copy of the GNU General Public License along | |
716154c5 | 21 | * with the SPL. If not, see <http://www.gnu.org/licenses/>. |
4b393c50 | 22 | */ |
715f6251 | 23 | |
09b414e8 | 24 | #ifndef _SPL_THREAD_H |
5461eefe | 25 | #define _SPL_THREAD_H |
f1ca4da6 | 26 | |
f1b59d26 | 27 | #include <linux/module.h> |
f1ca4da6 BB |
28 | #include <linux/mm.h> |
29 | #include <linux/spinlock.h> | |
968eccd1 | 30 | #include <linux/kthread.h> |
f4b37741 | 31 | #include <sys/types.h> |
14c5326c | 32 | #include <sys/sysmacros.h> |
9fe45dc1 | 33 | #include <sys/tsd.h> |
f1ca4da6 BB |
34 | |
35 | /* | |
36 | * Thread interfaces | |
37 | */ | |
5461eefe | 38 | #define TP_MAGIC 0x53535353 |
f1ca4da6 | 39 | |
5461eefe BB |
40 | #define TS_SLEEP TASK_INTERRUPTIBLE |
41 | #define TS_RUN TASK_RUNNING | |
42 | #define TS_ZOMB EXIT_ZOMBIE | |
43 | #define TS_STOPPED TASK_STOPPED | |
f1ca4da6 | 44 | |
51f443a0 BB |
45 | typedef void (*thread_func_t)(void *); |
46 | ||
843e9ca2 SD |
47 | #define thread_create_named(name, stk, stksize, func, arg, len, \ |
48 | pp, state, pri) \ | |
49 | __thread_create(stk, stksize, (thread_func_t)func, \ | |
50 | name, arg, len, pp, state, pri) | |
51 | ||
5461eefe | 52 | #define thread_create(stk, stksize, func, arg, len, pp, state, pri) \ |
7ada752a AZ |
53 | __thread_create(stk, stksize, (thread_func_t)func, #func, \ |
54 | arg, len, pp, state, pri) | |
5461eefe | 55 | |
460748d4 | 56 | #define thread_exit() spl_thread_exit() |
5461eefe BB |
57 | #define thread_join(t) VERIFY(0) |
58 | #define curthread current | |
59 | #define getcomm() current->comm | |
60 | #define getpid() current->pid | |
f1ca4da6 | 61 | |
f1b59d26 | 62 | extern kthread_t *__thread_create(caddr_t stk, size_t stksize, |
5461eefe BB |
63 | thread_func_t func, const char *name, void *args, size_t len, proc_t *pp, |
64 | int state, pri_t pri); | |
ed650dee | 65 | extern struct task_struct *spl_kthread_create(int (*func)(void *), |
a9125891 BB |
66 | void *data, const char namefmt[], ...); |
67 | ||
460748d4 BB |
68 | static inline __attribute__((noreturn)) void |
69 | spl_thread_exit(void) | |
70 | { | |
71 | tsd_exit(); | |
72 | SPL_KTHREAD_COMPLETE_AND_EXIT(NULL, 0); | |
73 | } | |
74 | ||
a9125891 | 75 | extern proc_t p0; |
17a527cb | 76 | |
414f7249 PD |
77 | #ifdef HAVE_SIGINFO |
78 | typedef kernel_siginfo_t spl_kernel_siginfo_t; | |
79 | #else | |
80 | typedef siginfo_t spl_kernel_siginfo_t; | |
81 | #endif | |
82 | ||
83 | #ifdef HAVE_SET_SPECIAL_STATE | |
84 | #define spl_set_special_state(x) set_special_state((x)) | |
85 | #else | |
86 | #define spl_set_special_state(x) __set_current_state((x)) | |
87 | #endif | |
88 | ||
89 | ||
09b414e8 | 90 | #endif /* _SPL_THREAD_H */ |