diff options
-rw-r--r-- | include/sys/atomic.h | 9 | ||||
-rw-r--r-- | include/sys/cmn_err.h | 2 | ||||
-rw-r--r-- | include/sys/taskq.h | 2 | ||||
-rw-r--r-- | include/sys/thread.h | 6 | ||||
-rw-r--r-- | modules/spl/spl-thread.c | 4 |
5 files changed, 18 insertions, 5 deletions
diff --git a/include/sys/atomic.h b/include/sys/atomic.h index ae2130331..1f2a4780b 100644 --- a/include/sys/atomic.h +++ b/include/sys/atomic.h @@ -10,6 +10,7 @@ extern "C" { * get by for now since I'm only working on real 64bit systems but * this will need to be addressed properly. */ + static __inline__ void atomic_inc_64(volatile uint64_t *target) { @@ -22,6 +23,14 @@ atomic_dec_64(volatile uint64_t *target) (*target)--; } +static __inline__ uint32_t +atomic_add_32(volatile uint32_t *target, int32_t delta) +{ + uint32_t rc = *target; + *target += delta; + return rc; +} + static __inline__ uint64_t atomic_add_64(volatile uint64_t *target, uint64_t delta) { diff --git a/include/sys/cmn_err.h b/include/sys/cmn_err.h index c76e4f465..62417e83e 100644 --- a/include/sys/cmn_err.h +++ b/include/sys/cmn_err.h @@ -13,4 +13,6 @@ extern void cmn_err(int, const char *, ...); extern void vcmn_err(int, const char *, __va_list); extern void vpanic(const char *, __va_list); +#define fm_panic panic + #endif /* SPL_CMN_ERR_H */ diff --git a/include/sys/taskq.h b/include/sys/taskq.h index fd4af1232..811b99557 100644 --- a/include/sys/taskq.h +++ b/include/sys/taskq.h @@ -75,7 +75,7 @@ extern taskq_t *__taskq_create(const char *, int, pri_t, int, int, uint_t); #define taskq_create(name, thr, pri, min, max, flags) \ __taskq_create(name, thr, pri, min, max, flags) #define taskq_dispatch(tq, func, priv, flags) \ - __taskq_dispatch(tq, func, priv, flags) + __taskq_dispatch(tq, (task_func_t)func, priv, flags) #define taskq_destroy(tq) destroy_workqueue(tq) #define taskq_wait(tq) flush_workqueue(tq) #define taskq_member(tq, kthr) 1 /* XXX -Just be true */ diff --git a/include/sys/thread.h b/include/sys/thread.h index 44e2902a6..c7b104374 100644 --- a/include/sys/thread.h +++ b/include/sys/thread.h @@ -26,14 +26,16 @@ extern "C" { #define TS_WAIT 0x20 /* No clean linux mapping */ #endif +typedef void (*thread_func_t)(void *); + #define thread_create(stk, stksize, func, arg, len, pp, state, pri) \ - __thread_create(stk, stksize, (void (*)(void *))func, \ + __thread_create(stk, stksize, (thread_func_t)func, \ arg, len, pp, state, pri) #define thread_exit() __thread_exit() #define curthread get_current() extern kthread_t *__thread_create(caddr_t stk, size_t stksize, - void (*func)(void *), void *args, + thread_func_t func, void *args, size_t len, int *pp, int state, pri_t pri); extern void __thread_exit(void); diff --git a/modules/spl/spl-thread.c b/modules/spl/spl-thread.c index e6dca2300..a2c72f051 100644 --- a/modules/spl/spl-thread.c +++ b/modules/spl/spl-thread.c @@ -59,7 +59,7 @@ EXPORT_SYMBOL(__thread_exit); * allocate memory. This is preferable to returning a NULL which Solaris * style callers likely never check for... since it can't fail. */ kthread_t * -__thread_create(caddr_t stk, size_t stksize, void (*proc)(void *), +__thread_create(caddr_t stk, size_t stksize, thread_func_t func, void *args, size_t len, int *pp, int state, pri_t pri) { thread_priv_t tp; @@ -77,7 +77,7 @@ __thread_create(caddr_t stk, size_t stksize, void (*proc)(void *), * we're passing a stack address to a new thread but correct locking was * added to ensure the callee can use the data safely until wake_up(). */ tp.tp_magic = TP_MAGIC; - tp.tp_func = proc; + tp.tp_func = func; tp.tp_args = args; tp.tp_len = len; tp.tp_state = state; |