Introduce names for ZTHRs

When debugging issues or generally analyzing the runtime of
a system it would be nice to be able to tell the different
ZTHRs running by name rather than having to analyze their
stack.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: Matthew Ahrens <mahrens@delphix.com>
Co-authored-by: Ryan Moeller <ryan@iXsystems.com>
Signed-off-by: Serapheim Dimitropoulos <serapheim@delphix.com>
Closes #10630
This commit is contained in:
Serapheim Dimitropoulos
2020-07-29 09:43:33 -07:00
committed by GitHub
parent 5678d3f593
commit 843e9ca2e1
8 changed files with 43 additions and 23 deletions
+6 -3
View File
@@ -65,7 +65,7 @@ extern struct proc *zfsproc;
static __inline kthread_t *
do_thread_create(caddr_t stk, size_t stksize, void (*proc)(void *), void *arg,
size_t len, proc_t *pp, int state, pri_t pri)
size_t len, proc_t *pp, int state, pri_t pri, const char *name)
{
kthread_t *td = NULL;
int error;
@@ -78,7 +78,7 @@ do_thread_create(caddr_t stk, size_t stksize, void (*proc)(void *), void *arg,
ASSERT(state == TS_RUN);
error = kproc_kthread_add(proc, arg, &zfsproc, &td,
RFSTOPPED, stksize / PAGE_SIZE, "zfskern", "solthread %p", proc);
RFSTOPPED, stksize / PAGE_SIZE, "zfskern", "%s", name);
if (error == 0) {
thread_lock(td);
sched_prio(td, pri);
@@ -90,8 +90,11 @@ do_thread_create(caddr_t stk, size_t stksize, void (*proc)(void *), void *arg,
return (td);
}
#define thread_create_named(name, stk, stksize, proc, arg, len, \
pp, state, pri) \
do_thread_create(stk, stksize, proc, arg, len, pp, state, pri, name)
#define thread_create(stk, stksize, proc, arg, len, pp, state, pri) \
do_thread_create(stk, stksize, proc, arg, len, pp, state, pri)
do_thread_create(stk, stksize, proc, arg, len, pp, state, pri, #proc)
#define thread_exit() kthread_exit()
int uread(proc_t *, void *, size_t, uintptr_t);
+5
View File
@@ -45,6 +45,11 @@
typedef void (*thread_func_t)(void *);
#define thread_create_named(name, stk, stksize, func, arg, len, \
pp, state, pri) \
__thread_create(stk, stksize, (thread_func_t)func, \
name, arg, len, pp, state, pri)
/* BEGIN CSTYLED */
#define thread_create(stk, stksize, func, arg, len, pp, state, pri) \
__thread_create(stk, stksize, (thread_func_t)func, \
+3
View File
@@ -218,6 +218,9 @@ typedef pthread_t kthread_t;
#define kpreempt(x) yield()
#define getcomm() "unknown"
#define thread_create_named(name, stk, stksize, func, arg, len, \
pp, state, pri) \
zk_thread_create(func, arg, stksize, state)
#define thread_create(stk, stksize, func, arg, len, pp, state, pri) \
zk_thread_create(func, arg, stksize, state)
#define thread_exit() pthread_exit(NULL)
+5 -4
View File
@@ -24,10 +24,11 @@ typedef struct zthr zthr_t;
typedef void (zthr_func_t)(void *, zthr_t *);
typedef boolean_t (zthr_checkfunc_t)(void *, zthr_t *);
extern zthr_t *zthr_create(zthr_checkfunc_t checkfunc,
zthr_func_t *func, void *arg);
extern zthr_t *zthr_create_timer(zthr_checkfunc_t *checkfunc,
zthr_func_t *func, void *arg, hrtime_t nano_wait);
extern zthr_t *zthr_create(const char *zthr_name,
zthr_checkfunc_t checkfunc, zthr_func_t *func, void *arg);
extern zthr_t *zthr_create_timer(const char *zthr_name,
zthr_checkfunc_t *checkfunc, zthr_func_t *func, void *arg,
hrtime_t nano_wait);
extern void zthr_destroy(zthr_t *t);
extern void zthr_wakeup(zthr_t *t);