Print this page
13902 Fix for 13717 may break 8-disk raidz2
13915 installctx() blocking allocate causes problems
Portions contributed by: Jerry Jelinek <gjelinek@gmail.com>
Change-Id: I934d69946cec42630fc541fa8c7385b862b69ca2
| Split |
Close |
| Expand all |
| Collapse all |
--- old/usr/src/uts/sun4u/os/cpc_subr.c
+++ new/usr/src/uts/sun4u/os/cpc_subr.c
1 1 /*
2 2 * CDDL HEADER START
3 3 *
4 4 * The contents of this file are subject to the terms of the
5 5 * Common Development and Distribution License (the "License").
6 6 * You may not use this file except in compliance with the License.
7 7 *
8 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 9 * or http://www.opensolaris.org/os/licensing.
10 10 * See the License for the specific language governing permissions
11 11 * and limitations under the License.
12 12 *
|
↓ open down ↓ |
12 lines elided |
↑ open up ↑ |
13 13 * When distributing Covered Code, include this CDDL HEADER in each
14 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 15 * If applicable, add the following below this CDDL HEADER, with the
16 16 * fields enclosed by brackets "[]" replaced with your own identifying
17 17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 18 *
19 19 * CDDL HEADER END
20 20 */
21 21 /*
22 22 * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved.
23 + * Copyright 2021 Joyent, Inc.
23 24 */
24 25
25 26 /*
26 27 * sun4u common CPC subroutines.
27 28 */
28 29
29 30 #include <sys/types.h>
30 31 #include <sys/time.h>
31 32 #include <sys/atomic.h>
32 33 #include <sys/thread.h>
33 34 #include <sys/regset.h>
34 35 #include <sys/archsystm.h>
35 36 #include <sys/machsystm.h>
36 37 #include <sys/cpc_impl.h>
37 38 #include <sys/cpc_ultra.h>
38 39 #include <sys/sunddi.h>
39 40 #include <sys/intr.h>
40 41 #include <sys/ivintr.h>
41 42 #include <sys/x_call.h>
42 43 #include <sys/cpuvar.h>
43 44 #include <sys/machcpuvar.h>
44 45 #include <sys/cpc_pcbe.h>
45 46 #include <sys/modctl.h>
46 47 #include <sys/sdt.h>
47 48 #include <sys/kcpc.h>
48 49
49 50 uint64_t cpc_level15_inum = 0; /* used in interrupt.s */
50 51 int cpc_has_overflow_intr; /* set in cheetah.c */
51 52
52 53 extern kcpc_ctx_t *kcpc_overflow_intr(caddr_t arg, uint64_t bitmap);
53 54 extern int kcpc_counts_include_idle;
54 55
55 56 /*
56 57 * Called on the boot CPU during startup.
57 58 */
58 59 void
59 60 kcpc_hw_init(void)
60 61 {
61 62 if ((cpc_has_overflow_intr) && (cpc_level15_inum == 0)) {
62 63 cpc_level15_inum = add_softintr(PIL_15,
63 64 kcpc_hw_overflow_intr, NULL, SOFTINT_MT);
64 65 }
65 66
66 67 /*
67 68 * Make sure the boot CPU gets set up.
68 69 */
69 70 kcpc_hw_startup_cpu(CPU->cpu_flags);
70 71 }
71 72
72 73 /*
73 74 * Prepare for CPC interrupts and install an idle thread CPC context.
74 75 */
75 76 void
76 77 kcpc_hw_startup_cpu(ushort_t cpflags)
77 78 {
78 79 cpu_t *cp = CPU;
79 80 kthread_t *t = cp->cpu_idle_thread;
80 81
81 82 ASSERT(t->t_bound_cpu == cp);
82 83
83 84 if (cpc_has_overflow_intr && (cpflags & CPU_FROZEN) == 0) {
84 85 int pstate_save = disable_vec_intr();
85 86
86 87 ASSERT(cpc_level15_inum != 0);
87 88
|
↓ open down ↓ |
55 lines elided |
↑ open up ↑ |
88 89 intr_enqueue_req(PIL_15, cpc_level15_inum);
89 90 enable_vec_intr(pstate_save);
90 91 }
91 92
92 93 mutex_init(&cp->cpu_cpc_ctxlock, "cpu_cpc_ctxlock", MUTEX_DEFAULT, 0);
93 94
94 95 if (kcpc_counts_include_idle)
95 96 return;
96 97
97 98 installctx(t, cp, kcpc_idle_save, kcpc_idle_restore, NULL, NULL,
98 - NULL, NULL);
99 + NULL, NULL, NULL);
99 100 }
100 101
101 102 /*
102 103 * Examine the processor and load an appropriate PCBE.
103 104 */
104 105 int
105 106 kcpc_hw_load_pcbe(void)
106 107 {
107 108 uint64_t ver = ultra_getver();
108 109
109 110 return (kcpc_pcbe_tryload(NULL, ULTRA_VER_MANUF(ver),
110 111 ULTRA_VER_IMPL(ver), ULTRA_VER_MASK(ver)));
111 112 }
112 113
113 114 /*ARGSUSED*/
114 115 int
115 116 kcpc_hw_cpu_hook(processorid_t cpuid, ulong_t *kcpc_cpumap)
116 117 {
117 118 return (0);
118 119 }
119 120
120 121 int
121 122 kcpc_hw_lwp_hook(void)
122 123 {
123 124 return (0);
124 125 }
|
↓ open down ↓ |
16 lines elided |
↑ open up ↑ |
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX