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 * Copyright 2008 Sun Microsystems, Inc. All rights reserved. 23 * Use is subject to license terms. 24 */ 25 26 #pragma dictionary "DISK" 27 28 #define P disk 29 30 fru P; 31 asru P; 32 33 /* 34 * disk-as-detector: The disk-as-detector DE provides the mapping between 35 * ereports generated by a kernel disk driver sd(7D) and resulting faults. 36 */ 37 38 /* 39 * disk-as-detector: fault events. 40 */ 41 event fault.io.scsi.cmd.disk.dev.rqs.derr@P; 42 event fault.io.scsi.cmd.disk.dev.rqs.merr@P; 43 /* 44 * The uderr fault will be defined at some future time. 45 * event fault.io.scsi.cmd.disk.dev.uderr@P; 46 */ 47 48 /* 49 * disk-as-detector: upset events. 50 * NOTE: For now we define an upset to implement discard. 51 */ 52 event upset.io.scsi.cmd.disk.dev.rqs.derr@P; 53 event upset.io.scsi.cmd.disk.dev.rqs.merr@P; 54 event upset.io.scsi.cmd.disk.dev.uderr@P; 55 event upset.io.scsi.cmd.disk.dev.serr@P; 56 event upset.io.scsi.cmd.disk.tran@P; 57 event upset.io.scsi.cmd.disk.recovered@P; 58 59 /* 60 * disk-as-detector: ereports from the kernel. 61 * 62 * We don't know the topology for all scsi disks, but the kernel will always 63 * generate ereport telemetry assuming that we do. We define these ereports 64 * with 'discard_if_config_unknown=1', which permits ereports against things 65 * with unknown topology to be silently discarded. The ereport data is logged 66 * in either case, and can be viewed via 'fmdump -eV'. 67 */ 68 event ereport.io.scsi.cmd.disk.dev.rqs.derr@P, discard_if_config_unknown=1; 69 event ereport.io.scsi.cmd.disk.dev.rqs.merr@P, discard_if_config_unknown=1; 70 event ereport.io.scsi.cmd.disk.dev.serr@P, discard_if_config_unknown=1; 71 event ereport.io.scsi.cmd.disk.dev.uderr@P, discard_if_config_unknown=1; 72 event ereport.io.scsi.cmd.disk.recovered@P, discard_if_config_unknown=1; 73 event ereport.io.scsi.cmd.disk.tran@P, discard_if_config_unknown=1; 74 75 /* 76 * For some ereports we let the 'driver-assessment', communicated as part of 77 * the ereport payload, determine fault .vs. upset via propagation constraints. 78 */ 79 #define DRIVER_ASSESSMENT_FATAL \ 80 (payloadprop_contains("driver-assessment", "fatal")) 81 #define DRIVER_ASSESSMENT_NONFATAL (!DRIVER_ASSESSMENT_FATAL) 82 83 /* 84 * disk-as-detector: propagations from faults(based on 85 * DRIVER_ASSESSMENT_FATAL). 86 * We need to set additional fault payloads to indicate fault details. 87 * The payload we may need are listed as following: 88 * fault.io.scsi.cmd.disk.dev.rqs.derr 89 * op_code, key, asc, ascq 90 * fault.io.scsi.cmd.disk.dev.rqs.merr 91 * op_code, key, asc, ascq, lba 92 */ 93 prop fault.io.scsi.cmd.disk.dev.rqs.derr@P-> 94 ereport.io.scsi.cmd.disk.dev.rqs.derr@P{ DRIVER_ASSESSMENT_FATAL && 95 setpayloadprop("key", payloadprop("key")) && 96 setpayloadprop("asc", payloadprop("asc")) && 97 setpayloadprop("ascq", payloadprop("ascq"))}; 98 99 prop fault.io.scsi.cmd.disk.dev.rqs.merr@P-> 100 ereport.io.scsi.cmd.disk.dev.rqs.merr@P{ DRIVER_ASSESSMENT_FATAL && 101 setpayloadprop("key", payloadprop("key")) && 102 setpayloadprop("asc", payloadprop("asc")) && 103 setpayloadprop("ascq", payloadprop("ascq")) && 104 setpayloadprop("lba", payloadprop("lba"))}; 105 106 /* 107 * The uderr fault will be propagated at some future time. 108 * prop fault.io.scsi.cmd.disk.dev.uderr@P-> 109 * ereport.io.scsi.cmd.disk.dev.uderr@P{ DRIVER_ASSESSMENT_FATAL }; 110 */ 111 112 /* 113 * disk-as-detector: propagations from upsets(based on 114 * DRIVER_ASSESSMENT_NONFATAL). 115 */ 116 prop upset.io.scsi.cmd.disk.dev.rqs.derr@P-> 117 ereport.io.scsi.cmd.disk.dev.rqs.derr@P{ DRIVER_ASSESSMENT_NONFATAL }; 118 119 prop upset.io.scsi.cmd.disk.dev.rqs.merr@P-> 120 ereport.io.scsi.cmd.disk.dev.rqs.merr@P{ DRIVER_ASSESSMENT_NONFATAL }; 121 122 /* 123 * disk-as-detector: propagations from upsets(independent of 124 * driver-assessment) 125 */ 126 127 prop upset.io.scsi.cmd.disk.dev.serr@P-> 128 ereport.io.scsi.cmd.disk.dev.serr@P; 129 130 prop upset.io.scsi.cmd.disk.dev.uderr@P-> 131 ereport.io.scsi.cmd.disk.dev.uderr@P; 132 133 prop upset.io.scsi.cmd.disk.recovered@P-> 134 ereport.io.scsi.cmd.disk.recovered@P; 135 136 prop upset.io.scsi.cmd.disk.tran@P-> 137 ereport.io.scsi.cmd.disk.tran@P; 138 139 /* 140 * -------------------------------------- 141 * The remainder of this file contains rules associated with the operation of 142 * cmd/fm/modules/common/disk-monitor/disk_monitor.c code. 143 * 144 * The disk DE provides a very simple 1-to-1 mapping between SCSI disk events 145 * generated by the disk-transport fmd module, and the resulting faults. 146 */ 147 148 /* 149 * Fault events. 150 */ 151 event fault.io.disk.over-temperature@P, 152 FITrate=10, FRU=P, ASRU=P; 153 event fault.io.disk.predictive-failure@P, FITrate=10, 154 FITrate=10, FRU=P, ASRU=P; 155 event fault.io.disk.self-test-failure@P, FITrate=10, 156 FITrate=10, FRU=P, ASRU=P; 157 158 /* 159 * ereports. 160 */ 161 event ereport.io.scsi.disk.over-temperature@P; 162 event ereport.io.scsi.disk.predictive-failure@P; 163 event ereport.io.scsi.disk.self-test-failure@P; 164 165 /* 166 * Propagations. 167 */ 168 prop fault.io.disk.over-temperature@P -> 169 ereport.io.scsi.disk.over-temperature@P; 170 171 prop fault.io.disk.self-test-failure@P -> 172 ereport.io.scsi.disk.self-test-failure@P; 173 174 prop fault.io.disk.predictive-failure@P -> 175 ereport.io.scsi.disk.predictive-failure@P; 176