--- a/usr/src/cmd/fm/modules/sun4u/cpumem-diagnosis/cmd_memerr_arch.c Mon Apr 12 16:53:16 2010 -0700
+++ b/usr/src/cmd/fm/modules/sun4u/cpumem-diagnosis/cmd_memerr_arch.c Mon Apr 12 20:16:52 2010 -0400
@@ -20,8 +20,7 @@
*/
/*
- * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
+ * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
*/
/*
@@ -541,227 +540,6 @@
}
/*
- * DRAM by bit. Note that this is independent of check-word or DIMM side.
- * Actual DRAM pin *is* dependent on both check-word and DIMM side.
- * DRAMs are numbered D0 to D35, but that doesn't tell us what DIMM
- * they're on!
- *
- * Data bits are numbers, 0 - 127.
- * ECC bits C0 - C8 => 128-136
- * MTAG bits MT0 - MT2 => 137-139
- * MTAG ECC bits MTC0 - MTC3 => 140-143
- *
- *
- * Uniboard Server Systems.
- */
-int unib_upos2dram[] = {
- /* 0 */ 3, /* 1 */ 3, /* 2 */ 3, /* 3 */ 1,
- /* 4 */ 2, /* 5 */ 0, /* 6 */ 1, /* 7 */ 2,
- /* 8 */ 4, /* 9 */ 4, /* 10 */ 4, /* 11 */ 4,
- /* 12 */ 5, /* 13 */ 5, /* 14 */ 5, /* 15 */ 5,
- /* 16 */ 6, /* 17 */ 6, /* 18 */ 6, /* 19 */ 6,
- /* 20 */ 7, /* 21 */ 7, /* 22 */ 7, /* 23 */ 7,
- /* 24 */ 8, /* 25 */ 8, /* 26 */ 8, /* 27 */ 8,
- /* 28 */ 9, /* 29 */ 9, /* 30 */ 9, /* 31 */ 9,
- /* 32 */ 10, /* 33 */ 10, /* 34 */ 10, /* 35 */ 10,
- /* 36 */ 11, /* 37 */ 11, /* 38 */ 11, /* 39 */ 11,
- /* 40 */ 12, /* 41 */ 12, /* 42 */ 12, /* 43 */ 12,
- /* 44 */ 13, /* 45 */ 13, /* 46 */ 13, /* 47 */ 13,
- /* 48 */ 14, /* 49 */ 14, /* 50 */ 14, /* 51 */ 15,
- /* 52 */ 15, /* 53 */ 15, /* 54 */ 16, /* 55 */ 16,
- /* 56 */ 17, /* 57 */ 17, /* 58 */ 17, /* 59 */ 17,
- /* 60 */ 18, /* 61 */ 18, /* 62 */ 18, /* 63 */ 18,
- /* 64 */ 19, /* 65 */ 19, /* 66 */ 19, /* 67 */ 19,
- /* 68 */ 20, /* 69 */ 20, /* 70 */ 20, /* 71 */ 20,
- /* 72 */ 21, /* 73 */ 21, /* 74 */ 22, /* 75 */ 22,
- /* 76 */ 22, /* 77 */ 23, /* 78 */ 23, /* 79 */ 23,
- /* 80 */ 24, /* 81 */ 24, /* 82 */ 24, /* 83 */ 24,
- /* 84 */ 25, /* 85 */ 25, /* 86 */ 25, /* 87 */ 25,
- /* 88 */ 26, /* 89 */ 26, /* 90 */ 26, /* 91 */ 26,
- /* 92 */ 27, /* 93 */ 27, /* 94 */ 27, /* 95 */ 27,
- /* 96 */ 28, /* 97 */ 28, /* 98 */ 28, /* 99 */ 28,
- /* 100 */ 29, /* 101 */ 29, /* 102 */ 29, /* 103 */ 29,
- /* 104 */ 30, /* 105 */ 30, /* 106 */ 30, /* 107 */ 30,
- /* 108 */ 31, /* 109 */ 31, /* 110 */ 31, /* 111 */ 31,
- /* 112 */ 32, /* 113 */ 32, /* 114 */ 32, /* 115 */ 32,
- /* 116 */ 33, /* 117 */ 33, /* 118 */ 33, /* 119 */ 33,
- /* 120 */ 34, /* 121 */ 34, /* 122 */ 34, /* 123 */ 34,
- /* 124 */ 35, /* 125 */ 35, /* 126 */ 35, /* 127 */ 35,
- /* 128 */ 16, /* 129 */ 15, /* 130 */ 14, /* 131 */ 16,
- /* 132 */ 0, /* 133 */ 21, /* 134 */ 23, /* 135 */ 22,
- /* 136 */ 21, /* 137 */ 0, /* 138 */ 1, /* 139 */ 2,
- /* 140 */ 0, /* 141 */ 1, /* 142 */ 2, /* 143 */ 3
-};
-
-/*
- * Camelot Server Systems.
- */
-int cams_upos2dram[] = {
- /* 0 */ 5, /* 1 */ 5, /* 2 */ 5, /* 3 */ 5,
- /* 4 */ 7, /* 5 */ 7, /* 6 */ 7, /* 7 */ 7,
- /* 8 */ 6, /* 9 */ 6, /* 10 */ 6, /* 11 */ 6,
- /* 12 */ 8, /* 13 */ 8, /* 14 */ 8, /* 15 */ 8,
- /* 16 */ 4, /* 17 */ 4, /* 18 */ 4, /* 19 */ 4,
- /* 20 */ 0, /* 21 */ 0, /* 22 */ 0, /* 23 */ 0,
- /* 24 */ 3, /* 25 */ 3, /* 26 */ 3, /* 27 */ 3,
- /* 28 */ 2, /* 29 */ 2, /* 30 */ 2, /* 31 */ 2,
- /* 32 */ 1, /* 33 */ 1, /* 34 */ 1, /* 35 */ 1,
- /* 36 */ 14, /* 37 */ 14, /* 38 */ 14, /* 39 */ 14,
- /* 40 */ 16, /* 41 */ 16, /* 42 */ 16, /* 43 */ 16,
- /* 44 */ 17, /* 45 */ 17, /* 46 */ 15, /* 47 */ 15,
- /* 48 */ 13, /* 49 */ 13, /* 50 */ 13, /* 51 */ 9,
- /* 52 */ 9, /* 53 */ 9, /* 54 */ 12, /* 55 */ 12,
- /* 56 */ 11, /* 57 */ 11, /* 58 */ 11, /* 59 */ 11,
- /* 60 */ 10, /* 61 */ 10, /* 62 */ 10, /* 63 */ 10,
- /* 64 */ 23, /* 65 */ 23, /* 66 */ 23, /* 67 */ 23,
- /* 68 */ 25, /* 69 */ 25, /* 70 */ 25, /* 71 */ 25,
- /* 72 */ 24, /* 73 */ 24, /* 74 */ 26, /* 75 */ 26,
- /* 76 */ 26, /* 77 */ 22, /* 78 */ 22, /* 79 */ 22,
- /* 80 */ 18, /* 81 */ 21, /* 82 */ 21, /* 83 */ 21,
- /* 84 */ 20, /* 85 */ 20, /* 86 */ 20, /* 87 */ 20,
- /* 88 */ 19, /* 89 */ 19, /* 90 */ 19, /* 91 */ 19,
- /* 92 */ 32, /* 93 */ 32, /* 94 */ 32, /* 95 */ 32,
- /* 96 */ 34, /* 97 */ 34, /* 98 */ 34, /* 99 */ 34,
- /* 100 */ 33, /* 101 */ 33, /* 102 */ 33, /* 103 */ 33,
- /* 104 */ 35, /* 105 */ 35, /* 106 */ 35, /* 107 */ 35,
- /* 108 */ 31, /* 109 */ 31, /* 110 */ 31, /* 111 */ 31,
- /* 112 */ 27, /* 113 */ 27, /* 114 */ 27, /* 115 */ 27,
- /* 116 */ 30, /* 117 */ 30, /* 118 */ 30, /* 119 */ 30,
- /* 120 */ 29, /* 121 */ 29, /* 122 */ 29, /* 123 */ 29,
- /* 124 */ 28, /* 125 */ 28, /* 126 */ 28, /* 127 */ 28,
- /* 128 */ 12, /* 129 */ 9, /* 130 */ 13, /* 131 */ 12,
- /* 132 */ 18, /* 133 */ 24, /* 134 */ 22, /* 135 */ 26,
- /* 136 */ 24, /* 137 */ 21, /* 138 */ 18, /* 139 */ 18,
- /* 140 */ 15, /* 141 */ 15, /* 142 */ 17, /* 143 */ 17
-};
-
-/*
- * Camelot Tower Systems.
- */
-int camt_upos2dram[] = {
- /* 0 */ 18, /* 1 */ 0, /* 2 */ 0, /* 3 */ 0,
- /* 4 */ 9, /* 5 */ 18, /* 6 */ 27, /* 7 */ 9,
- /* 8 */ 28, /* 9 */ 28, /* 10 */ 28, /* 11 */ 28,
- /* 12 */ 29, /* 13 */ 29, /* 14 */ 29, /* 15 */ 29,
- /* 16 */ 30, /* 17 */ 30, /* 18 */ 30, /* 19 */ 30,
- /* 20 */ 21, /* 21 */ 21, /* 22 */ 21, /* 23 */ 21,
- /* 24 */ 12, /* 25 */ 12, /* 26 */ 12, /* 27 */ 12,
- /* 28 */ 22, /* 29 */ 22, /* 30 */ 22, /* 31 */ 22,
- /* 32 */ 31, /* 33 */ 31, /* 34 */ 31, /* 35 */ 31,
- /* 36 */ 32, /* 37 */ 32, /* 38 */ 32, /* 39 */ 32,
- /* 40 */ 33, /* 41 */ 33, /* 42 */ 33, /* 43 */ 33,
- /* 44 */ 24, /* 45 */ 24, /* 46 */ 24, /* 47 */ 24,
- /* 48 */ 15, /* 49 */ 15, /* 50 */ 15, /* 51 */ 25,
- /* 52 */ 25, /* 53 */ 25, /* 54 */ 34, /* 55 */ 34,
- /* 56 */ 35, /* 57 */ 35, /* 58 */ 35, /* 59 */ 35,
- /* 60 */ 19, /* 61 */ 19, /* 62 */ 19, /* 63 */ 19,
- /* 64 */ 10, /* 65 */ 10, /* 66 */ 10, /* 67 */ 10,
- /* 68 */ 1, /* 69 */ 1, /* 70 */ 1, /* 71 */ 1,
- /* 72 */ 20, /* 73 */ 20, /* 74 */ 11, /* 75 */ 11,
- /* 76 */ 11, /* 77 */ 2, /* 78 */ 2, /* 79 */ 2,
- /* 80 */ 3, /* 81 */ 3, /* 82 */ 3, /* 83 */ 3,
- /* 84 */ 4, /* 85 */ 4, /* 86 */ 4, /* 87 */ 4,
- /* 88 */ 13, /* 89 */ 13, /* 90 */ 13, /* 91 */ 13,
- /* 92 */ 23, /* 93 */ 23, /* 94 */ 23, /* 95 */ 23,
- /* 96 */ 14, /* 97 */ 14, /* 98 */ 14, /* 99 */ 14,
- /* 100 */ 5, /* 101 */ 5, /* 102 */ 5, /* 103 */ 5,
- /* 104 */ 6, /* 105 */ 6, /* 106 */ 6, /* 107 */ 6,
- /* 108 */ 7, /* 109 */ 7, /* 110 */ 7, /* 111 */ 7,
- /* 112 */ 16, /* 113 */ 16, /* 114 */ 16, /* 115 */ 16,
- /* 116 */ 26, /* 117 */ 26, /* 118 */ 26, /* 119 */ 26,
- /* 120 */ 17, /* 121 */ 17, /* 122 */ 17, /* 123 */ 17,
- /* 124 */ 8, /* 125 */ 8, /* 126 */ 8, /* 127 */ 8,
- /* 128 */ 34, /* 129 */ 25, /* 130 */ 15, /* 131 */ 34,
- /* 132 */ 27, /* 133 */ 20, /* 134 */ 2, /* 135 */ 11,
- /* 136 */ 20, /* 137 */ 9, /* 138 */ 18, /* 139 */ 27,
- /* 140 */ 0, /* 141 */ 9, /* 142 */ 18, /* 143 */ 27
-};
-
-/*
- * Fiesta Server Systems.
- */
-int fies_upos2dram[] = {
- /* 0 */ 7, /* 1 */ 7, /* 2 */ 7, /* 3 */ 7,
- /* 4 */ 16, /* 5 */ 16, /* 6 */ 16, /* 7 */ 16,
- /* 8 */ 25, /* 9 */ 25, /* 10 */ 25, /* 11 */ 25,
- /* 12 */ 34, /* 13 */ 34, /* 14 */ 34, /* 15 */ 34,
- /* 16 */ 6, /* 17 */ 6, /* 18 */ 6, /* 19 */ 6,
- /* 20 */ 15, /* 21 */ 15, /* 22 */ 15, /* 23 */ 15,
- /* 24 */ 24, /* 25 */ 24, /* 26 */ 24, /* 27 */ 24,
- /* 28 */ 33, /* 29 */ 33, /* 30 */ 33, /* 31 */ 33,
- /* 32 */ 23, /* 33 */ 23, /* 34 */ 23, /* 35 */ 23,
- /* 36 */ 32, /* 37 */ 32, /* 38 */ 32, /* 39 */ 32,
- /* 40 */ 22, /* 41 */ 22, /* 42 */ 22, /* 43 */ 22,
- /* 44 */ 31, /* 45 */ 31, /* 46 */ 31, /* 47 */ 31,
- /* 48 */ 5, /* 49 */ 5, /* 50 */ 5, /* 51 */ 5,
- /* 52 */ 14, /* 53 */ 14, /* 54 */ 14, /* 55 */ 14,
- /* 56 */ 4, /* 57 */ 4, /* 58 */ 4, /* 59 */ 4,
- /* 60 */ 13, /* 61 */ 13, /* 62 */ 13, /* 63 */ 13,
- /* 64 */ 18, /* 65 */ 18, /* 66 */ 18, /* 67 */ 18,
- /* 68 */ 27, /* 69 */ 27, /* 70 */ 27, /* 71 */ 27,
- /* 72 */ 0, /* 73 */ 0, /* 74 */ 0, /* 75 */ 0,
- /* 76 */ 9, /* 77 */ 9, /* 78 */ 9, /* 79 */ 9,
- /* 80 */ 19, /* 81 */ 19, /* 82 */ 19, /* 83 */ 19,
- /* 84 */ 28, /* 85 */ 28, /* 86 */ 28, /* 87 */ 28,
- /* 88 */ 1, /* 89 */ 1, /* 90 */ 1, /* 91 */ 1,
- /* 92 */ 10, /* 93 */ 10, /* 94 */ 10, /* 95 */ 10,
- /* 96 */ 3, /* 97 */ 3, /* 98 */ 3, /* 99 */ 3,
- /* 100 */ 12, /* 101 */ 12, /* 102 */ 12, /* 103 */ 12,
- /* 104 */ 20, /* 105 */ 20, /* 106 */ 20, /* 107 */ 20,
- /* 108 */ 29, /* 109 */ 29, /* 110 */ 29, /* 111 */ 29,
- /* 112 */ 8, /* 113 */ 8, /* 114 */ 8, /* 115 */ 8,
- /* 116 */ 17, /* 117 */ 17, /* 118 */ 17, /* 119 */ 17,
- /* 120 */ 21, /* 121 */ 21, /* 122 */ 21, /* 123 */ 21,
- /* 124 */ 30, /* 125 */ 30, /* 126 */ 30, /* 127 */ 30,
- /* 128 */ 2, /* 129 */ 2, /* 130 */ 2, /* 131 */ 2,
- /* 132 */ 11, /* 133 */ 11, /* 134 */ 11, /* 135 */ 11,
- /* 136 */ 26, /* 137 */ 26, /* 138 */ 26, /* 139 */ 26,
- /* 140 */ 35, /* 141 */ 35, /* 142 */ 35, /* 143 */ 35
-};
-
-/*
- * Fiesta Tower Systems.
- */
-int fiet_upos2dram[] = {
- /* 0 */ 0, /* 1 */ 0, /* 2 */ 0, /* 3 */ 0,
- /* 4 */ 9, /* 5 */ 9, /* 6 */ 9, /* 7 */ 9,
- /* 8 */ 18, /* 9 */ 18, /* 10 */ 18, /* 11 */ 18,
- /* 12 */ 27, /* 13 */ 27, /* 14 */ 27, /* 15 */ 27,
- /* 16 */ 19, /* 17 */ 19, /* 18 */ 19, /* 19 */ 19,
- /* 20 */ 28, /* 21 */ 28, /* 22 */ 28, /* 23 */ 28,
- /* 24 */ 1, /* 25 */ 1, /* 26 */ 1, /* 27 */ 1,
- /* 28 */ 10, /* 29 */ 10, /* 30 */ 10, /* 31 */ 10,
- /* 32 */ 20, /* 33 */ 20, /* 34 */ 20, /* 35 */ 20,
- /* 36 */ 29, /* 37 */ 29, /* 38 */ 29, /* 39 */ 29,
- /* 40 */ 2, /* 41 */ 2, /* 42 */ 2, /* 43 */ 2,
- /* 44 */ 11, /* 45 */ 11, /* 46 */ 11, /* 47 */ 11,
- /* 48 */ 21, /* 49 */ 21, /* 50 */ 21, /* 51 */ 21,
- /* 52 */ 30, /* 53 */ 30, /* 54 */ 30, /* 55 */ 30,
- /* 56 */ 3, /* 57 */ 3, /* 58 */ 3, /* 59 */ 3,
- /* 60 */ 12, /* 61 */ 12, /* 62 */ 12, /* 63 */ 12,
- /* 64 */ 8, /* 65 */ 8, /* 66 */ 8, /* 67 */ 8,
- /* 68 */ 17, /* 69 */ 17, /* 70 */ 17, /* 71 */ 17,
- /* 72 */ 22, /* 73 */ 22, /* 74 */ 22, /* 75 */ 22,
- /* 76 */ 31, /* 77 */ 31, /* 78 */ 31, /* 79 */ 31,
- /* 80 */ 4, /* 81 */ 4, /* 82 */ 4, /* 83 */ 4,
- /* 84 */ 13, /* 85 */ 13, /* 86 */ 13, /* 87 */ 13,
- /* 88 */ 23, /* 89 */ 23, /* 90 */ 23, /* 91 */ 23,
- /* 92 */ 32, /* 93 */ 32, /* 94 */ 32, /* 95 */ 32,
- /* 96 */ 5, /* 97 */ 5, /* 98 */ 5, /* 99 */ 5,
- /* 100 */ 14, /* 101 */ 14, /* 102 */ 14, /* 103 */ 14,
- /* 104 */ 24, /* 105 */ 24, /* 106 */ 24, /* 107 */ 24,
- /* 108 */ 33, /* 109 */ 33, /* 110 */ 33, /* 111 */ 33,
- /* 112 */ 6, /* 113 */ 6, /* 114 */ 6, /* 115 */ 6,
- /* 116 */ 15, /* 117 */ 15, /* 118 */ 15, /* 119 */ 15,
- /* 120 */ 25, /* 121 */ 25, /* 122 */ 25, /* 123 */ 25,
- /* 124 */ 34, /* 125 */ 34, /* 126 */ 34, /* 127 */ 34,
- /* 128 */ 7, /* 129 */ 7, /* 130 */ 7, /* 131 */ 7,
- /* 132 */ 16, /* 133 */ 16, /* 134 */ 16, /* 135 */ 16,
- /* 136 */ 26, /* 137 */ 26, /* 138 */ 26, /* 139 */ 26,
- /* 140 */ 35, /* 141 */ 35, /* 142 */ 35, /* 143 */ 35
-};
-
-/*
* sun4u bit position as function of e_synd,
* from JPS1 Implementation Supplement table P-7
* Encode bit positions as follows:
@@ -844,82 +622,9 @@
-1, 139, -1, -1
};
-typedef enum plats2dram {
- UNI_S_PLAT = 0, /* UniBoard Server Systems */
- CAM_S_PLAT, /* Camelot Server Systems */
- CAM_T_PLAT, /* Camelot Tower Systems */
- FIE_S_PLAT, /* Fiesta Server Systems */
- FIE_T_PLAT, /* Fiesta Tower Systems */
- NONE
-} plats_t;
-
-struct plat2dram_map {
- char *platnm;
- plats_t plat;
-} dram_plat[] = {
- /* Platform name DRAM Map Code Name */
- {"SUNW,Sun-Fire-15000", UNI_S_PLAT}, /* Starcat */
- {"SUNW,Sun-Fire", UNI_S_PLAT}, /* Serengeti */
- {"SUNW,Netra-T12", UNI_S_PLAT}, /* Lightweight 8 */
- {"SUNW,Sun-Fire-480R", CAM_S_PLAT}, /* Cherrystone */
- {"SUNW,Sun-Fire-880", CAM_S_PLAT}, /* Daktari */
- {"SUNW,Sun-Fire-V490", CAM_S_PLAT}, /* Sebring */
- {"SUNW,Sun-Fire-V890", CAM_S_PLAT}, /* Silverstone */
- {"SUNW,Sun-Blade-1000", CAM_T_PLAT}, /* Excalibur */
- {"SUNW,Netra-T4", CAM_T_PLAT}, /* Netra 20 */
- {"SUNW,Sun-Fire-V440", FIE_S_PLAT}, /* Chalupa */
- {"SUNW,Sun-Fire-V445", FIE_S_PLAT}, /* Boston */
- {"SUNW,A70", FIE_S_PLAT}, /* Chicago */
- {"SUNW,Sun-Fire-V215", FIE_S_PLAT}, /* Seattle 1U */
- {"SUNW,Sun-Fire-V245", FIE_S_PLAT}, /* Seattle 2U */
- {"SUNW,Netra-440", FIE_S_PLAT}, /* Netra 440 */
- {"SUNW,Sun-Blade-1500", FIE_T_PLAT}, /* Taco */
- {"SUNW,Sun-Blade-2500", FIE_T_PLAT}, /* Enchilada */
- {"SUNW,Sun-Fire-V210", FIE_T_PLAT}, /* Enchilada 1U */
- {"SUNW,Sun-Fire-V240", FIE_T_PLAT}, /* Enchilada 2U */
- {"SUNW,Sun-Fire-V250", FIE_T_PLAT}, /* Enchilada 2P */
- {"SUNW,Netra-210", FIE_T_PLAT}, /* Netra 210 */
- {"SUNW,Netra-240", FIE_T_PLAT}, /* Netra 240 */
- {NULL, NONE}
-};
-
int
cmd_synd2upos(uint16_t syndrome) {
return (esynd2bit[syndrome]);
}
const char *fmd_fmri_get_platform();
-
-/*
- * Return the DRAM within the DIMM associated with the unit position.
- */
-int
-cmd_upos2dram(uint16_t unit_position) {
-
- int i, dram;
- plats_t plat = NONE;
- const char *plat_name = fmd_fmri_get_platform();
- int *plat_upos2dram[] = {
- unib_upos2dram,
- cams_upos2dram,
- camt_upos2dram,
- fies_upos2dram,
- fiet_upos2dram
- };
-
- /* get DRAM map from platform name */
- for (i = 0; dram_plat[i].platnm != NULL; i++) {
- if (strcmp(plat_name, dram_plat[i].platnm) == 0) {
- plat = dram_plat[i].plat;
- break;
- }
- }
-
- if (plat != NONE) {
- dram = plat_upos2dram[plat][unit_position];
- } else {
- dram = -1;
- }
-
- return (dram);
-}
--- a/usr/src/cmd/fm/modules/sun4v/generic-mem/gmem_memerr.c Mon Apr 12 16:53:16 2010 -0700
+++ b/usr/src/cmd/fm/modules/sun4v/generic-mem/gmem_memerr.c Mon Apr 12 20:16:52 2010 -0400
@@ -19,8 +19,7 @@
* CDDL HEADER END
*/
/*
- * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
+ * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
*/
@@ -106,7 +105,7 @@
*/
gmem_mq_t *
mq_create(fmd_hdl_t *hdl, fmd_event_t *ep,
- uint64_t afar, uint16_t upos, uint16_t dram, uint16_t ckwd, uint64_t now)
+ uint64_t afar, uint16_t upos, uint16_t ckwd, uint64_t now)
{
gmem_mq_t *cp;
cp = fmd_hdl_zalloc(hdl, sizeof (gmem_mq_t), FMD_SLEEP);
@@ -114,7 +113,6 @@
cp->mq_ckwd = ckwd;
cp->mq_phys_addr = afar;
cp->mq_unit_position = upos;
- cp->mq_dram = (int16_t)dram;
cp->mq_ep = ep;
cp->mq_serdnm =
gmem_mq_serdnm_create(hdl, "mq", afar, ckwd, upos);
@@ -158,7 +156,7 @@
*/
void
mq_add(fmd_hdl_t *hdl, gmem_dimm_t *dimm, fmd_event_t *ep,
- uint64_t afar, uint16_t unit_position, uint16_t dram, uint16_t ckwd,
+ uint64_t afar, uint16_t unit_position, uint16_t ckwd,
uint64_t now)
{
gmem_mq_t *ip, *jp;
@@ -180,7 +178,7 @@
ip = gmem_list_next(ip);
}
}
- jp = mq_create(hdl, ep, afar, unit_position, dram, cw, now);
+ jp = mq_create(hdl, ep, afar, unit_position, cw, now);
if (ip == NULL)
gmem_list_append(&dimm->mq_root[cw], jp);
else
@@ -216,9 +214,8 @@
/*
* Check the MQSC index lists (one for each checkword) by making a
- * complete pass through each list, checking if the criteria for either
- * Rule 4A or 4B have been met. Rule 4A checking is done for each checkword;
- * 4B check is done at end.
+ * complete pass through each list, checking if the criteria for
+ * Rule 4A has been met. Rule 4A checking is done for each checkword.
*
* Rule 4A: fault a DIMM "whenever Solaris reports two or more CEs from
* two or more different physical addresses on each of two or more different
@@ -228,27 +225,15 @@
* from one bit position, with unique addresses, and two from another,
* also with unique addresses, and the lower 6 bits of all the addresses
* are the same."
- *
- * Rule 4B: fault a DIMM "whenever Solaris reports two or more CEs from
- * two or more different physical addresses on each of three or more
- * different outputs from the same DRAM within 72 hours of each other, as
- * long as the three outputs do not all correspond to the same relative
- * bit position in their respective checkwords. [Note: This means at least
- * 6 CEs; two from one DRAM output signal, with unique addresses, two from
- * another output from the same DRAM, also with unique addresses, and two
- * more from yet another output from the same DRAM, again with unique
- * addresses, as long as the three outputs do not all correspond to the
- * same relative bit position in their respective checkwords.]"
*/
void
-mq_check(fmd_hdl_t *hdl, gmem_dimm_t *dimm, int16_t dram)
+mq_check(fmd_hdl_t *hdl, gmem_dimm_t *dimm)
{
- int upos_pairs, curr_upos, cw, i, j, k;
+ int upos_pairs, curr_upos, cw, i, j;
nvlist_t *flt, *rsc;
typedef struct upos_pair {
int upos;
- int dram;
gmem_mq_t *mq1;
gmem_mq_t *mq2;
} upos_pair_t;
@@ -293,10 +278,9 @@
continue;
} else if (upos_array[i].mq1 == NULL) {
/* Have a pair. Add to upos_array[] */
- fmd_hdl_debug(hdl, "pair:upos=%d dram=%d",
- curr_upos, ip->mq_dram);
+ fmd_hdl_debug(hdl, "pair:upos=%d",
+ curr_upos);
upos_array[i].upos = curr_upos;
- upos_array[i].dram = ip->mq_dram;
upos_array[i].mq1 = gmem_list_prev(ip);
upos_array[i].mq2 = ip;
upos_array[++i].mq1 = NULL;
@@ -326,84 +310,15 @@
upos_pairs = i;
assert(upos_pairs < 16);
}
-
- if ((dram == INVALID_DRAM) || (upos_pairs < 3)) {
- fmd_hdl_debug(hdl, "Skip rules 4B upos_pairs=%d\n", upos_pairs);
- return; /* 4B violation needs at least 3 pairs */
- }
-
- /*
- * Walk through checking for a rule 4B violation.
- * Since we only keep track of two CE pairs per CW we'll only have
- * a max of potentially 16 lements in the array. So as not to run
- * off the end of the array, need to be careful with i and j indexes.
- */
- for (i = 0; i < (upos_pairs - 2); i++) {
- for (j = i+1; j < (upos_pairs - 1); j++) {
- if (upos_array[i].dram != upos_array[j].dram)
- /*
- * These two pairs aren't the same dram;
- * continue looking for pairs that are.
- */
- continue;
- for (k = j+1; k < upos_pairs; k++) {
- if (upos_array[j].dram != upos_array[k].dram)
- /*
- * DRAMs must be the same for a rule
- * 4B violation. Continue looking for
- * pairs that have the same DRAMs.
- */
- continue;
- if ((upos_array[i].upos !=
- upos_array[j].upos) ||
- (upos_array[j].upos !=
- upos_array[k].upos)) {
- rsc = gmem_find_dimm_rsc(hdl,
- dimm->dimm_serial);
- flt = fmd_nvl_create_fault(hdl,
- GMEM_FAULT_DIMM_4B, GMEM_FLTMAXCONF,
- NULL, gmem_dimm_fru(dimm), rsc);
- fmd_case_add_ereport(hdl,
- dimm->dimm_case.cc_cp,
- upos_array[i].mq1->mq_ep);
- fmd_case_add_ereport(hdl,
- dimm->dimm_case.cc_cp,
- upos_array[i].mq2->mq_ep);
- fmd_case_add_ereport(hdl,
- dimm->dimm_case.cc_cp,
- upos_array[j].mq1->mq_ep);
- fmd_case_add_ereport(hdl,
- dimm->dimm_case.cc_cp,
- upos_array[j].mq2->mq_ep);
- fmd_case_add_ereport(hdl,
- dimm->dimm_case.cc_cp,
- upos_array[k].mq1->mq_ep);
- fmd_case_add_ereport(hdl,
- dimm->dimm_case.cc_cp,
- upos_array[k].mq2->mq_ep);
- fmd_case_add_suspect(hdl,
- dimm->dimm_case.cc_cp, flt);
- fmd_case_solve(hdl,
- dimm->dimm_case.cc_cp);
- dimm->dimm_flags |= GMEM_F_FAULTING;
- gmem_dimm_dirty(hdl, dimm);
- if (rsc != NULL)
- nvlist_free(rsc);
- return;
- }
- }
- }
- }
}
/*ARGSUSED*/
gmem_evdisp_t
gmem_ce(fmd_hdl_t *hdl, fmd_event_t *ep, nvlist_t *nvl, const char *class)
{
- uint16_t symbol_pos, erpt_dram, cw;
+ uint16_t symbol_pos, cw;
uint64_t phyaddr, offset;
uint32_t filter_ratio = 0;
- int16_t dram;
gmem_dimm_t *dimm;
gmem_page_t *page;
nvlist_t *fru = NULL;
@@ -468,31 +383,26 @@
/*
* Add to MQSC correlation lists all CEs which pass validity
* checks above. If there is no symbol_pos & relative ckword
- * in the ereport, skip rules 4A & 4B checking.
- * If there is no dram in the ereport, skip the rule 4B checking.
+ * in the ereport, skip rule 4A checking.
*/
- if (nvlist_lookup_uint16(nvl, GMEM_ERPT_PAYLOAD_DRAM, &erpt_dram) != 0)
- dram = INVALID_DRAM;
- else
- dram = (int16_t)erpt_dram;
err = nvlist_lookup_uint16(nvl, GMEM_ERPT_PAYLOAD_SYMBOLPOS,
&symbol_pos);
err |= nvlist_lookup_uint16(nvl, GMEM_ERPT_PAYLOAD_CKW, &cw);
if (err == 0)
- fmd_hdl_debug(hdl, "symbol_pos=%d dram=%d cw=%d",
- symbol_pos, dram, cw);
+ fmd_hdl_debug(hdl, "symbol_pos=%d cw=%d",
+ symbol_pos, cw);
if (!(dimm->dimm_flags & GMEM_F_FAULTING) && (err == 0)) {
uint64_t *now;
uint_t nelem;
if (nvlist_lookup_uint64_array(nvl,
"__tod", &now, &nelem) == 0) {
- mq_add(hdl, dimm, ep, phyaddr, symbol_pos, dram,
+ mq_add(hdl, dimm, ep, phyaddr, symbol_pos,
cw, *now);
mq_prune(hdl, dimm, *now);
- mq_check(hdl, dimm, dram);
+ mq_check(hdl, dimm);
}
}