Print this page
3625 we only need one thread_create_intr

*** 317,335 **** * * If stk is NULL, the thread is created at the base of the stack * and cannot be swapped. */ kthread_t * ! thread_create( ! caddr_t stk, ! size_t stksize, ! void (*proc)(), ! void *arg, ! size_t len, ! proc_t *pp, ! int state, ! pri_t pri) { kthread_t *t; extern struct classfuncs sys_classfuncs; turnstile_t *ts; --- 317,328 ---- * * If stk is NULL, the thread is created at the base of the stack * and cannot be swapped. */ kthread_t * ! thread_create(caddr_t stk, size_t stksize, void (*proc)(), void *arg, ! size_t len, proc_t *pp, int state, pri_t pri) { kthread_t *t; extern struct classfuncs sys_classfuncs; turnstile_t *ts;
*** 889,899 **** /* * cleanup zombie threads that are on deathrow. */ void ! thread_reaper() { kthread_t *t, *l; callb_cpr_t cprinfo; /* --- 882,892 ---- /* * cleanup zombie threads that are on deathrow. */ void ! thread_reaper(void) { kthread_t *t, *l; callb_cpr_t cprinfo; /*
*** 1026,1043 **** /* * Install thread context ops for the current thread. */ void ! installctx( ! kthread_t *t, ! void *arg, ! void (*save)(void *), ! void (*restore)(void *), ! void (*fork)(void *, void *), ! void (*lwp_create)(void *, void *), ! void (*exit)(void *), void (*free)(void *, int)) { struct ctxop *ctx; ctx = kmem_alloc(sizeof (struct ctxop), KM_SLEEP); --- 1019,1031 ---- /* * Install thread context ops for the current thread. */ void ! installctx(kthread_t *t, void *arg, void (*save)(void *), ! void (*restore)(void *), void (*fork)(void *, void *), ! void (*lwp_create)(void *, void *), void (*exit)(void *), void (*free)(void *, int)) { struct ctxop *ctx; ctx = kmem_alloc(sizeof (struct ctxop), KM_SLEEP);
*** 1054,1071 **** /* * Remove the thread context ops from a thread. */ int ! removectx( ! kthread_t *t, ! void *arg, ! void (*save)(void *), ! void (*restore)(void *), ! void (*fork)(void *, void *), ! void (*lwp_create)(void *, void *), ! void (*exit)(void *), void (*free)(void *, int)) { struct ctxop *ctx, *prev_ctx; /* --- 1042,1054 ---- /* * Remove the thread context ops from a thread. */ int ! removectx(kthread_t *t, void *arg, void (*save)(void *), ! void (*restore)(void *), void (*fork)(void *, void *), ! void (*lwp_create)(void *, void *), void (*exit)(void *), void (*free)(void *, int)) { struct ctxop *ctx, *prev_ctx; /*
*** 1298,1308 **** * thread pointer so it may be resumed. * * Called by swtch() only at high spl. */ kthread_t * ! thread_unpin() { kthread_t *t = curthread; /* current thread */ kthread_t *itp; /* interrupted thread */ int i; /* interrupt level */ extern int intr_passivate(); --- 1281,1291 ---- * thread pointer so it may be resumed. * * Called by swtch() only at high spl. */ kthread_t * ! thread_unpin(void) { kthread_t *t = curthread; /* current thread */ kthread_t *itp; /* interrupted thread */ int i; /* interrupt level */ extern int intr_passivate();
*** 1346,1410 **** return (itp); } /* - * Create and initialize an interrupt thread. - * Returns non-zero on error. - * Called at spl7() or better. - */ - void - thread_create_intr(struct cpu *cp) - { - kthread_t *tp; - - tp = thread_create(NULL, 0, - (void (*)())thread_create_intr, NULL, 0, &p0, TS_ONPROC, 0); - - /* - * Set the thread in the TS_FREE state. The state will change - * to TS_ONPROC only while the interrupt is active. Think of these - * as being on a private free list for the CPU. Being TS_FREE keeps - * inactive interrupt threads out of debugger thread lists. - * - * We cannot call thread_create with TS_FREE because of the current - * checks there for ONPROC. Fix this when thread_create takes flags. - */ - THREAD_FREEINTR(tp, cp); - - /* - * Nobody should ever reference the credentials of an interrupt - * thread so make it NULL to catch any such references. - */ - tp->t_cred = NULL; - tp->t_flag |= T_INTR_THREAD; - tp->t_cpu = cp; - tp->t_bound_cpu = cp; - tp->t_disp_queue = cp->cpu_disp; - tp->t_affinitycnt = 1; - tp->t_preempt = 1; - - /* - * Don't make a user-requested binding on this thread so that - * the processor can be offlined. - */ - tp->t_bind_cpu = PBIND_NONE; /* no USER-requested binding */ - tp->t_bind_pset = PS_NONE; - - #if defined(__i386) || defined(__amd64) - tp->t_stk -= STACK_ALIGN; - *(tp->t_stk) = 0; /* terminate intr thread stack */ - #endif - - /* - * Link onto CPU's interrupt pool. - */ - tp->t_link = cp->cpu_intr_thread; - cp->cpu_intr_thread = tp; - } - - /* * TSD -- THREAD SPECIFIC DATA */ static kmutex_t tsd_mutex; /* linked list spin lock */ static uint_t tsd_nkeys; /* size of destructor array */ /* per-key destructor funcs */ --- 1329,1338 ----