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


   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  * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.

  23  */
  24 
  25 /*
  26  * sun4u common CPC subroutines.
  27  */
  28 
  29 #include <sys/types.h>
  30 #include <sys/time.h>
  31 #include <sys/atomic.h>
  32 #include <sys/thread.h>
  33 #include <sys/regset.h>
  34 #include <sys/archsystm.h>
  35 #include <sys/machsystm.h>
  36 #include <sys/cpc_impl.h>
  37 #include <sys/cpc_ultra.h>
  38 #include <sys/sunddi.h>
  39 #include <sys/intr.h>
  40 #include <sys/ivintr.h>
  41 #include <sys/x_call.h>
  42 #include <sys/cpuvar.h>


  77         cpu_t           *cp = CPU;
  78         kthread_t       *t = cp->cpu_idle_thread;
  79 
  80         ASSERT(t->t_bound_cpu == cp);
  81 
  82         if (cpc_has_overflow_intr && (cpflags & CPU_FROZEN) == 0) {
  83                 int pstate_save = disable_vec_intr();
  84 
  85                 ASSERT(cpc_level15_inum != 0);
  86 
  87                 intr_enqueue_req(PIL_15, cpc_level15_inum);
  88                 enable_vec_intr(pstate_save);
  89         }
  90 
  91         mutex_init(&cp->cpu_cpc_ctxlock, "cpu_cpc_ctxlock", MUTEX_DEFAULT, 0);
  92 
  93         if (kcpc_counts_include_idle)
  94                 return;
  95 
  96         installctx(t, cp, kcpc_idle_save, kcpc_idle_restore, NULL, NULL,
  97             NULL, NULL);
  98 }
  99 
 100 /*
 101  * Examine the processor and load an appropriate PCBE.
 102  */
 103 int
 104 kcpc_hw_load_pcbe(void)
 105 {
 106         char            modname[MODMAXNAMELEN+1];
 107         char            *p, *q;
 108         int             len, stat;
 109         extern char     *boot_cpu_compatible_list;
 110 
 111         for (stat = -1, p = boot_cpu_compatible_list; p != NULL; p = q) {
 112                 /*
 113                  * Get next CPU module name from boot_cpu_compatible_list
 114                  */
 115                 q = strchr(p, ':');
 116                 len = (q) ? (q - p) : strlen(p);
 117                 if (len < sizeof (modname)) {




   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  * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
  23  * Copyright 2021 Joyent, Inc.
  24  */
  25 
  26 /*
  27  * sun4u common CPC subroutines.
  28  */
  29 
  30 #include <sys/types.h>
  31 #include <sys/time.h>
  32 #include <sys/atomic.h>
  33 #include <sys/thread.h>
  34 #include <sys/regset.h>
  35 #include <sys/archsystm.h>
  36 #include <sys/machsystm.h>
  37 #include <sys/cpc_impl.h>
  38 #include <sys/cpc_ultra.h>
  39 #include <sys/sunddi.h>
  40 #include <sys/intr.h>
  41 #include <sys/ivintr.h>
  42 #include <sys/x_call.h>
  43 #include <sys/cpuvar.h>


  78         cpu_t           *cp = CPU;
  79         kthread_t       *t = cp->cpu_idle_thread;
  80 
  81         ASSERT(t->t_bound_cpu == cp);
  82 
  83         if (cpc_has_overflow_intr && (cpflags & CPU_FROZEN) == 0) {
  84                 int pstate_save = disable_vec_intr();
  85 
  86                 ASSERT(cpc_level15_inum != 0);
  87 
  88                 intr_enqueue_req(PIL_15, cpc_level15_inum);
  89                 enable_vec_intr(pstate_save);
  90         }
  91 
  92         mutex_init(&cp->cpu_cpc_ctxlock, "cpu_cpc_ctxlock", MUTEX_DEFAULT, 0);
  93 
  94         if (kcpc_counts_include_idle)
  95                 return;
  96 
  97         installctx(t, cp, kcpc_idle_save, kcpc_idle_restore, NULL, NULL,
  98             NULL, NULL, NULL);
  99 }
 100 
 101 /*
 102  * Examine the processor and load an appropriate PCBE.
 103  */
 104 int
 105 kcpc_hw_load_pcbe(void)
 106 {
 107         char            modname[MODMAXNAMELEN+1];
 108         char            *p, *q;
 109         int             len, stat;
 110         extern char     *boot_cpu_compatible_list;
 111 
 112         for (stat = -1, p = boot_cpu_compatible_list; p != NULL; p = q) {
 113                 /*
 114                  * Get next CPU module name from boot_cpu_compatible_list
 115                  */
 116                 q = strchr(p, ':');
 117                 len = (q) ? (q - p) : strlen(p);
 118                 if (len < sizeof (modname)) {