xref: /illumos-gate/usr/src/uts/common/disp/thread.c (revision 2cb5535af222653abf2eba5c180ded4a7b85d8b6)
1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License (the "License").
6  * You may not use this file except in compliance with the License.
7  *
8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9  * or http://www.opensolaris.org/os/licensing.
10  * See the License for the specific language governing permissions
11  * and limitations under the License.
12  *
13  * When distributing Covered Code, include this CDDL HEADER in each
14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15  * If applicable, add the following below this CDDL HEADER, with the
16  * fields enclosed by brackets "[]" replaced with your own identifying
17  * information: Portions Copyright [yyyy] [name of copyright owner]
18  *
19  * CDDL HEADER END
20  */
21 
22 /*
23  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
24  * Use is subject to license terms.
25  */
26 
27 #pragma ident	"%Z%%M%	%I%	%E% SMI"
28 
29 #include <sys/types.h>
30 #include <sys/param.h>
31 #include <sys/sysmacros.h>
32 #include <sys/signal.h>
33 #include <sys/stack.h>
34 #include <sys/pcb.h>
35 #include <sys/user.h>
36 #include <sys/systm.h>
37 #include <sys/sysinfo.h>
38 #include <sys/errno.h>
39 #include <sys/cmn_err.h>
40 #include <sys/cred.h>
41 #include <sys/resource.h>
42 #include <sys/task.h>
43 #include <sys/project.h>
44 #include <sys/proc.h>
45 #include <sys/debug.h>
46 #include <sys/disp.h>
47 #include <sys/class.h>
48 #include <vm/seg_kmem.h>
49 #include <vm/seg_kp.h>
50 #include <sys/machlock.h>
51 #include <sys/kmem.h>
52 #include <sys/varargs.h>
53 #include <sys/turnstile.h>
54 #include <sys/poll.h>
55 #include <sys/vtrace.h>
56 #include <sys/callb.h>
57 #include <c2/audit.h>
58 #include <sys/tnf.h>
59 #include <sys/sobject.h>
60 #include <sys/cpupart.h>
61 #include <sys/pset.h>
62 #include <sys/door.h>
63 #include <sys/spl.h>
64 #include <sys/copyops.h>
65 #include <sys/rctl.h>
66 #include <sys/brand.h>
67 #include <sys/pool.h>
68 #include <sys/zone.h>
69 #include <sys/tsol/label.h>
70 #include <sys/tsol/tndb.h>
71 #include <sys/cpc_impl.h>
72 #include <sys/sdt.h>
73 #include <sys/reboot.h>
74 #include <sys/kdi.h>
75 #include <sys/schedctl.h>
76 #include <sys/waitq.h>
77 #include <sys/cpucaps.h>
78 #include <sys/kiconv.h>
79 
80 struct kmem_cache *thread_cache;	/* cache of free threads */
81 struct kmem_cache *lwp_cache;		/* cache of free lwps */
82 struct kmem_cache *turnstile_cache;	/* cache of free turnstiles */
83 
84 /*
85  * allthreads is only for use by kmem_readers.  All kernel loops can use
86  * the current thread as a start/end point.
87  */
88 static kthread_t *allthreads = &t0;	/* circular list of all threads */
89 
90 static kcondvar_t reaper_cv;		/* synchronization var */
91 kthread_t	*thread_deathrow;	/* circular list of reapable threads */
92 kthread_t	*lwp_deathrow;		/* circular list of reapable threads */
93 kmutex_t	reaplock;		/* protects lwp and thread deathrows */
94 int	thread_reapcnt = 0;		/* number of threads on deathrow */
95 int	lwp_reapcnt = 0;		/* number of lwps on deathrow */
96 int	reaplimit = 16;			/* delay reaping until reaplimit */
97 
98 thread_free_lock_t	*thread_free_lock;
99 					/* protects tick thread from reaper */
100 
101 extern int nthread;
102 
103 id_t	syscid;				/* system scheduling class ID */
104 void	*segkp_thread;			/* cookie for segkp pool */
105 
106 int lwp_cache_sz = 32;
107 int t_cache_sz = 8;
108 static kt_did_t next_t_id = 1;
109 
110 /*
111  * Min/Max stack sizes for stack size parameters
112  */
113 #define	MAX_STKSIZE	(32 * DEFAULTSTKSZ)
114 #define	MIN_STKSIZE	DEFAULTSTKSZ
115 
116 /*
117  * default_stksize overrides lwp_default_stksize if it is set.
118  */
119 int	default_stksize;
120 int	lwp_default_stksize;
121 
122 static zone_key_t zone_thread_key;
123 
124 /*
125  * forward declarations for internal thread specific data (tsd)
126  */
127 static void *tsd_realloc(void *, size_t, size_t);
128 
129 void thread_reaper(void);
130 
131 /*ARGSUSED*/
132 static int
133 turnstile_constructor(void *buf, void *cdrarg, int kmflags)
134 {
135 	bzero(buf, sizeof (turnstile_t));
136 	return (0);
137 }
138 
139 /*ARGSUSED*/
140 static void
141 turnstile_destructor(void *buf, void *cdrarg)
142 {
143 	turnstile_t *ts = buf;
144 
145 	ASSERT(ts->ts_free == NULL);
146 	ASSERT(ts->ts_waiters == 0);
147 	ASSERT(ts->ts_inheritor == NULL);
148 	ASSERT(ts->ts_sleepq[0].sq_first == NULL);
149 	ASSERT(ts->ts_sleepq[1].sq_first == NULL);
150 }
151 
152 void
153 thread_init(void)
154 {
155 	kthread_t *tp;
156 	extern char sys_name[];
157 	extern void idle();
158 	struct cpu *cpu = CPU;
159 	int i;
160 	kmutex_t *lp;
161 
162 	mutex_init(&reaplock, NULL, MUTEX_SPIN, (void *)ipltospl(DISP_LEVEL));
163 	thread_free_lock =
164 	    kmem_alloc(sizeof (thread_free_lock_t) * THREAD_FREE_NUM, KM_SLEEP);
165 	for (i = 0; i < THREAD_FREE_NUM; i++) {
166 		lp = &thread_free_lock[i].tf_lock;
167 		mutex_init(lp, NULL, MUTEX_DEFAULT, NULL);
168 	}
169 
170 #if defined(__i386) || defined(__amd64)
171 	thread_cache = kmem_cache_create("thread_cache", sizeof (kthread_t),
172 	    PTR24_ALIGN, NULL, NULL, NULL, NULL, NULL, 0);
173 
174 	/*
175 	 * "struct _klwp" includes a "struct pcb", which includes a
176 	 * "struct fpu", which needs to be 16-byte aligned on amd64
177 	 * (and even on i386 for fxsave/fxrstor).
178 	 */
179 	lwp_cache = kmem_cache_create("lwp_cache", sizeof (klwp_t),
180 	    16, NULL, NULL, NULL, NULL, NULL, 0);
181 #else
182 	/*
183 	 * Allocate thread structures from static_arena.  This prevents
184 	 * issues where a thread tries to relocate its own thread
185 	 * structure and touches it after the mapping has been suspended.
186 	 */
187 	thread_cache = kmem_cache_create("thread_cache", sizeof (kthread_t),
188 	    PTR24_ALIGN, NULL, NULL, NULL, NULL, static_arena, 0);
189 
190 	lwp_stk_cache_init();
191 
192 	lwp_cache = kmem_cache_create("lwp_cache", sizeof (klwp_t),
193 	    0, NULL, NULL, NULL, NULL, NULL, 0);
194 #endif
195 
196 	turnstile_cache = kmem_cache_create("turnstile_cache",
197 	    sizeof (turnstile_t), 0,
198 	    turnstile_constructor, turnstile_destructor, NULL, NULL, NULL, 0);
199 
200 	label_init();
201 	cred_init();
202 
203 	/*
204 	 * Initialize various resource management facilities.
205 	 */
206 	rctl_init();
207 	cpucaps_init();
208 	/*
209 	 * Zone_init() should be called before project_init() so that project ID
210 	 * for the first project is initialized correctly.
211 	 */
212 	zone_init();
213 	project_init();
214 	brand_init();
215 	kiconv_init();
216 	task_init();
217 	tcache_init();
218 	pool_init();
219 
220 	curthread->t_ts = kmem_cache_alloc(turnstile_cache, KM_SLEEP);
221 
222 	/*
223 	 * Originally, we had two parameters to set default stack
224 	 * size: one for lwp's (lwp_default_stksize), and one for
225 	 * kernel-only threads (DEFAULTSTKSZ, a.k.a. _defaultstksz).
226 	 * Now we have a third parameter that overrides both if it is
227 	 * set to a legal stack size, called default_stksize.
228 	 */
229 
230 	if (default_stksize == 0) {
231 		default_stksize = DEFAULTSTKSZ;
232 	} else if (default_stksize % PAGESIZE != 0 ||
233 	    default_stksize > MAX_STKSIZE ||
234 	    default_stksize < MIN_STKSIZE) {
235 		cmn_err(CE_WARN, "Illegal stack size. Using %d",
236 		    (int)DEFAULTSTKSZ);
237 		default_stksize = DEFAULTSTKSZ;
238 	} else {
239 		lwp_default_stksize = default_stksize;
240 	}
241 
242 	if (lwp_default_stksize == 0) {
243 		lwp_default_stksize = default_stksize;
244 	} else if (lwp_default_stksize % PAGESIZE != 0 ||
245 	    lwp_default_stksize > MAX_STKSIZE ||
246 	    lwp_default_stksize < MIN_STKSIZE) {
247 		cmn_err(CE_WARN, "Illegal stack size. Using %d",
248 		    default_stksize);
249 		lwp_default_stksize = default_stksize;
250 	}
251 
252 	segkp_lwp = segkp_cache_init(segkp, lwp_cache_sz,
253 	    lwp_default_stksize,
254 	    (KPD_NOWAIT | KPD_HASREDZONE | KPD_LOCKED));
255 
256 	segkp_thread = segkp_cache_init(segkp, t_cache_sz,
257 	    default_stksize, KPD_HASREDZONE | KPD_LOCKED | KPD_NO_ANON);
258 
259 	(void) getcid(sys_name, &syscid);
260 	curthread->t_cid = syscid;	/* current thread is t0 */
261 
262 	/*
263 	 * Set up the first CPU's idle thread.
264 	 * It runs whenever the CPU has nothing worthwhile to do.
265 	 */
266 	tp = thread_create(NULL, 0, idle, NULL, 0, &p0, TS_STOPPED, -1);
267 	cpu->cpu_idle_thread = tp;
268 	tp->t_preempt = 1;
269 	tp->t_disp_queue = cpu->cpu_disp;
270 	ASSERT(tp->t_disp_queue != NULL);
271 	tp->t_bound_cpu = cpu;
272 	tp->t_affinitycnt = 1;
273 
274 	/*
275 	 * Registering a thread in the callback table is usually
276 	 * done in the initialization code of the thread. In this
277 	 * case, we do it right after thread creation to avoid
278 	 * blocking idle thread while registering itself. It also
279 	 * avoids the possibility of reregistration in case a CPU
280 	 * restarts its idle thread.
281 	 */
282 	CALLB_CPR_INIT_SAFE(tp, "idle");
283 
284 	/*
285 	 * Create the thread_reaper daemon. From this point on, exited
286 	 * threads will get reaped.
287 	 */
288 	(void) thread_create(NULL, 0, (void (*)())thread_reaper,
289 	    NULL, 0, &p0, TS_RUN, minclsyspri);
290 
291 	/*
292 	 * Finish initializing the kernel memory allocator now that
293 	 * thread_create() is available.
294 	 */
295 	kmem_thread_init();
296 
297 	if (boothowto & RB_DEBUG)
298 		kdi_dvec_thravail();
299 }
300 
301 /*
302  * Create a thread.
303  *
304  * thread_create() blocks for memory if necessary.  It never fails.
305  *
306  * If stk is NULL, the thread is created at the base of the stack
307  * and cannot be swapped.
308  */
309 kthread_t *
310 thread_create(
311 	caddr_t	stk,
312 	size_t	stksize,
313 	void	(*proc)(),
314 	void	*arg,
315 	size_t	len,
316 	proc_t	 *pp,
317 	int	state,
318 	pri_t	pri)
319 {
320 	kthread_t *t;
321 	extern struct classfuncs sys_classfuncs;
322 	turnstile_t *ts;
323 
324 	/*
325 	 * Every thread keeps a turnstile around in case it needs to block.
326 	 * The only reason the turnstile is not simply part of the thread
327 	 * structure is that we may have to break the association whenever
328 	 * more than one thread blocks on a given synchronization object.
329 	 * From a memory-management standpoint, turnstiles are like the
330 	 * "attached mblks" that hang off dblks in the streams allocator.
331 	 */
332 	ts = kmem_cache_alloc(turnstile_cache, KM_SLEEP);
333 
334 	if (stk == NULL) {
335 		/*
336 		 * alloc both thread and stack in segkp chunk
337 		 */
338 
339 		if (stksize < default_stksize)
340 			stksize = default_stksize;
341 
342 		if (stksize == default_stksize) {
343 			stk = (caddr_t)segkp_cache_get(segkp_thread);
344 		} else {
345 			stksize = roundup(stksize, PAGESIZE);
346 			stk = (caddr_t)segkp_get(segkp, stksize,
347 			    (KPD_HASREDZONE | KPD_NO_ANON | KPD_LOCKED));
348 		}
349 
350 		ASSERT(stk != NULL);
351 
352 		/*
353 		 * The machine-dependent mutex code may require that
354 		 * thread pointers (since they may be used for mutex owner
355 		 * fields) have certain alignment requirements.
356 		 * PTR24_ALIGN is the size of the alignment quanta.
357 		 * XXX - assumes stack grows toward low addresses.
358 		 */
359 		if (stksize <= sizeof (kthread_t) + PTR24_ALIGN)
360 			cmn_err(CE_PANIC, "thread_create: proposed stack size"
361 			    " too small to hold thread.");
362 #ifdef STACK_GROWTH_DOWN
363 		stksize -= SA(sizeof (kthread_t) + PTR24_ALIGN - 1);
364 		stksize &= -PTR24_ALIGN;	/* make thread aligned */
365 		t = (kthread_t *)(stk + stksize);
366 		bzero(t, sizeof (kthread_t));
367 		if (audit_active)
368 			audit_thread_create(t);
369 		t->t_stk = stk + stksize;
370 		t->t_stkbase = stk;
371 #else	/* stack grows to larger addresses */
372 		stksize -= SA(sizeof (kthread_t));
373 		t = (kthread_t *)(stk);
374 		bzero(t, sizeof (kthread_t));
375 		t->t_stk = stk + sizeof (kthread_t);
376 		t->t_stkbase = stk + stksize + sizeof (kthread_t);
377 #endif	/* STACK_GROWTH_DOWN */
378 		t->t_flag |= T_TALLOCSTK;
379 		t->t_swap = stk;
380 	} else {
381 		t = kmem_cache_alloc(thread_cache, KM_SLEEP);
382 		bzero(t, sizeof (kthread_t));
383 		ASSERT(((uintptr_t)t & (PTR24_ALIGN - 1)) == 0);
384 		if (audit_active)
385 			audit_thread_create(t);
386 		/*
387 		 * Initialize t_stk to the kernel stack pointer to use
388 		 * upon entry to the kernel
389 		 */
390 #ifdef STACK_GROWTH_DOWN
391 		t->t_stk = stk + stksize;
392 		t->t_stkbase = stk;
393 #else
394 		t->t_stk = stk;			/* 3b2-like */
395 		t->t_stkbase = stk + stksize;
396 #endif /* STACK_GROWTH_DOWN */
397 	}
398 
399 	/* set default stack flag */
400 	if (stksize == lwp_default_stksize)
401 		t->t_flag |= T_DFLTSTK;
402 
403 	t->t_ts = ts;
404 
405 	/*
406 	 * p_cred could be NULL if it thread_create is called before cred_init
407 	 * is called in main.
408 	 */
409 	mutex_enter(&pp->p_crlock);
410 	if (pp->p_cred)
411 		crhold(t->t_cred = pp->p_cred);
412 	mutex_exit(&pp->p_crlock);
413 	t->t_start = gethrestime_sec();
414 	t->t_startpc = proc;
415 	t->t_procp = pp;
416 	t->t_clfuncs = &sys_classfuncs.thread;
417 	t->t_cid = syscid;
418 	t->t_pri = pri;
419 	t->t_stime = lbolt;
420 	t->t_schedflag = TS_LOAD | TS_DONT_SWAP;
421 	t->t_bind_cpu = PBIND_NONE;
422 	t->t_bind_pset = PS_NONE;
423 	t->t_plockp = &pp->p_lock;
424 	t->t_copyops = NULL;
425 	t->t_taskq = NULL;
426 	t->t_anttime = 0;
427 	t->t_hatdepth = 0;
428 
429 	t->t_dtrace_vtime = 1;	/* assure vtimestamp is always non-zero */
430 
431 	CPU_STATS_ADDQ(CPU, sys, nthreads, 1);
432 #ifndef NPROBE
433 	/* Kernel probe */
434 	tnf_thread_create(t);
435 #endif /* NPROBE */
436 	LOCK_INIT_CLEAR(&t->t_lock);
437 
438 	/*
439 	 * Callers who give us a NULL proc must do their own
440 	 * stack initialization.  e.g. lwp_create()
441 	 */
442 	if (proc != NULL) {
443 		t->t_stk = thread_stk_init(t->t_stk);
444 		thread_load(t, proc, arg, len);
445 	}
446 
447 	/*
448 	 * Put a hold on project0. If this thread is actually in a
449 	 * different project, then t_proj will be changed later in
450 	 * lwp_create().  All kernel-only threads must be in project 0.
451 	 */
452 	t->t_proj = project_hold(proj0p);
453 
454 	lgrp_affinity_init(&t->t_lgrp_affinity);
455 
456 	mutex_enter(&pidlock);
457 	nthread++;
458 	t->t_did = next_t_id++;
459 	t->t_prev = curthread->t_prev;
460 	t->t_next = curthread;
461 
462 	/*
463 	 * Add the thread to the list of all threads, and initialize
464 	 * its t_cpu pointer.  We need to block preemption since
465 	 * cpu_offline walks the thread list looking for threads
466 	 * with t_cpu pointing to the CPU being offlined.  We want
467 	 * to make sure that the list is consistent and that if t_cpu
468 	 * is set, the thread is on the list.
469 	 */
470 	kpreempt_disable();
471 	curthread->t_prev->t_next = t;
472 	curthread->t_prev = t;
473 
474 	/*
475 	 * Threads should never have a NULL t_cpu pointer so assign it
476 	 * here.  If the thread is being created with state TS_RUN a
477 	 * better CPU may be chosen when it is placed on the run queue.
478 	 *
479 	 * We need to keep kernel preemption disabled when setting all
480 	 * three fields to keep them in sync.  Also, always create in
481 	 * the default partition since that's where kernel threads go
482 	 * (if this isn't a kernel thread, t_cpupart will be changed
483 	 * in lwp_create before setting the thread runnable).
484 	 */
485 	t->t_cpupart = &cp_default;
486 
487 	/*
488 	 * For now, affiliate this thread with the root lgroup.
489 	 * Since the kernel does not (presently) allocate its memory
490 	 * in a locality aware fashion, the root is an appropriate home.
491 	 * If this thread is later associated with an lwp, it will have
492 	 * it's lgroup re-assigned at that time.
493 	 */
494 	lgrp_move_thread(t, &cp_default.cp_lgrploads[LGRP_ROOTID], 1);
495 
496 	/*
497 	 * Inherit the current cpu.  If this cpu isn't part of the chosen
498 	 * lgroup, a new cpu will be chosen by cpu_choose when the thread
499 	 * is ready to run.
500 	 */
501 	if (CPU->cpu_part == &cp_default)
502 		t->t_cpu = CPU;
503 	else
504 		t->t_cpu = disp_lowpri_cpu(cp_default.cp_cpulist, t->t_lpl,
505 		    t->t_pri, NULL);
506 
507 	t->t_disp_queue = t->t_cpu->cpu_disp;
508 	kpreempt_enable();
509 
510 	/*
511 	 * Initialize thread state and the dispatcher lock pointer.
512 	 * Need to hold onto pidlock to block allthreads walkers until
513 	 * the state is set.
514 	 */
515 	switch (state) {
516 	case TS_RUN:
517 		curthread->t_oldspl = splhigh();	/* get dispatcher spl */
518 		THREAD_SET_STATE(t, TS_STOPPED, &transition_lock);
519 		CL_SETRUN(t);
520 		thread_unlock(t);
521 		break;
522 
523 	case TS_ONPROC:
524 		THREAD_ONPROC(t, t->t_cpu);
525 		break;
526 
527 	case TS_FREE:
528 		/*
529 		 * Free state will be used for intr threads.
530 		 * The interrupt routine must set the thread dispatcher
531 		 * lock pointer (t_lockp) if starting on a CPU
532 		 * other than the current one.
533 		 */
534 		THREAD_FREEINTR(t, CPU);
535 		break;
536 
537 	case TS_STOPPED:
538 		THREAD_SET_STATE(t, TS_STOPPED, &stop_lock);
539 		break;
540 
541 	default:			/* TS_SLEEP, TS_ZOMB or TS_TRANS */
542 		cmn_err(CE_PANIC, "thread_create: invalid state %d", state);
543 	}
544 	mutex_exit(&pidlock);
545 	return (t);
546 }
547 
548 /*
549  * Move thread to project0 and take care of project reference counters.
550  */
551 void
552 thread_rele(kthread_t *t)
553 {
554 	kproject_t *kpj;
555 
556 	thread_lock(t);
557 
558 	ASSERT(t == curthread || t->t_state == TS_FREE || t->t_procp == &p0);
559 	kpj = ttoproj(t);
560 	t->t_proj = proj0p;
561 
562 	thread_unlock(t);
563 
564 	if (kpj != proj0p) {
565 		project_rele(kpj);
566 		(void) project_hold(proj0p);
567 	}
568 }
569 
570 void
571 thread_exit(void)
572 {
573 	kthread_t *t = curthread;
574 
575 	if ((t->t_proc_flag & TP_ZTHREAD) != 0)
576 		cmn_err(CE_PANIC, "thread_exit: zthread_exit() not called");
577 
578 	tsd_exit();		/* Clean up this thread's TSD */
579 
580 	kcpc_passivate();	/* clean up performance counter state */
581 
582 	/*
583 	 * No kernel thread should have called poll() without arranging
584 	 * calling pollcleanup() here.
585 	 */
586 	ASSERT(t->t_pollstate == NULL);
587 	ASSERT(t->t_schedctl == NULL);
588 	if (t->t_door)
589 		door_slam();	/* in case thread did an upcall */
590 
591 #ifndef NPROBE
592 	/* Kernel probe */
593 	if (t->t_tnf_tpdp)
594 		tnf_thread_exit();
595 #endif /* NPROBE */
596 
597 	thread_rele(t);
598 	t->t_preempt++;
599 
600 	/*
601 	 * remove thread from the all threads list so that
602 	 * death-row can use the same pointers.
603 	 */
604 	mutex_enter(&pidlock);
605 	t->t_next->t_prev = t->t_prev;
606 	t->t_prev->t_next = t->t_next;
607 	ASSERT(allthreads != t);	/* t0 never exits */
608 	cv_broadcast(&t->t_joincv);	/* wake up anyone in thread_join */
609 	mutex_exit(&pidlock);
610 
611 	if (t->t_ctx != NULL)
612 		exitctx(t);
613 	if (t->t_procp->p_pctx != NULL)
614 		exitpctx(t->t_procp);
615 
616 	t->t_state = TS_ZOMB;	/* set zombie thread */
617 
618 	swtch_from_zombie();	/* give up the CPU */
619 	/* NOTREACHED */
620 }
621 
622 /*
623  * Check to see if the specified thread is active (defined as being on
624  * the thread list).  This is certainly a slow way to do this; if there's
625  * ever a reason to speed it up, we could maintain a hash table of active
626  * threads indexed by their t_did.
627  */
628 static kthread_t *
629 did_to_thread(kt_did_t tid)
630 {
631 	kthread_t *t;
632 
633 	ASSERT(MUTEX_HELD(&pidlock));
634 	for (t = curthread->t_next; t != curthread; t = t->t_next) {
635 		if (t->t_did == tid)
636 			break;
637 	}
638 	if (t->t_did == tid)
639 		return (t);
640 	else
641 		return (NULL);
642 }
643 
644 /*
645  * Wait for specified thread to exit.  Returns immediately if the thread
646  * could not be found, meaning that it has either already exited or never
647  * existed.
648  */
649 void
650 thread_join(kt_did_t tid)
651 {
652 	kthread_t *t;
653 
654 	ASSERT(tid != curthread->t_did);
655 	ASSERT(tid != t0.t_did);
656 
657 	mutex_enter(&pidlock);
658 	/*
659 	 * Make sure we check that the thread is on the thread list
660 	 * before blocking on it; otherwise we could end up blocking on
661 	 * a cv that's already been freed.  In other words, don't cache
662 	 * the thread pointer across calls to cv_wait.
663 	 *
664 	 * The choice of loop invariant means that whenever a thread
665 	 * is taken off the allthreads list, a cv_broadcast must be
666 	 * performed on that thread's t_joincv to wake up any waiters.
667 	 * The broadcast doesn't have to happen right away, but it
668 	 * shouldn't be postponed indefinitely (e.g., by doing it in
669 	 * thread_free which may only be executed when the deathrow
670 	 * queue is processed.
671 	 */
672 	while (t = did_to_thread(tid))
673 		cv_wait(&t->t_joincv, &pidlock);
674 	mutex_exit(&pidlock);
675 }
676 
677 void
678 thread_free_prevent(kthread_t *t)
679 {
680 	kmutex_t *lp;
681 
682 	lp = &thread_free_lock[THREAD_FREE_HASH(t)].tf_lock;
683 	mutex_enter(lp);
684 }
685 
686 void
687 thread_free_allow(kthread_t *t)
688 {
689 	kmutex_t *lp;
690 
691 	lp = &thread_free_lock[THREAD_FREE_HASH(t)].tf_lock;
692 	mutex_exit(lp);
693 }
694 
695 static void
696 thread_free_barrier(kthread_t *t)
697 {
698 	kmutex_t *lp;
699 
700 	lp = &thread_free_lock[THREAD_FREE_HASH(t)].tf_lock;
701 	mutex_enter(lp);
702 	mutex_exit(lp);
703 }
704 
705 void
706 thread_free(kthread_t *t)
707 {
708 	ASSERT(t != &t0 && t->t_state == TS_FREE);
709 	ASSERT(t->t_door == NULL);
710 	ASSERT(t->t_schedctl == NULL);
711 	ASSERT(t->t_pollstate == NULL);
712 
713 	t->t_pri = 0;
714 	t->t_pc = 0;
715 	t->t_sp = 0;
716 	t->t_wchan0 = NULL;
717 	t->t_wchan = NULL;
718 	if (t->t_cred != NULL) {
719 		crfree(t->t_cred);
720 		t->t_cred = 0;
721 	}
722 	if (t->t_pdmsg) {
723 		kmem_free(t->t_pdmsg, strlen(t->t_pdmsg) + 1);
724 		t->t_pdmsg = NULL;
725 	}
726 	if (audit_active)
727 		audit_thread_free(t);
728 #ifndef NPROBE
729 	if (t->t_tnf_tpdp)
730 		tnf_thread_free(t);
731 #endif /* NPROBE */
732 	if (t->t_cldata) {
733 		CL_EXITCLASS(t->t_cid, (caddr_t *)t->t_cldata);
734 	}
735 	if (t->t_rprof != NULL) {
736 		kmem_free(t->t_rprof, sizeof (*t->t_rprof));
737 		t->t_rprof = NULL;
738 	}
739 	t->t_lockp = NULL;	/* nothing should try to lock this thread now */
740 	if (t->t_lwp)
741 		lwp_freeregs(t->t_lwp, 0);
742 	if (t->t_ctx)
743 		freectx(t, 0);
744 	t->t_stk = NULL;
745 	if (t->t_lwp)
746 		lwp_stk_fini(t->t_lwp);
747 	lock_clear(&t->t_lock);
748 
749 	if (t->t_ts->ts_waiters > 0)
750 		panic("thread_free: turnstile still active");
751 
752 	kmem_cache_free(turnstile_cache, t->t_ts);
753 
754 	free_afd(&t->t_activefd);
755 
756 	/*
757 	 * Barrier for the tick accounting code.  The tick accounting code
758 	 * holds this lock to keep the thread from going away while it's
759 	 * looking at it.
760 	 */
761 	thread_free_barrier(t);
762 
763 	ASSERT(ttoproj(t) == proj0p);
764 	project_rele(ttoproj(t));
765 
766 	lgrp_affinity_free(&t->t_lgrp_affinity);
767 
768 	/*
769 	 * Free thread struct and its stack.
770 	 */
771 	if (t->t_flag & T_TALLOCSTK) {
772 		/* thread struct is embedded in stack */
773 		segkp_release(segkp, t->t_swap);
774 		mutex_enter(&pidlock);
775 		nthread--;
776 		mutex_exit(&pidlock);
777 	} else {
778 		if (t->t_swap) {
779 			segkp_release(segkp, t->t_swap);
780 			t->t_swap = NULL;
781 		}
782 		if (t->t_lwp) {
783 			kmem_cache_free(lwp_cache, t->t_lwp);
784 			t->t_lwp = NULL;
785 		}
786 		mutex_enter(&pidlock);
787 		nthread--;
788 		mutex_exit(&pidlock);
789 		kmem_cache_free(thread_cache, t);
790 	}
791 }
792 
793 /*
794  * Removes threads associated with the given zone from a deathrow queue.
795  * tp is a pointer to the head of the deathrow queue, and countp is a
796  * pointer to the current deathrow count.  Returns a linked list of
797  * threads removed from the list.
798  */
799 static kthread_t *
800 thread_zone_cleanup(kthread_t **tp, int *countp, zoneid_t zoneid)
801 {
802 	kthread_t *tmp, *list = NULL;
803 	cred_t *cr;
804 
805 	ASSERT(MUTEX_HELD(&reaplock));
806 	while (*tp != NULL) {
807 		if ((cr = (*tp)->t_cred) != NULL && crgetzoneid(cr) == zoneid) {
808 			tmp = *tp;
809 			*tp = tmp->t_forw;
810 			tmp->t_forw = list;
811 			list = tmp;
812 			(*countp)--;
813 		} else {
814 			tp = &(*tp)->t_forw;
815 		}
816 	}
817 	return (list);
818 }
819 
820 static void
821 thread_reap_list(kthread_t *t)
822 {
823 	kthread_t *next;
824 
825 	while (t != NULL) {
826 		next = t->t_forw;
827 		thread_free(t);
828 		t = next;
829 	}
830 }
831 
832 /* ARGSUSED */
833 static void
834 thread_zone_destroy(zoneid_t zoneid, void *unused)
835 {
836 	kthread_t *t, *l;
837 
838 	mutex_enter(&reaplock);
839 	/*
840 	 * Pull threads and lwps associated with zone off deathrow lists.
841 	 */
842 	t = thread_zone_cleanup(&thread_deathrow, &thread_reapcnt, zoneid);
843 	l = thread_zone_cleanup(&lwp_deathrow, &lwp_reapcnt, zoneid);
844 	mutex_exit(&reaplock);
845 
846 	/*
847 	 * Guard against race condition in mutex_owner_running:
848 	 * 	thread=owner(mutex)
849 	 * 	<interrupt>
850 	 * 				thread exits mutex
851 	 * 				thread exits
852 	 * 				thread reaped
853 	 * 				thread struct freed
854 	 * cpu = thread->t_cpu <- BAD POINTER DEREFERENCE.
855 	 * A cross call to all cpus will cause the interrupt handler
856 	 * to reset the PC if it is in mutex_owner_running, refreshing
857 	 * stale thread pointers.
858 	 */
859 	mutex_sync();   /* sync with mutex code */
860 
861 	/*
862 	 * Reap threads
863 	 */
864 	thread_reap_list(t);
865 
866 	/*
867 	 * Reap lwps
868 	 */
869 	thread_reap_list(l);
870 }
871 
872 /*
873  * cleanup zombie threads that are on deathrow.
874  */
875 void
876 thread_reaper()
877 {
878 	kthread_t *t, *l;
879 	callb_cpr_t cprinfo;
880 
881 	/*
882 	 * Register callback to clean up threads when zone is destroyed.
883 	 */
884 	zone_key_create(&zone_thread_key, NULL, NULL, thread_zone_destroy);
885 
886 	CALLB_CPR_INIT(&cprinfo, &reaplock, callb_generic_cpr, "t_reaper");
887 	for (;;) {
888 		mutex_enter(&reaplock);
889 		while (thread_deathrow == NULL && lwp_deathrow == NULL) {
890 			CALLB_CPR_SAFE_BEGIN(&cprinfo);
891 			cv_wait(&reaper_cv, &reaplock);
892 			CALLB_CPR_SAFE_END(&cprinfo, &reaplock);
893 		}
894 		/*
895 		 * mutex_sync() needs to be called when reaping, but
896 		 * not too often.  We limit reaping rate to once
897 		 * per second.  Reaplimit is max rate at which threads can
898 		 * be freed. Does not impact thread destruction/creation.
899 		 */
900 		t = thread_deathrow;
901 		l = lwp_deathrow;
902 		thread_deathrow = NULL;
903 		lwp_deathrow = NULL;
904 		thread_reapcnt = 0;
905 		lwp_reapcnt = 0;
906 		mutex_exit(&reaplock);
907 
908 		/*
909 		 * Guard against race condition in mutex_owner_running:
910 		 * 	thread=owner(mutex)
911 		 * 	<interrupt>
912 		 * 				thread exits mutex
913 		 * 				thread exits
914 		 * 				thread reaped
915 		 * 				thread struct freed
916 		 * cpu = thread->t_cpu <- BAD POINTER DEREFERENCE.
917 		 * A cross call to all cpus will cause the interrupt handler
918 		 * to reset the PC if it is in mutex_owner_running, refreshing
919 		 * stale thread pointers.
920 		 */
921 		mutex_sync();   /* sync with mutex code */
922 		/*
923 		 * Reap threads
924 		 */
925 		thread_reap_list(t);
926 
927 		/*
928 		 * Reap lwps
929 		 */
930 		thread_reap_list(l);
931 		delay(hz);
932 	}
933 }
934 
935 /*
936  * This is called by lwpcreate, etc.() to put a lwp_deathrow thread onto
937  * thread_deathrow. The thread's state is changed already TS_FREE to indicate
938  * that is reapable. The thread already holds the reaplock, and was already
939  * freed.
940  */
941 void
942 reapq_move_lq_to_tq(kthread_t *t)
943 {
944 	ASSERT(t->t_state == TS_FREE);
945 	ASSERT(MUTEX_HELD(&reaplock));
946 	t->t_forw = thread_deathrow;
947 	thread_deathrow = t;
948 	thread_reapcnt++;
949 	if (lwp_reapcnt + thread_reapcnt > reaplimit)
950 		cv_signal(&reaper_cv);  /* wake the reaper */
951 }
952 
953 /*
954  * This is called by resume() to put a zombie thread onto deathrow.
955  * The thread's state is changed to TS_FREE to indicate that is reapable.
956  * This is called from the idle thread so it must not block - just spin.
957  */
958 void
959 reapq_add(kthread_t *t)
960 {
961 	mutex_enter(&reaplock);
962 
963 	/*
964 	 * lwp_deathrow contains only threads with lwp linkage
965 	 * that are of the default stacksize. Anything else goes
966 	 * on thread_deathrow.
967 	 */
968 	if (ttolwp(t) && (t->t_flag & T_DFLTSTK)) {
969 		t->t_forw = lwp_deathrow;
970 		lwp_deathrow = t;
971 		lwp_reapcnt++;
972 	} else {
973 		t->t_forw = thread_deathrow;
974 		thread_deathrow = t;
975 		thread_reapcnt++;
976 	}
977 	if (lwp_reapcnt + thread_reapcnt > reaplimit)
978 		cv_signal(&reaper_cv);	/* wake the reaper */
979 	t->t_state = TS_FREE;
980 	lock_clear(&t->t_lock);
981 
982 	/*
983 	 * Before we return, we need to grab and drop the thread lock for
984 	 * the dead thread.  At this point, the current thread is the idle
985 	 * thread, and the dead thread's CPU lock points to the current
986 	 * CPU -- and we must grab and drop the lock to synchronize with
987 	 * a racing thread walking a blocking chain that the zombie thread
988 	 * was recently in.  By this point, that blocking chain is (by
989 	 * definition) stale:  the dead thread is not holding any locks, and
990 	 * is therefore not in any blocking chains -- but if we do not regrab
991 	 * our lock before freeing the dead thread's data structures, the
992 	 * thread walking the (stale) blocking chain will die on memory
993 	 * corruption when it attempts to drop the dead thread's lock.  We
994 	 * only need do this once because there is no way for the dead thread
995 	 * to ever again be on a blocking chain:  once we have grabbed and
996 	 * dropped the thread lock, we are guaranteed that anyone that could
997 	 * have seen this thread in a blocking chain can no longer see it.
998 	 */
999 	thread_lock(t);
1000 	thread_unlock(t);
1001 
1002 	mutex_exit(&reaplock);
1003 }
1004 
1005 /*
1006  * Install thread context ops for the current thread.
1007  */
1008 void
1009 installctx(
1010 	kthread_t *t,
1011 	void	*arg,
1012 	void	(*save)(void *),
1013 	void	(*restore)(void *),
1014 	void	(*fork)(void *, void *),
1015 	void	(*lwp_create)(void *, void *),
1016 	void	(*exit)(void *),
1017 	void	(*free)(void *, int))
1018 {
1019 	struct ctxop *ctx;
1020 
1021 	ctx = kmem_alloc(sizeof (struct ctxop), KM_SLEEP);
1022 	ctx->save_op = save;
1023 	ctx->restore_op = restore;
1024 	ctx->fork_op = fork;
1025 	ctx->lwp_create_op = lwp_create;
1026 	ctx->exit_op = exit;
1027 	ctx->free_op = free;
1028 	ctx->arg = arg;
1029 	ctx->next = t->t_ctx;
1030 	t->t_ctx = ctx;
1031 }
1032 
1033 /*
1034  * Remove the thread context ops from a thread.
1035  */
1036 int
1037 removectx(
1038 	kthread_t *t,
1039 	void	*arg,
1040 	void	(*save)(void *),
1041 	void	(*restore)(void *),
1042 	void	(*fork)(void *, void *),
1043 	void	(*lwp_create)(void *, void *),
1044 	void	(*exit)(void *),
1045 	void	(*free)(void *, int))
1046 {
1047 	struct ctxop *ctx, *prev_ctx;
1048 
1049 	/*
1050 	 * The incoming kthread_t (which is the thread for which the
1051 	 * context ops will be removed) should be one of the following:
1052 	 *
1053 	 * a) the current thread,
1054 	 *
1055 	 * b) a thread of a process that's being forked (SIDL),
1056 	 *
1057 	 * c) a thread that belongs to the same process as the current
1058 	 *    thread and for which the current thread is the agent thread,
1059 	 *
1060 	 * d) a thread that is TS_STOPPED which is indicative of it
1061 	 *    being (if curthread is not an agent) a thread being created
1062 	 *    as part of an lwp creation.
1063 	 */
1064 	ASSERT(t == curthread || ttoproc(t)->p_stat == SIDL ||
1065 	    ttoproc(t)->p_agenttp == curthread || t->t_state == TS_STOPPED);
1066 
1067 	/*
1068 	 * Serialize modifications to t->t_ctx to prevent the agent thread
1069 	 * and the target thread from racing with each other during lwp exit.
1070 	 */
1071 	mutex_enter(&t->t_ctx_lock);
1072 	prev_ctx = NULL;
1073 	for (ctx = t->t_ctx; ctx != NULL; ctx = ctx->next) {
1074 		if (ctx->save_op == save && ctx->restore_op == restore &&
1075 		    ctx->fork_op == fork && ctx->lwp_create_op == lwp_create &&
1076 		    ctx->exit_op == exit && ctx->free_op == free &&
1077 		    ctx->arg == arg) {
1078 			if (prev_ctx)
1079 				prev_ctx->next = ctx->next;
1080 			else
1081 				t->t_ctx = ctx->next;
1082 			mutex_exit(&t->t_ctx_lock);
1083 			if (ctx->free_op != NULL)
1084 				(ctx->free_op)(ctx->arg, 0);
1085 			kmem_free(ctx, sizeof (struct ctxop));
1086 			return (1);
1087 		}
1088 		prev_ctx = ctx;
1089 	}
1090 	mutex_exit(&t->t_ctx_lock);
1091 
1092 	return (0);
1093 }
1094 
1095 void
1096 savectx(kthread_t *t)
1097 {
1098 	struct ctxop *ctx;
1099 
1100 	ASSERT(t == curthread);
1101 	for (ctx = t->t_ctx; ctx != 0; ctx = ctx->next)
1102 		if (ctx->save_op != NULL)
1103 			(ctx->save_op)(ctx->arg);
1104 }
1105 
1106 void
1107 restorectx(kthread_t *t)
1108 {
1109 	struct ctxop *ctx;
1110 
1111 	ASSERT(t == curthread);
1112 	for (ctx = t->t_ctx; ctx != 0; ctx = ctx->next)
1113 		if (ctx->restore_op != NULL)
1114 			(ctx->restore_op)(ctx->arg);
1115 }
1116 
1117 void
1118 forkctx(kthread_t *t, kthread_t *ct)
1119 {
1120 	struct ctxop *ctx;
1121 
1122 	for (ctx = t->t_ctx; ctx != NULL; ctx = ctx->next)
1123 		if (ctx->fork_op != NULL)
1124 			(ctx->fork_op)(t, ct);
1125 }
1126 
1127 /*
1128  * Note that this operator is only invoked via the _lwp_create
1129  * system call.  The system may have other reasons to create lwps
1130  * e.g. the agent lwp or the doors unreferenced lwp.
1131  */
1132 void
1133 lwp_createctx(kthread_t *t, kthread_t *ct)
1134 {
1135 	struct ctxop *ctx;
1136 
1137 	for (ctx = t->t_ctx; ctx != NULL; ctx = ctx->next)
1138 		if (ctx->lwp_create_op != NULL)
1139 			(ctx->lwp_create_op)(t, ct);
1140 }
1141 
1142 /*
1143  * exitctx is called from thread_exit() and lwp_exit() to perform any actions
1144  * needed when the thread/LWP leaves the processor for the last time. This
1145  * routine is not intended to deal with freeing memory; freectx() is used for
1146  * that purpose during thread_free(). This routine is provided to allow for
1147  * clean-up that can't wait until thread_free().
1148  */
1149 void
1150 exitctx(kthread_t *t)
1151 {
1152 	struct ctxop *ctx;
1153 
1154 	for (ctx = t->t_ctx; ctx != NULL; ctx = ctx->next)
1155 		if (ctx->exit_op != NULL)
1156 			(ctx->exit_op)(t);
1157 }
1158 
1159 /*
1160  * freectx is called from thread_free() and exec() to get
1161  * rid of old thread context ops.
1162  */
1163 void
1164 freectx(kthread_t *t, int isexec)
1165 {
1166 	struct ctxop *ctx;
1167 
1168 	while ((ctx = t->t_ctx) != NULL) {
1169 		t->t_ctx = ctx->next;
1170 		if (ctx->free_op != NULL)
1171 			(ctx->free_op)(ctx->arg, isexec);
1172 		kmem_free(ctx, sizeof (struct ctxop));
1173 	}
1174 }
1175 
1176 /*
1177  * freectx_ctx is called from lwp_create() when lwp is reused from
1178  * lwp_deathrow and its thread structure is added to thread_deathrow.
1179  * The thread structure to which this ctx was attached may be already
1180  * freed by the thread reaper so free_op implementations shouldn't rely
1181  * on thread structure to which this ctx was attached still being around.
1182  */
1183 void
1184 freectx_ctx(struct ctxop *ctx)
1185 {
1186 	struct ctxop *nctx;
1187 
1188 	ASSERT(ctx != NULL);
1189 
1190 	do {
1191 		nctx = ctx->next;
1192 		if (ctx->free_op != NULL)
1193 			(ctx->free_op)(ctx->arg, 0);
1194 		kmem_free(ctx, sizeof (struct ctxop));
1195 	} while ((ctx = nctx) != NULL);
1196 }
1197 
1198 /*
1199  * Set the thread running; arrange for it to be swapped in if necessary.
1200  */
1201 void
1202 setrun_locked(kthread_t *t)
1203 {
1204 	ASSERT(THREAD_LOCK_HELD(t));
1205 	if (t->t_state == TS_SLEEP) {
1206 		/*
1207 		 * Take off sleep queue.
1208 		 */
1209 		SOBJ_UNSLEEP(t->t_sobj_ops, t);
1210 	} else if (t->t_state & (TS_RUN | TS_ONPROC)) {
1211 		/*
1212 		 * Already on dispatcher queue.
1213 		 */
1214 		return;
1215 	} else if (t->t_state == TS_WAIT) {
1216 		waitq_setrun(t);
1217 	} else if (t->t_state == TS_STOPPED) {
1218 		/*
1219 		 * All of the sending of SIGCONT (TC_XSTART) and /proc
1220 		 * (TC_PSTART) and lwp_continue() (TC_CSTART) must have
1221 		 * requested that the thread be run.
1222 		 * Just calling setrun() is not sufficient to set a stopped
1223 		 * thread running.  TP_TXSTART is always set if the thread
1224 		 * is not stopped by a jobcontrol stop signal.
1225 		 * TP_TPSTART is always set if /proc is not controlling it.
1226 		 * TP_TCSTART is always set if lwp_suspend() didn't stop it.
1227 		 * The thread won't be stopped unless one of these
1228 		 * three mechanisms did it.
1229 		 *
1230 		 * These flags must be set before calling setrun_locked(t).
1231 		 * They can't be passed as arguments because the streams
1232 		 * code calls setrun() indirectly and the mechanism for
1233 		 * doing so admits only one argument.  Note that the
1234 		 * thread must be locked in order to change t_schedflags.
1235 		 */
1236 		if ((t->t_schedflag & TS_ALLSTART) != TS_ALLSTART)
1237 			return;
1238 		/*
1239 		 * Process is no longer stopped (a thread is running).
1240 		 */
1241 		t->t_whystop = 0;
1242 		t->t_whatstop = 0;
1243 		/*
1244 		 * Strictly speaking, we do not have to clear these
1245 		 * flags here; they are cleared on entry to stop().
1246 		 * However, they are confusing when doing kernel
1247 		 * debugging or when they are revealed by ps(1).
1248 		 */
1249 		t->t_schedflag &= ~TS_ALLSTART;
1250 		THREAD_TRANSITION(t);	/* drop stopped-thread lock */
1251 		ASSERT(t->t_lockp == &transition_lock);
1252 		ASSERT(t->t_wchan0 == NULL && t->t_wchan == NULL);
1253 		/*
1254 		 * Let the class put the process on the dispatcher queue.
1255 		 */
1256 		CL_SETRUN(t);
1257 	}
1258 }
1259 
1260 void
1261 setrun(kthread_t *t)
1262 {
1263 	thread_lock(t);
1264 	setrun_locked(t);
1265 	thread_unlock(t);
1266 }
1267 
1268 /*
1269  * Unpin an interrupted thread.
1270  *	When an interrupt occurs, the interrupt is handled on the stack
1271  *	of an interrupt thread, taken from a pool linked to the CPU structure.
1272  *
1273  *	When swtch() is switching away from an interrupt thread because it
1274  *	blocked or was preempted, this routine is called to complete the
1275  *	saving of the interrupted thread state, and returns the interrupted
1276  *	thread pointer so it may be resumed.
1277  *
1278  *	Called by swtch() only at high spl.
1279  */
1280 kthread_t *
1281 thread_unpin()
1282 {
1283 	kthread_t	*t = curthread;	/* current thread */
1284 	kthread_t	*itp;		/* interrupted thread */
1285 	int		i;		/* interrupt level */
1286 	extern int	intr_passivate();
1287 
1288 	ASSERT(t->t_intr != NULL);
1289 
1290 	itp = t->t_intr;		/* interrupted thread */
1291 	t->t_intr = NULL;		/* clear interrupt ptr */
1292 
1293 	/*
1294 	 * Get state from interrupt thread for the one
1295 	 * it interrupted.
1296 	 */
1297 
1298 	i = intr_passivate(t, itp);
1299 
1300 	TRACE_5(TR_FAC_INTR, TR_INTR_PASSIVATE,
1301 	    "intr_passivate:level %d curthread %p (%T) ithread %p (%T)",
1302 	    i, t, t, itp, itp);
1303 
1304 	/*
1305 	 * Dissociate the current thread from the interrupted thread's LWP.
1306 	 */
1307 	t->t_lwp = NULL;
1308 
1309 	/*
1310 	 * Interrupt handlers above the level that spinlocks block must
1311 	 * not block.
1312 	 */
1313 #if DEBUG
1314 	if (i < 0 || i > LOCK_LEVEL)
1315 		cmn_err(CE_PANIC, "thread_unpin: ipl out of range %x", i);
1316 #endif
1317 
1318 	/*
1319 	 * Compute the CPU's base interrupt level based on the active
1320 	 * interrupts.
1321 	 */
1322 	ASSERT(CPU->cpu_intr_actv & (1 << i));
1323 	set_base_spl();
1324 
1325 	return (itp);
1326 }
1327 
1328 /*
1329  * Create and initialize an interrupt thread.
1330  *	Returns non-zero on error.
1331  *	Called at spl7() or better.
1332  */
1333 void
1334 thread_create_intr(struct cpu *cp)
1335 {
1336 	kthread_t *tp;
1337 
1338 	tp = thread_create(NULL, 0,
1339 	    (void (*)())thread_create_intr, NULL, 0, &p0, TS_ONPROC, 0);
1340 
1341 	/*
1342 	 * Set the thread in the TS_FREE state.  The state will change
1343 	 * to TS_ONPROC only while the interrupt is active.  Think of these
1344 	 * as being on a private free list for the CPU.  Being TS_FREE keeps
1345 	 * inactive interrupt threads out of debugger thread lists.
1346 	 *
1347 	 * We cannot call thread_create with TS_FREE because of the current
1348 	 * checks there for ONPROC.  Fix this when thread_create takes flags.
1349 	 */
1350 	THREAD_FREEINTR(tp, cp);
1351 
1352 	/*
1353 	 * Nobody should ever reference the credentials of an interrupt
1354 	 * thread so make it NULL to catch any such references.
1355 	 */
1356 	tp->t_cred = NULL;
1357 	tp->t_flag |= T_INTR_THREAD;
1358 	tp->t_cpu = cp;
1359 	tp->t_bound_cpu = cp;
1360 	tp->t_disp_queue = cp->cpu_disp;
1361 	tp->t_affinitycnt = 1;
1362 	tp->t_preempt = 1;
1363 
1364 	/*
1365 	 * Don't make a user-requested binding on this thread so that
1366 	 * the processor can be offlined.
1367 	 */
1368 	tp->t_bind_cpu = PBIND_NONE;	/* no USER-requested binding */
1369 	tp->t_bind_pset = PS_NONE;
1370 
1371 #if defined(__i386) || defined(__amd64)
1372 	tp->t_stk -= STACK_ALIGN;
1373 	*(tp->t_stk) = 0;		/* terminate intr thread stack */
1374 #endif
1375 
1376 	/*
1377 	 * Link onto CPU's interrupt pool.
1378 	 */
1379 	tp->t_link = cp->cpu_intr_thread;
1380 	cp->cpu_intr_thread = tp;
1381 }
1382 
1383 /*
1384  * TSD -- THREAD SPECIFIC DATA
1385  */
1386 static kmutex_t		tsd_mutex;	 /* linked list spin lock */
1387 static uint_t		tsd_nkeys;	 /* size of destructor array */
1388 /* per-key destructor funcs */
1389 static void 		(**tsd_destructor)(void *);
1390 /* list of tsd_thread's */
1391 static struct tsd_thread	*tsd_list;
1392 
1393 /*
1394  * Default destructor
1395  *	Needed because NULL destructor means that the key is unused
1396  */
1397 /* ARGSUSED */
1398 void
1399 tsd_defaultdestructor(void *value)
1400 {}
1401 
1402 /*
1403  * Create a key (index into per thread array)
1404  *	Locks out tsd_create, tsd_destroy, and tsd_exit
1405  *	May allocate memory with lock held
1406  */
1407 void
1408 tsd_create(uint_t *keyp, void (*destructor)(void *))
1409 {
1410 	int	i;
1411 	uint_t	nkeys;
1412 
1413 	/*
1414 	 * if key is allocated, do nothing
1415 	 */
1416 	mutex_enter(&tsd_mutex);
1417 	if (*keyp) {
1418 		mutex_exit(&tsd_mutex);
1419 		return;
1420 	}
1421 	/*
1422 	 * find an unused key
1423 	 */
1424 	if (destructor == NULL)
1425 		destructor = tsd_defaultdestructor;
1426 
1427 	for (i = 0; i < tsd_nkeys; ++i)
1428 		if (tsd_destructor[i] == NULL)
1429 			break;
1430 
1431 	/*
1432 	 * if no unused keys, increase the size of the destructor array
1433 	 */
1434 	if (i == tsd_nkeys) {
1435 		if ((nkeys = (tsd_nkeys << 1)) == 0)
1436 			nkeys = 1;
1437 		tsd_destructor =
1438 		    (void (**)(void *))tsd_realloc((void *)tsd_destructor,
1439 		    (size_t)(tsd_nkeys * sizeof (void (*)(void *))),
1440 		    (size_t)(nkeys * sizeof (void (*)(void *))));
1441 		tsd_nkeys = nkeys;
1442 	}
1443 
1444 	/*
1445 	 * allocate the next available unused key
1446 	 */
1447 	tsd_destructor[i] = destructor;
1448 	*keyp = i + 1;
1449 	mutex_exit(&tsd_mutex);
1450 }
1451 
1452 /*
1453  * Destroy a key -- this is for unloadable modules
1454  *
1455  * Assumes that the caller is preventing tsd_set and tsd_get
1456  * Locks out tsd_create, tsd_destroy, and tsd_exit
1457  * May free memory with lock held
1458  */
1459 void
1460 tsd_destroy(uint_t *keyp)
1461 {
1462 	uint_t key;
1463 	struct tsd_thread *tsd;
1464 
1465 	/*
1466 	 * protect the key namespace and our destructor lists
1467 	 */
1468 	mutex_enter(&tsd_mutex);
1469 	key = *keyp;
1470 	*keyp = 0;
1471 
1472 	ASSERT(key <= tsd_nkeys);
1473 
1474 	/*
1475 	 * if the key is valid
1476 	 */
1477 	if (key != 0) {
1478 		uint_t k = key - 1;
1479 		/*
1480 		 * for every thread with TSD, call key's destructor
1481 		 */
1482 		for (tsd = tsd_list; tsd; tsd = tsd->ts_next) {
1483 			/*
1484 			 * no TSD for key in this thread
1485 			 */
1486 			if (key > tsd->ts_nkeys)
1487 				continue;
1488 			/*
1489 			 * call destructor for key
1490 			 */
1491 			if (tsd->ts_value[k] && tsd_destructor[k])
1492 				(*tsd_destructor[k])(tsd->ts_value[k]);
1493 			/*
1494 			 * reset value for key
1495 			 */
1496 			tsd->ts_value[k] = NULL;
1497 		}
1498 		/*
1499 		 * actually free the key (NULL destructor == unused)
1500 		 */
1501 		tsd_destructor[k] = NULL;
1502 	}
1503 
1504 	mutex_exit(&tsd_mutex);
1505 }
1506 
1507 /*
1508  * Quickly return the per thread value that was stored with the specified key
1509  * Assumes the caller is protecting key from tsd_create and tsd_destroy
1510  */
1511 void *
1512 tsd_get(uint_t key)
1513 {
1514 	return (tsd_agent_get(curthread, key));
1515 }
1516 
1517 /*
1518  * Set a per thread value indexed with the specified key
1519  */
1520 int
1521 tsd_set(uint_t key, void *value)
1522 {
1523 	return (tsd_agent_set(curthread, key, value));
1524 }
1525 
1526 /*
1527  * Like tsd_get(), except that the agent lwp can get the tsd of
1528  * another thread in the same process (the agent thread only runs when the
1529  * process is completely stopped by /proc), or syslwp is creating a new lwp.
1530  */
1531 void *
1532 tsd_agent_get(kthread_t *t, uint_t key)
1533 {
1534 	struct tsd_thread *tsd = t->t_tsd;
1535 
1536 	ASSERT(t == curthread ||
1537 	    ttoproc(t)->p_agenttp == curthread || t->t_state == TS_STOPPED);
1538 
1539 	if (key && tsd != NULL && key <= tsd->ts_nkeys)
1540 		return (tsd->ts_value[key - 1]);
1541 	return (NULL);
1542 }
1543 
1544 /*
1545  * Like tsd_set(), except that the agent lwp can set the tsd of
1546  * another thread in the same process, or syslwp can set the tsd
1547  * of a thread it's in the middle of creating.
1548  *
1549  * Assumes the caller is protecting key from tsd_create and tsd_destroy
1550  * May lock out tsd_destroy (and tsd_create), may allocate memory with
1551  * lock held
1552  */
1553 int
1554 tsd_agent_set(kthread_t *t, uint_t key, void *value)
1555 {
1556 	struct tsd_thread *tsd = t->t_tsd;
1557 
1558 	ASSERT(t == curthread ||
1559 	    ttoproc(t)->p_agenttp == curthread || t->t_state == TS_STOPPED);
1560 
1561 	if (key == 0)
1562 		return (EINVAL);
1563 	if (tsd == NULL)
1564 		tsd = t->t_tsd = kmem_zalloc(sizeof (*tsd), KM_SLEEP);
1565 	if (key <= tsd->ts_nkeys) {
1566 		tsd->ts_value[key - 1] = value;
1567 		return (0);
1568 	}
1569 
1570 	ASSERT(key <= tsd_nkeys);
1571 
1572 	/*
1573 	 * lock out tsd_destroy()
1574 	 */
1575 	mutex_enter(&tsd_mutex);
1576 	if (tsd->ts_nkeys == 0) {
1577 		/*
1578 		 * Link onto list of threads with TSD
1579 		 */
1580 		if ((tsd->ts_next = tsd_list) != NULL)
1581 			tsd_list->ts_prev = tsd;
1582 		tsd_list = tsd;
1583 	}
1584 
1585 	/*
1586 	 * Allocate thread local storage and set the value for key
1587 	 */
1588 	tsd->ts_value = tsd_realloc(tsd->ts_value,
1589 	    tsd->ts_nkeys * sizeof (void *),
1590 	    key * sizeof (void *));
1591 	tsd->ts_nkeys = key;
1592 	tsd->ts_value[key - 1] = value;
1593 	mutex_exit(&tsd_mutex);
1594 
1595 	return (0);
1596 }
1597 
1598 
1599 /*
1600  * Return the per thread value that was stored with the specified key
1601  *	If necessary, create the key and the value
1602  *	Assumes the caller is protecting *keyp from tsd_destroy
1603  */
1604 void *
1605 tsd_getcreate(uint_t *keyp, void (*destroy)(void *), void *(*allocate)(void))
1606 {
1607 	void *value;
1608 	uint_t key = *keyp;
1609 	struct tsd_thread *tsd = curthread->t_tsd;
1610 
1611 	if (tsd == NULL)
1612 		tsd = curthread->t_tsd = kmem_zalloc(sizeof (*tsd), KM_SLEEP);
1613 	if (key && key <= tsd->ts_nkeys && (value = tsd->ts_value[key - 1]))
1614 		return (value);
1615 	if (key == 0)
1616 		tsd_create(keyp, destroy);
1617 	(void) tsd_set(*keyp, value = (*allocate)());
1618 
1619 	return (value);
1620 }
1621 
1622 /*
1623  * Called from thread_exit() to run the destructor function for each tsd
1624  *	Locks out tsd_create and tsd_destroy
1625  *	Assumes that the destructor *DOES NOT* use tsd
1626  */
1627 void
1628 tsd_exit(void)
1629 {
1630 	int i;
1631 	struct tsd_thread *tsd = curthread->t_tsd;
1632 
1633 	if (tsd == NULL)
1634 		return;
1635 
1636 	if (tsd->ts_nkeys == 0) {
1637 		kmem_free(tsd, sizeof (*tsd));
1638 		curthread->t_tsd = NULL;
1639 		return;
1640 	}
1641 
1642 	/*
1643 	 * lock out tsd_create and tsd_destroy, call
1644 	 * the destructor, and mark the value as destroyed.
1645 	 */
1646 	mutex_enter(&tsd_mutex);
1647 
1648 	for (i = 0; i < tsd->ts_nkeys; i++) {
1649 		if (tsd->ts_value[i] && tsd_destructor[i])
1650 			(*tsd_destructor[i])(tsd->ts_value[i]);
1651 		tsd->ts_value[i] = NULL;
1652 	}
1653 
1654 	/*
1655 	 * remove from linked list of threads with TSD
1656 	 */
1657 	if (tsd->ts_next)
1658 		tsd->ts_next->ts_prev = tsd->ts_prev;
1659 	if (tsd->ts_prev)
1660 		tsd->ts_prev->ts_next = tsd->ts_next;
1661 	if (tsd_list == tsd)
1662 		tsd_list = tsd->ts_next;
1663 
1664 	mutex_exit(&tsd_mutex);
1665 
1666 	/*
1667 	 * free up the TSD
1668 	 */
1669 	kmem_free(tsd->ts_value, tsd->ts_nkeys * sizeof (void *));
1670 	kmem_free(tsd, sizeof (struct tsd_thread));
1671 	curthread->t_tsd = NULL;
1672 }
1673 
1674 /*
1675  * realloc
1676  */
1677 static void *
1678 tsd_realloc(void *old, size_t osize, size_t nsize)
1679 {
1680 	void *new;
1681 
1682 	new = kmem_zalloc(nsize, KM_SLEEP);
1683 	if (old) {
1684 		bcopy(old, new, osize);
1685 		kmem_free(old, osize);
1686 	}
1687 	return (new);
1688 }
1689 
1690 /*
1691  * Check to see if an interrupt thread might be active at a given ipl.
1692  * If so return true.
1693  * We must be conservative--it is ok to give a false yes, but a false no
1694  * will cause disaster.  (But if the situation changes after we check it is
1695  * ok--the caller is trying to ensure that an interrupt routine has been
1696  * exited).
1697  * This is used when trying to remove an interrupt handler from an autovector
1698  * list in avintr.c.
1699  */
1700 int
1701 intr_active(struct cpu *cp, int level)
1702 {
1703 	if (level <= LOCK_LEVEL)
1704 		return (cp->cpu_thread != cp->cpu_dispthread);
1705 	else
1706 		return (CPU_ON_INTR(cp));
1707 }
1708 
1709 /*
1710  * Return non-zero if an interrupt is being serviced.
1711  */
1712 int
1713 servicing_interrupt()
1714 {
1715 	int onintr = 0;
1716 
1717 	/* Are we an interrupt thread */
1718 	if (curthread->t_flag & T_INTR_THREAD)
1719 		return (1);
1720 	/* Are we servicing a high level interrupt? */
1721 	if (CPU_ON_INTR(CPU)) {
1722 		kpreempt_disable();
1723 		onintr = CPU_ON_INTR(CPU);
1724 		kpreempt_enable();
1725 	}
1726 	return (onintr);
1727 }
1728 
1729 
1730 /*
1731  * Change the dispatch priority of a thread in the system.
1732  * Used when raising or lowering a thread's priority.
1733  * (E.g., priority inheritance)
1734  *
1735  * Since threads are queued according to their priority, we
1736  * we must check the thread's state to determine whether it
1737  * is on a queue somewhere. If it is, we've got to:
1738  *
1739  *	o Dequeue the thread.
1740  *	o Change its effective priority.
1741  *	o Enqueue the thread.
1742  *
1743  * Assumptions: The thread whose priority we wish to change
1744  * must be locked before we call thread_change_(e)pri().
1745  * The thread_change(e)pri() function doesn't drop the thread
1746  * lock--that must be done by its caller.
1747  */
1748 void
1749 thread_change_epri(kthread_t *t, pri_t disp_pri)
1750 {
1751 	uint_t	state;
1752 
1753 	ASSERT(THREAD_LOCK_HELD(t));
1754 
1755 	/*
1756 	 * If the inherited priority hasn't actually changed,
1757 	 * just return.
1758 	 */
1759 	if (t->t_epri == disp_pri)
1760 		return;
1761 
1762 	state = t->t_state;
1763 
1764 	/*
1765 	 * If it's not on a queue, change the priority with impunity.
1766 	 */
1767 	if ((state & (TS_SLEEP | TS_RUN | TS_WAIT)) == 0) {
1768 		t->t_epri = disp_pri;
1769 		if (state == TS_ONPROC) {
1770 			cpu_t *cp = t->t_disp_queue->disp_cpu;
1771 
1772 			if (t == cp->cpu_dispthread)
1773 				cp->cpu_dispatch_pri = DISP_PRIO(t);
1774 		}
1775 	} else if (state == TS_SLEEP) {
1776 		/*
1777 		 * Take the thread out of its sleep queue.
1778 		 * Change the inherited priority.
1779 		 * Re-enqueue the thread.
1780 		 * Each synchronization object exports a function
1781 		 * to do this in an appropriate manner.
1782 		 */
1783 		SOBJ_CHANGE_EPRI(t->t_sobj_ops, t, disp_pri);
1784 	} else if (state == TS_WAIT) {
1785 		/*
1786 		 * Re-enqueue a thread on the wait queue if its
1787 		 * effective priority needs to change.
1788 		 */
1789 		if (disp_pri != t->t_epri)
1790 			waitq_change_pri(t, disp_pri);
1791 	} else {
1792 		/*
1793 		 * The thread is on a run queue.
1794 		 * Note: setbackdq() may not put the thread
1795 		 * back on the same run queue where it originally
1796 		 * resided.
1797 		 */
1798 		(void) dispdeq(t);
1799 		t->t_epri = disp_pri;
1800 		setbackdq(t);
1801 	}
1802 	schedctl_set_cidpri(t);
1803 }
1804 
1805 /*
1806  * Function: Change the t_pri field of a thread.
1807  * Side Effects: Adjust the thread ordering on a run queue
1808  *		 or sleep queue, if necessary.
1809  * Returns: 1 if the thread was on a run queue, else 0.
1810  */
1811 int
1812 thread_change_pri(kthread_t *t, pri_t disp_pri, int front)
1813 {
1814 	uint_t	state;
1815 	int	on_rq = 0;
1816 
1817 	ASSERT(THREAD_LOCK_HELD(t));
1818 
1819 	state = t->t_state;
1820 	THREAD_WILLCHANGE_PRI(t, disp_pri);
1821 
1822 	/*
1823 	 * If it's not on a queue, change the priority with impunity.
1824 	 */
1825 	if ((state & (TS_SLEEP | TS_RUN | TS_WAIT)) == 0) {
1826 		t->t_pri = disp_pri;
1827 
1828 		if (state == TS_ONPROC) {
1829 			cpu_t *cp = t->t_disp_queue->disp_cpu;
1830 
1831 			if (t == cp->cpu_dispthread)
1832 				cp->cpu_dispatch_pri = DISP_PRIO(t);
1833 		}
1834 	} else if (state == TS_SLEEP) {
1835 		/*
1836 		 * If the priority has changed, take the thread out of
1837 		 * its sleep queue and change the priority.
1838 		 * Re-enqueue the thread.
1839 		 * Each synchronization object exports a function
1840 		 * to do this in an appropriate manner.
1841 		 */
1842 		if (disp_pri != t->t_pri)
1843 			SOBJ_CHANGE_PRI(t->t_sobj_ops, t, disp_pri);
1844 	} else if (state == TS_WAIT) {
1845 		/*
1846 		 * Re-enqueue a thread on the wait queue if its
1847 		 * priority needs to change.
1848 		 */
1849 		if (disp_pri != t->t_pri)
1850 			waitq_change_pri(t, disp_pri);
1851 	} else {
1852 		/*
1853 		 * The thread is on a run queue.
1854 		 * Note: setbackdq() may not put the thread
1855 		 * back on the same run queue where it originally
1856 		 * resided.
1857 		 *
1858 		 * We still requeue the thread even if the priority
1859 		 * is unchanged to preserve round-robin (and other)
1860 		 * effects between threads of the same priority.
1861 		 */
1862 		on_rq = dispdeq(t);
1863 		ASSERT(on_rq);
1864 		t->t_pri = disp_pri;
1865 		if (front) {
1866 			setfrontdq(t);
1867 		} else {
1868 			setbackdq(t);
1869 		}
1870 	}
1871 	schedctl_set_cidpri(t);
1872 	return (on_rq);
1873 }
1874