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 (c) 1988, 2010, Oracle and/or its affiliates. All rights reserved.
24 */
25
26 /* Copyright (c) 1988 AT&T */
27 /* All Rights Reserved */
28
29 #include <sys/types.h>
30 #include <sys/param.h>
31 #include <sys/sysmacros.h>
32 #include <sys/pcb.h>
33 #include <sys/systm.h>
34 #include <sys/signal.h>
35 #include <sys/cred.h>
36 #include <sys/user.h>
37 #include <sys/vfs.h>
38 #include <sys/vnode.h>
39 #include <sys/proc.h>
40 #include <sys/time.h>
41 #include <sys/file.h>
42 #include <sys/priocntl.h>
43 #include <sys/procset.h>
44 #include <sys/disp.h>
45 #include <sys/callo.h>
46 #include <sys/callb.h>
47 #include <sys/debug.h>
48 #include <sys/conf.h>
398 * to prevent kadmin() from disrupting this work. In particular,
399 * we don't want kadmin() to bring the system down while we are
400 * trying to start it up.
401 */
402 mutex_enter(&ualock);
403
404 /*
405 * Setup root lgroup and leaf lgroup for CPU 0
406 */
407 lgrp_init(LGRP_INIT_STAGE2);
408
409 /*
410 * Once 'startup()' completes, the thread_reaper() daemon would be
411 * created(in thread_init()). After that, it is safe to create threads
412 * that could exit. These exited threads will get reaped.
413 */
414 startup();
415 segkmem_gc();
416 callb_init();
417 cbe_init_pre(); /* x86 must initialize gethrtimef before timer_init */
418 timer_init(); /* timer must be initialized before cyclic starts */
419 cbe_init();
420 callout_init(); /* callout table MUST be init'd after cyclics */
421 clock_tick_init_pre();
422 clock_init();
423
424 #if defined(__x86)
425 /*
426 * The progressbar thread uses cv_reltimedwait() and hence needs to be
427 * started after the callout mechanism has been initialized.
428 */
429 progressbar_start();
430 #endif
431 /*
432 * On some platforms, clkinitf() changes the timing source that
433 * gethrtime_unscaled() uses to generate timestamps. cbe_init() calls
434 * clkinitf(), so re-initialize the microstate counters after the
435 * timesource has been chosen.
436 */
437 init_mstate(&t0, LMS_SYSTEM);
438 init_cpu_mstate(CPU, CMS_SYSTEM);
|
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 (c) 1988, 2010, Oracle and/or its affiliates. All rights reserved.
24 */
25
26 /* Copyright (c) 1988 AT&T */
27 /* All Rights Reserved */
28
29 /*
30 * Copyright (c) 2013, Joyent, Inc. All rights reserved.
31 */
32
33 #include <sys/types.h>
34 #include <sys/param.h>
35 #include <sys/sysmacros.h>
36 #include <sys/pcb.h>
37 #include <sys/systm.h>
38 #include <sys/signal.h>
39 #include <sys/cred.h>
40 #include <sys/user.h>
41 #include <sys/vfs.h>
42 #include <sys/vnode.h>
43 #include <sys/proc.h>
44 #include <sys/time.h>
45 #include <sys/file.h>
46 #include <sys/priocntl.h>
47 #include <sys/procset.h>
48 #include <sys/disp.h>
49 #include <sys/callo.h>
50 #include <sys/callb.h>
51 #include <sys/debug.h>
52 #include <sys/conf.h>
402 * to prevent kadmin() from disrupting this work. In particular,
403 * we don't want kadmin() to bring the system down while we are
404 * trying to start it up.
405 */
406 mutex_enter(&ualock);
407
408 /*
409 * Setup root lgroup and leaf lgroup for CPU 0
410 */
411 lgrp_init(LGRP_INIT_STAGE2);
412
413 /*
414 * Once 'startup()' completes, the thread_reaper() daemon would be
415 * created(in thread_init()). After that, it is safe to create threads
416 * that could exit. These exited threads will get reaped.
417 */
418 startup();
419 segkmem_gc();
420 callb_init();
421 cbe_init_pre(); /* x86 must initialize gethrtimef before timer_init */
422 ddi_periodic_init();
423 cbe_init();
424 callout_init(); /* callout table MUST be init'd after cyclics */
425 clock_tick_init_pre();
426 clock_init();
427
428 #if defined(__x86)
429 /*
430 * The progressbar thread uses cv_reltimedwait() and hence needs to be
431 * started after the callout mechanism has been initialized.
432 */
433 progressbar_start();
434 #endif
435 /*
436 * On some platforms, clkinitf() changes the timing source that
437 * gethrtime_unscaled() uses to generate timestamps. cbe_init() calls
438 * clkinitf(), so re-initialize the microstate counters after the
439 * timesource has been chosen.
440 */
441 init_mstate(&t0, LMS_SYSTEM);
442 init_cpu_mstate(CPU, CMS_SYSTEM);
|