xref: /illumos-gate/usr/src/cmd/fm/eversholt/files/i386/i86pc/intel.esc (revision d8a7fe16f62711cdc5c4267da8b34ff24a6b668c)
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/*
23 * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
24 * Use is subject to license terms.
25 */
26
27#pragma dictionary "INTEL"
28
29/*
30 * Eversholt rules for the intel CPU/Memory
31 */
32
33/*
34 * Ereports for Simple error codes.
35 */
36
37#define SMPL_EVENT(leafclass, t) \
38	event ereport.cpu.intel.leafclass@chip/core/strand { within(t) }
39
40SMPL_EVENT(unknown, 1s);
41SMPL_EVENT(unclassified, 1s);
42SMPL_EVENT(microcode_rom_parity, 1s);
43SMPL_EVENT(external, 1s);
44SMPL_EVENT(frc, 1s);
45SMPL_EVENT(internal_timer, 1s);
46SMPL_EVENT(internal_parity, 1s);
47SMPL_EVENT(internal_unclassified, 1s);
48
49/*
50 * Propogations for all but "external" and "unknown" simple errors.
51 * If the error is uncorrected we produce a fault immediately, otherwise
52 * we diagnose it to an upset and decalre a fault when the SERD engine
53 * trips. prop statement for ereport.cpu.intel.internal_unclassified is
54 * moved to the Nehalem EX section to deal with poison case.
55 */
56
57engine serd.cpu.intel.simple@chip/core/strand, N=3, T=72h;
58event fault.cpu.intel.internal@chip/core/strand,
59    engine=serd.cpu.intel.simple@chip/core/strand;
60
61prop fault.cpu.intel.internal@chip/core/strand
62    { payloadprop("error_uncorrected") == 1 ? setserdincrement(4) : 1} (0)->
63    ereport.cpu.intel.microcode_rom_parity@chip/core/strand,
64    ereport.cpu.intel.internal_timer@chip/core/strand,
65    ereport.cpu.intel.internal_parity@chip/core/strand,
66    ereport.cpu.intel.unclassified@chip/core/strand,
67    ereport.cpu.intel.frc@chip/core/strand;
68
69/*
70 * Ereports for Compound error codes.  These are in pairs "foo" and "foo_uc"
71 * for the corrected and uncorrected version of each error type.  All are
72 * detected at chip/core/strand.
73 */
74
75#define	CMPND_EVENT(leafclass, t) \
76	event ereport.cpu.intel.leafclass@chip/core/strand { within(t) }; \
77	event ereport.cpu.intel.leafclass/**/_uc@chip/core/strand { within(t) }
78
79/*
80 * Ereports for Compound error codes - intel errors
81 */
82CMPND_EVENT(l0cache, 1s);
83CMPND_EVENT(l1cache, 1s);
84CMPND_EVENT(l2cache, 1s);
85CMPND_EVENT(cache, 1s);
86
87/*
88 * Ereports for Compound error codes - TLB errors
89 */
90CMPND_EVENT(l0dtlb, 1s);
91CMPND_EVENT(l1dtlb, 1s);
92CMPND_EVENT(l2dtlb, 1s);
93CMPND_EVENT(dtlb, 1s);
94
95CMPND_EVENT(l0itlb, 1s);
96CMPND_EVENT(l1itlb, 1s);
97CMPND_EVENT(l2itlb, 1s);
98CMPND_EVENT(itlb, 1s);
99
100CMPND_EVENT(l0tlb, 1s);
101CMPND_EVENT(l1tlb, 1s);
102CMPND_EVENT(l2tlb, 1s);
103CMPND_EVENT(tlb, 1s);
104
105/*
106 * Ereports for Compound error codes - memory hierarchy errors
107 */
108CMPND_EVENT(l0dcache, 1s);
109CMPND_EVENT(l1dcache, 1s);
110CMPND_EVENT(l2dcache, 1s);
111CMPND_EVENT(dcache, 1s);
112
113CMPND_EVENT(l0icache, 1s);
114CMPND_EVENT(l1icache, 1s);
115CMPND_EVENT(l2icache, 1s);
116CMPND_EVENT(icache, 1s);
117
118/*
119 * Ereports for Compound error codes - bus and interconnect errors
120 */
121CMPND_EVENT(bus_interconnect, 1s);
122CMPND_EVENT(bus_interconnect_memory, 1s);
123CMPND_EVENT(bus_interconnect_io, 1s);
124
125/*
126 * Compound error propogations.
127 *
128 * We resist the temptation propogate, for example, a single dcache fault
129 * to all ereports mentioning dcache (l0dcache, l1dcache, l2dcache, dcache).
130 * Instead we will diagnose a distinct fault for each possible cache level,
131 * whether or not current chips have dcaches at all levels.
132 *
133 * Corrected errors are SERDed and produce a fault when the engine fires;
134 * the same fault is diagnosed immediately for a corresponding uncorrected
135 * error.
136 */
137
138#define	CMPND_FLT_PROP_1(erptleaf, fltleaf, n, t)			\
139	engine serd.cpu.intel.fltleaf@chip/core/strand, N=n, T=t;	\
140	event fault.cpu.intel.fltleaf@chip/core/strand,			\
141	    engine=serd.cpu.intel.fltleaf@chip/core/strand;		\
142									\
143	prop fault.cpu.intel.fltleaf@chip/core/strand (0)->		\
144	    ereport.cpu.intel.erptleaf@chip/core/strand;		\
145									\
146	prop fault.cpu.intel.fltleaf@chip/core/strand			\
147	    { setserdincrement(n + 1) } (0)->				\
148	    ereport.cpu.intel.erptleaf/**/_uc@chip/core/strand
149
150#define	CMPND_FLT_PROP_2(erptleaf, fltleaf, n, t)			\
151	engine serd.cpu.intel.fltleaf@chip/core/strand, N=n, T=t;	\
152	event fault.cpu.intel.fltleaf@chip/core/strand, retire=0, response=0,\
153	    engine=serd.cpu.intel.fltleaf@chip/core/strand;		\
154									\
155	prop fault.cpu.intel.fltleaf@chip/core/strand (0)->		\
156	    ereport.cpu.intel.erptleaf@chip/core/strand;		\
157									\
158	prop fault.cpu.intel.fltleaf@chip/core/strand 			\
159	    { setserdincrement(n + 1) } (0)->				\
160	    ereport.cpu.intel.erptleaf/**/_uc@chip/core/strand
161
162CMPND_FLT_PROP_1(l0cache, l0cache, 3, 72h);
163CMPND_FLT_PROP_1(l1cache, l1cache, 3, 72h);
164CMPND_FLT_PROP_1(l2cache, l2cache, 3, 72h);
165CMPND_FLT_PROP_1(cache, cache, 12, 72h);
166
167CMPND_FLT_PROP_1(l0dtlb, l0dtlb, 3, 72h);
168CMPND_FLT_PROP_1(l1dtlb, l1dtlb, 3, 72h);
169CMPND_FLT_PROP_1(l2dtlb, l2dtlb, 3, 72h);
170CMPND_FLT_PROP_1(dtlb, dtlb, 12, 72h);
171
172CMPND_FLT_PROP_1(l0itlb, l0itlb, 3, 72h);
173CMPND_FLT_PROP_1(l1itlb, l1itlb, 3, 72h);
174CMPND_FLT_PROP_1(l2itlb, l2itlb, 3, 72h);
175CMPND_FLT_PROP_1(itlb, itlb, 12, 72h);
176
177CMPND_FLT_PROP_1(l0tlb, l0tlb, 3, 72h);
178CMPND_FLT_PROP_1(l1tlb, l1tlb, 3, 72h);
179CMPND_FLT_PROP_1(l2tlb, l2tlb, 3, 72h);
180CMPND_FLT_PROP_1(tlb, tlb, 12, 72h);
181
182CMPND_FLT_PROP_1(l0dcache, l0dcache, 3, 72h);
183CMPND_FLT_PROP_1(l1dcache, l1dcache, 3, 72h);
184CMPND_FLT_PROP_1(l2dcache, l2dcache, 3, 72h);
185CMPND_FLT_PROP_1(dcache, dcache, 12, 72h);
186
187CMPND_FLT_PROP_1(l0icache, l0icache, 3, 72h);
188CMPND_FLT_PROP_1(l1icache, l1icache, 3, 72h);
189CMPND_FLT_PROP_1(l2icache, l2icache, 3, 72h);
190CMPND_FLT_PROP_1(icache, icache, 12, 72h);
191
192CMPND_FLT_PROP_2(bus_interconnect, bus_interconnect, 10, 72h);
193CMPND_FLT_PROP_2(bus_interconnect_memory, bus_interconnect_memory, 10, 72h);
194CMPND_FLT_PROP_2(bus_interconnect_io, bus_interconnect_io, 10, 72h);
195
196event upset.discard@chip/core/strand;
197
198prop upset.discard@chip/core/strand (0)->
199    ereport.cpu.intel.external@chip/core/strand,
200    ereport.cpu.intel.unknown@chip/core/strand;
201
202/* errors detected in northbridge */
203
204
205/*
206 * SET_ADDR and SET_OFFSET are used to set a payload value in the fault that
207 * we diagnose for page faults, to record the physical address of the faulting
208 * page.
209 */
210#define	SET_ADDR (!payloadprop_defined("physaddr") || \
211    setpayloadprop("asru-physaddr", payloadprop("physaddr")))
212
213#define SET_OFFSET (!payloadprop_defined("offset") || \
214    setpayloadprop("asru-offset", payloadprop("offset")))
215
216#define EREPORT_BUS_ERROR						\
217    ereport.cpu.intel.bus_interconnect_memory_uc@chip/core/strand,	\
218    ereport.cpu.intel.bus_interconnect_uc@chip/core/strand,		\
219    ereport.cpu.intel.bus_interconnect_memory@chip/core/strand,		\
220    ereport.cpu.intel.bus_interconnect@chip/core/strand,		\
221    ereport.cpu.intel.external@chip/core/strand
222
223engine stat.ce_pgflt@memory-controller/dram-channel/dimm;
224
225event ereport.cpu.intel.nb.mem_ue@motherboard/memory-controller{within(12s)};
226event ereport.cpu.intel.nb.ddr2_mem_ue@
227    motherboard/memory-controller{within(12s)};
228event ereport.cpu.intel.nb.fbd.ma@motherboard/memory-controller{within(12s)};
229event fault.memory.intel.page_ue@
230    motherboard/memory-controller/dram-channel/dimm/rank,
231    message=0, response=0;
232event fault.memory.intel.dimm_ue@
233    motherboard/memory-controller/dram-channel/dimm/rank;
234
235prop fault.memory.intel.page_ue@
236    motherboard/memory-controller/dram-channel/dimm/rank[rank_num]
237    { payloadprop_defined("rank") && rank_num == payloadprop("rank") &&
238    (payloadprop_defined("physaddr") || payloadprop_defined("offset")) &&
239    SET_ADDR && SET_OFFSET } (1)->
240    ereport.cpu.intel.nb.mem_ue@motherboard/memory-controller,
241    ereport.cpu.intel.nb.ddr2_mem_ue@motherboard/memory-controller,
242    ereport.cpu.intel.nb.fbd.ma@motherboard/memory-controller;
243
244prop fault.memory.intel.dimm_ue@
245    motherboard/memory-controller/dram-channel/dimm/rank[rank_num]
246    { payloadprop_defined("rank") && rank_num == payloadprop("rank") } (1)->
247    ereport.cpu.intel.nb.mem_ue@motherboard/memory-controller,
248    ereport.cpu.intel.nb.ddr2_mem_ue@motherboard/memory-controller,
249    ereport.cpu.intel.nb.fbd.ma@motherboard/memory-controller;
250
251event upset.memory.intel.discard@motherboard/memory-controller{within(1s)};
252
253prop upset.memory.intel.discard@motherboard/memory-controller (0)->
254    ereport.cpu.intel.nb.mem_ue@motherboard/memory-controller,
255    ereport.cpu.intel.nb.ddr2_mem_ue@motherboard/memory-controller,
256    ereport.cpu.intel.nb.fbd.ma@motherboard/memory-controller;
257
258prop upset.memory.intel.discard@motherboard/memory-controller (0)->
259    EREPORT_BUS_ERROR;
260
261#define PAGE_CE_COUNT   2
262#define PAGE_CE_TIME    72h
263#define DIMM_CE_COUNT   10
264#define DIMM_CE_TIME    1week
265
266#define MBDIMM motherboard/memory-controller/dram-channel/dimm
267event ereport.cpu.intel.nb.mem_ce@MBDIMM/rank{within(12s)};
268event ereport.cpu.intel.nb.ddr2_mem_ce@MBDIMM/rank{within(12s)};
269event ereport.cpu.intel.nb.ddr2_mem_ce@
270    motherboard/memory-controller{within(12s)};
271
272engine serd.memory.intel.page_ce@MBDIMM/rank, N=PAGE_CE_COUNT, T=PAGE_CE_TIME;
273event fault.memory.intel.page_ce@MBDIMM/rank, message=0, response=0,
274    count=stat.ce_pgflt@MBDIMM, engine=serd.memory.intel.page_ce@MBDIMM/rank;
275prop fault.memory.intel.page_ce@MBDIMM/rank
276    { (payloadprop_defined("physaddr") || payloadprop_defined("offset")) &&
277    SET_ADDR && SET_OFFSET } (0)->
278    ereport.cpu.intel.nb.mem_ce@MBDIMM/rank,
279    ereport.cpu.intel.nb.ddr2_mem_ce@MBDIMM/rank;
280
281engine serd.memory.intel.dimm_ce@MBDIMM/rank, N=DIMM_CE_COUNT, T=DIMM_CE_TIME;
282event fault.memory.intel.dimm_ce@MBDIMM/rank,
283    engine=serd.memory.intel.dimm_ce@MBDIMM/rank;
284prop fault.memory.intel.dimm_ce@MBDIMM/rank
285    { !confprop_defined(MBDIMM, "dimm-size") &&
286    count(stat.ce_pgflt@MBDIMM) > 512 } (1)->
287    ereport.cpu.intel.nb.mem_ce@MBDIMM/rank,
288    ereport.cpu.intel.nb.ddr2_mem_ce@MBDIMM/rank;
289#define DIMM_CE(dimm_size, n, t, fault_rate) \
290	prop fault.memory.intel.dimm_ce@MBDIMM/rank { \
291	    confprop(MBDIMM, "dimm-size") == dimm_size && \
292	    count(stat.ce_pgflt@MBDIMM) > fault_rate && \
293	    setserdn(n) & setserdt(t) } (1)-> \
294    	    ereport.cpu.intel.nb.mem_ce@MBDIMM/rank, \
295	    ereport.cpu.intel.nb.ddr2_mem_ce@MBDIMM/rank;
296
297DIMM_CE("8G", 8, 1week, 2000)
298DIMM_CE("4G", 4, 1week, 1500)
299DIMM_CE("2G", 4, 2week, 1000)
300DIMM_CE("1G", 4, 4week, 500)
301DIMM_CE("512M", 4, 8week, 250)
302DIMM_CE("256M", 4, 16week, 125)
303
304prop upset.memory.intel.discard@motherboard/memory-controller (0)->
305    ereport.cpu.intel.nb.ddr2_mem_ce@motherboard/memory-controller;
306
307event ereport.cpu.intel.nb.fbd.alert@rank{within(12s)};
308event fault.memory.intel.fbd.alert@rank, retire=0;
309
310prop fault.memory.intel.fbd.alert@rank (1)->
311    ereport.cpu.intel.nb.fbd.alert@rank;
312
313prop fault.memory.intel.fbd.alert@rank (0)->
314    EREPORT_BUS_ERROR;
315
316event ereport.cpu.intel.nb.fbd.crc@rank{within(12s)};
317event fault.memory.intel.fbd.crc@rank, retire=0;
318
319prop fault.memory.intel.fbd.crc@rank (1)->
320    ereport.cpu.intel.nb.fbd.crc@rank;
321
322prop fault.memory.intel.fbd.crc@rank (0)-> EREPORT_BUS_ERROR;
323
324event ereport.cpu.intel.nb.fbd.reset_timeout@memory-controller {within(12s)};
325event fault.memory.intel.fbd.reset_timeout@memory-controller, retire=0;
326
327prop fault.memory.intel.fbd.reset_timeout@memory-controller (1)->
328    ereport.cpu.intel.nb.fbd.reset_timeout@memory-controller;
329
330prop fault.memory.intel.fbd.reset_timeout@memory-controller (0)->
331    EREPORT_BUS_ERROR;
332
333event ereport.cpu.intel.nb.fbd.ch@dram-channel {within(12s)};
334engine serd.cpu.intel.nb.fbd.ch@dram-channel, N=2, T=1month;
335event fault.memory.intel.fbd.ch@dram-channel, retire=0,
336    engine=serd.cpu.intel.nb.fbd.ch@dram-channel;
337
338prop fault.memory.intel.fbd.ch@dram-channel (1)->
339    ereport.cpu.intel.nb.fbd.ch@dram-channel;
340
341prop fault.memory.intel.fbd.ch@dram-channel (0)->
342    EREPORT_BUS_ERROR;
343
344event ereport.cpu.intel.nb.fbd.otf@dram-channel {within(12s)};
345engine serd.cpu.intel.nb.fbd_otf@dram-channel, N=2, T=1week;
346event fault.memory.intel.fbd.otf@dram-channel, retire=0, response=0,
347    engine=serd.cpu.intel.nb.fbd_otf@dram-channel;
348
349prop fault.memory.intel.fbd.otf@dram-channel (1)->
350    ereport.cpu.intel.nb.fbd.otf@dram-channel;
351
352event ereport.cpu.intel.nb.otf@motherboard {within(12s)};
353event fault.cpu.intel.nb.otf@motherboard, retire=0, response=0;
354
355prop fault.cpu.intel.nb.otf@motherboard (1)->
356    ereport.cpu.intel.nb.otf@motherboard;
357
358event ereport.cpu.intel.nb.unknown@motherboard {within(12s)};
359event ereport.cpu.intel.nb.unknown@memory-controller {within(12s)};
360event ereport.cpu.intel.nb.unknown@memory-controller/dram-channel {within(12s)};
361event ereport.cpu.intel.nb.spd@memory-controller/dram-channel {within(12s)};
362event ereport.cpu.intel.nb.ddr2_spd@
363    memory-controller/dram-channel {within(12s)};
364event upset.discard@memory-controller;
365
366prop upset.discard@memory-controller (0)->
367    ereport.cpu.intel.nb.unknown@motherboard,
368    ereport.cpu.intel.nb.unknown@memory-controller,
369    ereport.cpu.intel.nb.unknown@memory-controller/dram-channel,
370    ereport.cpu.intel.nb.spd@memory-controller/dram-channel,
371    ereport.cpu.intel.nb.ddr2_spd@memory-controller/dram-channel;
372
373event ereport.cpu.intel.nb.mem_ds@memory-controller{within(30s)};
374event ereport.cpu.intel.nb.ddr2_mem_ds@memory-controller{within(30s)};
375event fault.memory.intel.fbd.mem_ds@memory-controller/dram-channel/dimm/rank,
376    retire=0;
377
378prop fault.memory.intel.fbd.mem_ds@
379    memory-controller/dram-channel/dimm/rank[rank_num]
380    { payloadprop_defined("rank") && rank_num == payloadprop("rank") } (1)->
381    ereport.cpu.intel.nb.mem_ds@memory-controller,
382    ereport.cpu.intel.nb.ddr2_mem_ds@memory-controller;
383
384event ereport.cpu.intel.nb.fsb@chip{within(12s)};
385event fault.cpu.intel.nb.fsb@chip, retire=0;
386
387prop fault.cpu.intel.nb.fsb@chip (1)->
388    ereport.cpu.intel.nb.fsb@chip;
389
390prop fault.cpu.intel.nb.fsb@chip (0)-> EREPORT_BUS_ERROR;
391
392event ereport.cpu.intel.nb.ie@motherboard{within(12s)};
393event fault.cpu.intel.nb.ie@motherboard, retire=0;
394event upset.cpu.intel.nb.ie_ce@motherboard{within(12s)};
395
396prop upset.cpu.intel.nb.ie_ce@motherboard
397    { payloadprop("intel-error-list") == "B6" } (0)->
398    ereport.cpu.intel.nb.ie@motherboard;
399
400prop fault.cpu.intel.nb.ie@motherboard
401    { payloadprop("intel-error-list") != "B6" } (1)->
402    ereport.cpu.intel.nb.ie@motherboard;
403
404prop fault.cpu.intel.nb.ie@motherboard (0)-> EREPORT_BUS_ERROR;
405
406event ereport.cpu.intel.nb.dma@motherboard{within(12s)};
407event fault.cpu.intel.nb.dma@motherboard, retire=0, response=0;
408
409prop fault.cpu.intel.nb.dma@motherboard (1)->
410    ereport.cpu.intel.nb.dma@motherboard;
411
412prop fault.cpu.intel.nb.dma@motherboard (0)-> EREPORT_BUS_ERROR;
413
414event ereport.cpu.intel.nb.esi@motherboard{within(12s)};
415event ereport.cpu.intel.nb.pex@hostbridge{within(12s)};
416event upset.cpu.intel.nb.pex@hostbridge;
417
418prop upset.cpu.intel.nb.pex@hostbridge (1)->
419    ereport.cpu.intel.nb.esi@motherboard,
420    ereport.cpu.intel.nb.pex@hostbridge;
421
422prop upset.cpu.intel.nb.pex@hostbridge (0)-> EREPORT_BUS_ERROR;
423
424event ereport.cpu.intel.nb.unknown@rank{within(12s)};
425event upset.discard@rank;
426
427prop upset.discard@rank (1)->
428    ereport.cpu.intel.nb.unknown@rank;
429
430prop upset.discard@rank (0)-> EREPORT_BUS_ERROR;
431
432/*
433 * CPU integrated memory controller
434 */
435
436#define CONTAINS_RANK (payloadprop_contains("resource", \
437    asru(chip/memory-controller/dram-channel/dimm/rank)) || \
438    payloadprop_contains("resource", \
439    asru(chip/memory-controller/dram-channel/dimm)))
440
441#define	STAT_CPU_MEM_CE_PGFLTS \
442    stat.ce_pgflt@chip/memory-controller/dram-channel/dimm
443
444#define SET_RES_OFFSET \
445    (!payloadprop_defined("resource[0].hc-specific.offset") || \
446    setpayloadprop("asru-offset", \
447    payloadprop("resource[0].hc-specific.offset")))
448
449engine STAT_CPU_MEM_CE_PGFLTS;
450
451event ereport.cpu.intel.quickpath.mem_ue@chip/memory-controller
452    {within(12s)};
453
454event fault.memory.intel.page_ue@
455    chip/memory-controller/dram-channel/dimm/rank,
456    message=0, response=0;		/* do not message individual pageflts */
457
458prop fault.memory.intel.page_ue@
459    chip/memory-controller/dram-channel/dimm/rank
460    { CONTAINS_RANK && (payloadprop_defined("physaddr") ||
461    payloadprop_defined("resource[0].hc-specific.offset")) &&
462    SET_ADDR && SET_RES_OFFSET } (0)->
463    ereport.cpu.intel.quickpath.mem_ue@chip/memory-controller;
464
465#define	CHIPDIMM chip/memory-controller/dram-channel/dimm
466
467event fault.memory.intel.dimm_ue@CHIPDIMM/rank;
468
469event error.memory.intel.dimm_ue_ep@CHIPDIMM/rank;
470event error.memory.intel.dimm_ue_ex@CHIPDIMM/rank;
471
472prop fault.memory.intel.dimm_ue@CHIPDIMM/rank (1)->
473   error.memory.intel.dimm_ue_ep@CHIPDIMM/rank,
474   error.memory.intel.dimm_ue_ex@CHIPDIMM/rank;
475
476prop error.memory.intel.dimm_ue_ep@CHIPDIMM/rank
477    { CONTAINS_RANK } (1)->
478    ereport.cpu.intel.quickpath.mem_ue@chip/memory-controller;
479
480prop fault.memory.intel.dimm_ue@CHIPDIMM/rank (0)-> EREPORT_BUS_ERROR;
481
482event ereport.cpu.intel.quickpath.mem_ce@
483    chip/memory-controller{within(12s)};
484
485engine serd.memory.intel.page_ce@CHIPDIMM/rank, N=PAGE_CE_COUNT, T=PAGE_CE_TIME;
486event fault.memory.intel.page_ce@CHIPDIMM/rank, message=0, response=0,
487    count=STAT_CPU_MEM_CE_PGFLTS,
488    engine=serd.memory.intel.page_ce@CHIPDIMM/rank;
489prop fault.memory.intel.page_ce@CHIPDIMM/rank
490    { CONTAINS_RANK && (payloadprop_defined("physaddr") ||
491    payloadprop_defined("resource[0].hc-specific.offset")) &&
492    SET_ADDR && SET_RES_OFFSET } (0)->
493    ereport.cpu.intel.quickpath.mem_ce@chip/memory-controller;
494
495engine serd.memory.intel.dimm_ce@CHIPDIMM, N=PAGE_CE_COUNT, T=PAGE_CE_TIME;
496event fault.memory.intel.dimm_ce@CHIPDIMM,
497    engine=serd.memory.intel.dimm_ce@CHIPDIMM;
498prop fault.memory.intel.dimm_ce@CHIPDIMM
499    { !confprop_defined(CHIPDIMM, "dimm-size") &&
500    count(STAT_CPU_MEM_CE_PGFLTS) > 512 } (0)->
501    ereport.cpu.intel.quickpath.mem_ce@chip/memory-controller;
502
503#define	CPU_MEM_DIMM_CE(dimm_size, n, t, fault_rate) \
504	prop fault.memory.intel.dimm_ce@CHIPDIMM { \
505	    confprop(CHIPDIMM, "dimm-size") == dimm_size && \
506	    count(STAT_CPU_MEM_CE_PGFLTS) > fault_rate && \
507	    setserdn(n) & setserdt(t) } (0)-> \
508	    ereport.cpu.intel.quickpath.mem_ce@ \
509	    chip/memory-controller;
510
511CPU_MEM_DIMM_CE("16G", 16, 1week, 2000)
512CPU_MEM_DIMM_CE("8G", 8, 1week, 2000)
513CPU_MEM_DIMM_CE("4G", 4, 1week, 1500)
514CPU_MEM_DIMM_CE("2G", 4, 2week, 1000)
515CPU_MEM_DIMM_CE("1G", 4, 4week, 500)
516CPU_MEM_DIMM_CE("512M", 4, 8week, 250)
517
518event ereport.cpu.intel.quickpath.mem_unknown@chip/memory-controller {within(12s)};
519event ereport.cpu.intel.quickpath.mem_unknown@chip/memory-controller/dram-channel
520    {within(12s)};
521event ereport.cpu.intel.quickpath.mem_unknown@
522    chip/memory-controller/dram-channel/dimm/rank{within(12s)};
523event upset.discard@chip/memory-controller;
524event upset.discard@chip/memory-controller/dram-channel/dimm/rank;
525
526prop upset.discard@chip/memory-controller (0)->
527    ereport.cpu.intel.quickpath.mem_unknown@chip/memory-controller,
528    ereport.cpu.intel.quickpath.mem_unknown@
529    chip/memory-controller/dram-channel;
530
531prop upset.discard@
532    chip/memory-controller/dram-channel/dimm/rank (1)->
533    ereport.cpu.intel.quickpath.mem_unknown@
534    chip/memory-controller/dram-channel/dimm/rank;
535
536event ereport.cpu.intel.quickpath.mem_parity@chip/memory-controller {within(1s)};
537event fault.cpu.intel.quickpath.mem_parity@chip/memory-controller;
538
539prop fault.cpu.intel.quickpath.mem_parity@chip/memory-controller (1)->
540    ereport.cpu.intel.quickpath.mem_parity@chip/memory-controller;
541
542event ereport.cpu.intel.quickpath.mem_addr_parity@chip/memory-controller {within(1s)};
543event fault.cpu.intel.quickpath.mem_addr_parity@
544    chip/memory-controller;
545event fault.cpu.intel.quickpath.mem_addr_parity@CHIPDIMM;
546event fault.cpu.intel.quickpath.mem_addr_parity@CHIPDIMM/rank;
547
548prop fault.cpu.intel.quickpath.mem_addr_parity@
549    chip/memory-controller (1)->
550    ereport.cpu.intel.quickpath.mem_addr_parity@chip/memory-controller;
551
552prop fault.cpu.intel.quickpath.mem_addr_parity@CHIPDIMM
553    { payloadprop_contains("resource", asru(CHIPDIMM)) } (1)->
554    ereport.cpu.intel.quickpath.mem_addr_parity@chip/memory-controller;
555
556prop fault.cpu.intel.quickpath.mem_addr_parity@CHIPDIMM/rank
557    { payloadprop_contains("resource", asru(CHIPDIMM/rank)) } (1)->
558    ereport.cpu.intel.quickpath.mem_addr_parity@chip/memory-controller;
559
560event ereport.cpu.intel.quickpath.mem_bad_addr@chip/memory-controller {within(1s)};
561event fault.cpu.intel.quickpath.mem_bad_addr@chip/memory-controller;
562
563prop fault.cpu.intel.quickpath.mem_bad_addr@chip/memory-controller (1)->
564    ereport.cpu.intel.quickpath.mem_bad_addr@chip/memory-controller;
565
566event ereport.cpu.intel.quickpath.mem_spare@chip/memory-controller {within(1s)};
567event fault.cpu.intel.quickpath.mem_spare@
568    chip/memory-controller/dram-channel/dimm;
569
570prop fault.cpu.intel.quickpath.mem_spare@
571    chip/memory-controller/dram-channel/dimm (1)->
572    ereport.cpu.intel.quickpath.mem_spare@chip/memory-controller;
573
574event ereport.cpu.intel.quickpath.mem_bad_id@chip/memory-controller {within(1s)};
575event fault.cpu.intel.quickpath.mem_bad_id@chip/memory-controller;
576
577prop fault.cpu.intel.quickpath.mem_bad_id@chip/memory-controller (1)->
578    ereport.cpu.intel.quickpath.mem_bad_id@chip/memory-controller;
579
580event ereport.cpu.intel.quickpath.mem_redundant@chip/memory-controller {within(1s)};
581engine serd.cpu.intel.quickpath.mem_redundant@CHIPDIMM, N=2, T=72h;
582event fault.cpu.intel.quickpath.mem_redundant@CHIPDIMM,
583    engine=serd.cpu.intel.quickpath.mem_redundant@CHIPDIMM;
584
585event error.cpu.intel.quickpath.mem_redundant@CHIPDIMM/rank;
586
587prop fault.cpu.intel.quickpath.mem_redundant@CHIPDIMM (1)->
588    error.cpu.intel.quickpath.mem_redundant@CHIPDIMM/rank<>;
589prop error.cpu.intel.quickpath.mem_redundant@CHIPDIMM/rank
590    { CONTAINS_RANK } (1)->
591    ereport.cpu.intel.quickpath.mem_redundant@
592    chip/memory-controller;
593
594#define	STATUS_UC	(payloadprop("error_uncorrected") == 1)
595event ereport.cpu.intel.quickpath.interconnect@chip
596    {within(1s)};
597event upset.cpu.intel.quickpath.interconnect@chip;
598/* Diagnose corrected events to upsets */
599prop upset.cpu.intel.quickpath.interconnect@chip
600    { !STATUS_UC } (1)->
601    ereport.cpu.intel.quickpath.interconnect@chip;
602
603engine serd.cpu.intel.quickpath.interconnect@chip,
604	N=3, T=72h;
605event fault.cpu.intel.quickpath.interconnect@chip,
606    engine=serd.cpu.intel.quickpath.interconnect@chip;
607
608/* Diagnose uncorrected events to faults */
609prop fault.cpu.intel.quickpath.interconnect@chip
610    { STATUS_UC } (0)->
611    ereport.cpu.intel.quickpath.interconnect@chip;
612
613
614/*
615 * Nehalem EX specific rules
616 */
617/* MBox errors */
618#define EX_MEM_EVENT(leafclass, t) \
619	event ereport.cpu.intel.quickpath.leafclass@ \
620        chip/memory-controller { within(t) }
621
622EX_MEM_EVENT(mem_lnktrns, 1s);
623EX_MEM_EVENT(mem_lnkpers, 1s);
624EX_MEM_EVENT(mem_sbfbdlinkerr, 1s);
625EX_MEM_EVENT(mem_nbfbdlnkerr, 1s);
626EX_MEM_EVENT(mem_lnkcrcvld, 1s);
627
628engine serd.cpu.intel.quickpath.mem_link_ce@chip/memory-controller,
629      N=500, T=1week;
630event fault.cpu.intel.quickpath.mem_link_ce@chip/memory-controller,
631      engine=serd.cpu.intel.quickpath.mem_link_ce@chip/memory-controller,
632      retire=0, response=0;
633
634prop fault.cpu.intel.quickpath.mem_link_ce@chip/memory-controller ->
635    ereport.cpu.intel.quickpath.mem_lnktrns@chip/memory-controller,
636    ereport.cpu.intel.quickpath.mem_lnkpers@chip/memory-controller,
637    ereport.cpu.intel.quickpath.mem_sbfbdlinkerr@chip/memory-controller,
638    ereport.cpu.intel.quickpath.mem_nbfbdlnkerr@chip/memory-controller,
639    ereport.cpu.intel.quickpath.mem_lnkcrcvld@chip/memory-controller;
640
641EX_MEM_EVENT(mem_lnkuncorr_uc, 1s);
642EX_MEM_EVENT(mem_lnkpers_uc, 1s);
643EX_MEM_EVENT(mem_sbfbdlinkerr_uc, 1s);
644EX_MEM_EVENT(mem_nbfbdlnkerr_uc, 1s);
645EX_MEM_EVENT(mem_lnkcrcvld_uc, 1s);
646
647event fault.cpu.intel.quickpath.mem_link_ue@chip/memory-controller,
648      retire=0;
649
650prop fault.cpu.intel.quickpath.mem_link_ue@chip/memory-controller ->
651    ereport.cpu.intel.quickpath.mem_lnkuncorr_uc@chip/memory-controller,
652    ereport.cpu.intel.quickpath.mem_lnkpers_uc@chip/memory-controller,
653    ereport.cpu.intel.quickpath.mem_sbfbdlinkerr_uc@chip/memory-controller,
654    ereport.cpu.intel.quickpath.mem_nbfbdlnkerr_uc@chip/memory-controller,
655    ereport.cpu.intel.quickpath.mem_lnkcrcvld_uc@chip/memory-controller;
656
657EX_MEM_EVENT(mem_ptrl_fsm_err, 1s);
658EX_MEM_EVENT(mem_errflw_fsm_fail, 1s);
659EX_MEM_EVENT(mem_vberr, 1s);
660
661engine serd.cpu.intel.quickpath.mem_controller_ce@chip/memory-controller,
662      N=500, T=1week;
663event fault.cpu.intel.quickpath.mem_controller_ce@chip/memory-controller,
664      engine=serd.cpu.intel.quickpath.mem_controller_ce@chip/memory-controller,
665      retire=0, response=0;
666
667prop fault.cpu.intel.quickpath.mem_controller_ce@chip/memory-controller ->
668    ereport.cpu.intel.quickpath.mem_ptrl_fsm_err@chip/memory-controller,
669    ereport.cpu.intel.quickpath.mem_errflw_fsm_fail@chip/memory-controller,
670    ereport.cpu.intel.quickpath.mem_vberr@chip/memory-controller;
671
672EX_MEM_EVENT(mem_ptrl_fsm_err_uc, 1s);
673EX_MEM_EVENT(mem_errflw_fsm_fail_uc, 1s);
674EX_MEM_EVENT(mem_mcpar_fsmerr_uc, 1s);
675EX_MEM_EVENT(mem_vberr_uc, 1s);
676EX_MEM_EVENT(mem_fberr_uc, 1s);
677
678event fault.cpu.intel.quickpath.mem_controller_ue@chip/memory-controller,
679      retire=0;
680
681prop fault.cpu.intel.quickpath.mem_controller_ue@chip/memory-controller ->
682    ereport.cpu.intel.quickpath.mem_ptrl_fsm_err_uc@chip/memory-controller,
683    ereport.cpu.intel.quickpath.mem_errflw_fsm_fail_uc@chip/memory-controller,
684    ereport.cpu.intel.quickpath.mem_mcpar_fsmerr_uc@chip/memory-controller,
685    ereport.cpu.intel.quickpath.mem_vberr_uc@chip/memory-controller,
686    ereport.cpu.intel.quickpath.mem_fberr_uc@chip/memory-controller;
687
688EX_MEM_EVENT(mem_scrubbing_uc, 1s);
689event fault.cpu.intel.quickpath.mem_scrubbing@
690    chip/memory-controller/dram-channel/dimm/rank,
691    response=0;
692
693prop fault.cpu.intel.quickpath.mem_scrubbing@
694    chip/memory-controller/dram-channel/dimm/rank[rank_num]
695    { payloadprop_defined("rank") && rank_num == payloadprop("rank") &&
696      (payloadprop_defined("physaddr") || payloadprop_defined("offset")) &&
697      SET_ADDR && SET_OFFSET } (1)->
698    ereport.cpu.intel.quickpath.mem_scrubbing_uc@chip/memory-controller;
699
700EX_MEM_EVENT(mem_ecc_uc, 12s);
701EX_MEM_EVENT(mem_even_parity_uc, 1s);
702
703EX_MEM_EVENT(mem_ecc, 12s);
704EX_MEM_EVENT(mem_even_parity, 1s);
705
706event error.memory.intel.ex_dimm_ce@
707    chip/memory-controller/dram-channel/dimm/rank;
708
709prop fault.memory.intel.page_ue@
710    chip/memory-controller/dram-channel/dimm/rank[rank_num]
711    { payloadprop_defined("rank") && rank_num == payloadprop("rank") &&
712      (payloadprop_defined("physaddr") || payloadprop_defined("offset")) &&
713      SET_ADDR && SET_OFFSET } (0)->
714    ereport.cpu.intel.quickpath.mem_ecc_uc@chip/memory-controller,
715    ereport.cpu.intel.quickpath.mem_even_parity_uc@chip/memory-controller;
716
717prop fault.memory.intel.page_ce@
718    chip/memory-controller/dram-channel/dimm/rank[rank_num]
719    { payloadprop_defined("rank") && rank_num == payloadprop("rank") &&
720      (payloadprop_defined("physaddr") || payloadprop_defined("offset")) &&
721      SET_ADDR && SET_OFFSET } (0)->
722    ereport.cpu.intel.quickpath.mem_ecc@chip/memory-controller,
723    ereport.cpu.intel.quickpath.mem_even_parity@chip/memory-controller;
724
725prop error.memory.intel.dimm_ue_ex@
726    chip/memory-controller/dram-channel/dimm/rank[rank_num]
727    { payloadprop_defined("rank") && rank_num == payloadprop("rank") } (1)->
728    ereport.cpu.intel.quickpath.mem_ecc_uc@chip/memory-controller,
729    ereport.cpu.intel.quickpath.mem_even_parity_uc@chip/memory-controller;
730
731prop fault.memory.intel.dimm_ce@
732    chip/memory-controller/dram-channel/dimm
733    { !confprop_defined(chip/memory-controller/dram-channel/dimm,
734    "dimm-size") && setserdn(10) & setserdt(1week) } (0)->
735    error.memory.intel.ex_dimm_ce@
736     chip/memory-controller/dram-channel/dimm/rank;
737prop error.memory.intel.ex_dimm_ce@
738    chip/memory-controller/dram-channel/dimm/rank[rank_num]
739    { payloadprop_defined("rank") && rank_num == payloadprop("rank") &&
740      !confprop_defined(chip/memory-controller/dram-channel/dimm,
741    "dimm-size") &&
742    count(STAT_CPU_MEM_CE_PGFLTS) > 512 } (1)->
743    ereport.cpu.intel.quickpath.mem_ecc@chip/memory-controller,
744    ereport.cpu.intel.quickpath.mem_even_parity@chip/memory-controller;
745
746#define	EX_CPU_MEM_DIMM_CE(dimm_size, n, t, fault_rate) \
747	prop fault.memory.intel.dimm_ce@ \
748	    chip/memory-controller/dram-channel/dimm { \
749	    confprop(chip/memory-controller/dram-channel/dimm, \
750	    "dimm-size") == dimm_size && \
751	    setserdn(n) & setserdt(t) } (0)-> \
752	    error.memory.intel.ex_dimm_ce@ \
753	    chip/memory-controller/dram-channel/dimm/rank; \
754	prop error.memory.intel.ex_dimm_ce@ \
755	    chip/memory-controller/dram-channel/dimm/rank[rank_num] { \
756            payloadprop_defined("rank") && rank_num == payloadprop("rank") && \
757	    confprop(chip/memory-controller/dram-channel/dimm, \
758	    "dimm-size") == dimm_size && \
759	    count(STAT_CPU_MEM_CE_PGFLTS) > fault_rate } (1)-> \
760            ereport.cpu.intel.quickpath.mem_ecc@chip/memory-controller, \
761            ereport.cpu.intel.quickpath.mem_even_parity@chip/memory-controller;
762
763EX_CPU_MEM_DIMM_CE("16G", 16, 1week, 2000)
764EX_CPU_MEM_DIMM_CE("8G", 8, 1week, 2000)
765EX_CPU_MEM_DIMM_CE("4G", 4, 1week, 1500)
766EX_CPU_MEM_DIMM_CE("2G", 4, 2week, 1000)
767EX_CPU_MEM_DIMM_CE("1G", 4, 4week, 500)
768
769event upset.memory.intel.discard@chip/memory-controller{within(1s)};
770
771prop upset.memory.intel.discard@chip/memory-controller (0)->
772    ereport.cpu.intel.quickpath.mem_scrubbing_uc@chip/memory-controller,
773    ereport.cpu.intel.quickpath.mem_ecc_uc@chip/memory-controller,
774    ereport.cpu.intel.quickpath.mem_even_parity_uc@chip/memory-controller,
775    ereport.cpu.intel.quickpath.mem_ecc@chip/memory-controller,
776    ereport.cpu.intel.quickpath.mem_even_parity@chip/memory-controller;
777
778EX_MEM_EVENT(mem_failover_mir, 1s);
779event fault.cpu.intel.quickpath.mem_failover_mir@chip/memory-controller,
780      retire=0;
781
782prop fault.cpu.intel.quickpath.mem_failover_mir@chip/memory-controller ->
783    ereport.cpu.intel.quickpath.mem_failover_mir@chip/memory-controller;
784
785/*
786 * RBox errors
787 */
788#define EX_EVENT(leafclass, t) \
789	event ereport.cpu.intel.quickpath.leafclass@chip { within(t) }
790
791engine serd.cpu.intel.quickpath.bus_interconnect@chip,
792	N=3, T=72h;
793event fault.cpu.intel.quickpath.bus_interconnect@chip,
794    engine=serd.cpu.intel.quickpath.bus_interconnect@chip,
795    retire=0;
796
797EX_EVENT(bus_retry_abort, 1s);
798EX_EVENT(bus_link_init_ce, 1s);
799event upset.cpu.intel.quickpath.discard@chip;
800
801prop upset.cpu.intel.quickpath.discard@chip (0)->
802    ereport.cpu.intel.quickpath.bus_retry_abort@chip,
803    ereport.cpu.intel.quickpath.bus_link_init_ce@chip;
804
805EX_EVENT(bus_unknown, 1s);
806EX_EVENT(bus_single_ecc, 1s);
807EX_EVENT(bus_crc_flit, 1s);
808
809prop fault.cpu.intel.quickpath.bus_interconnect@chip (0)->
810    ereport.cpu.intel.quickpath.bus_unknown@chip,
811    ereport.cpu.intel.quickpath.bus_single_ecc@chip,
812    ereport.cpu.intel.quickpath.bus_crc_flit@chip;
813
814EX_EVENT(bus_unknown_external, 1s);
815EX_EVENT(bus_crc_flit_external, 1s);
816prop upset.cpu.intel.quickpath.discard@chip (0)->
817    ereport.cpu.intel.quickpath.bus_unknown_external@chip,
818    ereport.cpu.intel.quickpath.bus_crc_flit_external@chip;
819
820EX_EVENT(bus_unknown_uc, 1s);
821EX_EVENT(bus_opr_poison_err, 1s);
822EX_EVENT(bus_eot_parity, 1s);
823EX_EVENT(bus_rta_parity, 1s);
824EX_EVENT(bus_bad_sbu_route, 1s);
825EX_EVENT(bus_bad_msg, 1s);
826EX_EVENT(bus_bad_vn_credit, 1s);
827EX_EVENT(bus_hdr_double_ecc, 1s);
828EX_EVENT(bus_link_retry_err, 1s);
829
830prop fault.cpu.intel.quickpath.bus_interconnect@chip
831    { setserdincrement(4) } (0)->
832    ereport.cpu.intel.quickpath.bus_unknown_uc@chip,
833    ereport.cpu.intel.quickpath.bus_opr_poison_err@chip,
834    ereport.cpu.intel.quickpath.bus_eot_parity@chip,
835    ereport.cpu.intel.quickpath.bus_rta_parity@chip,
836    ereport.cpu.intel.quickpath.bus_bad_sbu_route@chip,
837    ereport.cpu.intel.quickpath.bus_bad_msg@chip,
838    ereport.cpu.intel.quickpath.bus_bad_vn_credit@chip,
839    ereport.cpu.intel.quickpath.bus_hdr_double_ecc@chip,
840    ereport.cpu.intel.quickpath.bus_link_retry_err@chip;
841
842EX_EVENT(bus_unknown_uc_external, 1s);
843EX_EVENT(bus_opr_poison_err_external, 1s);
844EX_EVENT(bus_eot_parity_external, 1s);
845EX_EVENT(bus_rta_parity_external, 1s);
846EX_EVENT(bus_bad_sbu_route_external, 1s);
847EX_EVENT(bus_bad_msg_external, 1s);
848EX_EVENT(bus_bad_vn_credit_external, 1s);
849EX_EVENT(bus_hdr_double_ecc_external, 1s);
850EX_EVENT(bus_link_retry_err_external, 1s);
851
852prop upset.cpu.intel.quickpath.discard@chip (0)->
853    ereport.cpu.intel.quickpath.bus_unknown_uc_external@chip,
854    ereport.cpu.intel.quickpath.bus_opr_poison_err_external@chip,
855    ereport.cpu.intel.quickpath.bus_eot_parity_external@chip,
856    ereport.cpu.intel.quickpath.bus_rta_parity_external@chip,
857    ereport.cpu.intel.quickpath.bus_bad_sbu_route_external@chip,
858    ereport.cpu.intel.quickpath.bus_bad_msg_external@chip,
859    ereport.cpu.intel.quickpath.bus_bad_vn_credit_external@chip,
860    ereport.cpu.intel.quickpath.bus_hdr_double_ecc_external@chip,
861    ereport.cpu.intel.quickpath.bus_link_retry_err_external@chip;
862
863/*
864 * CBox errors
865 */
866EX_EVENT(llc_ewb_uc, 1s);
867event fault.cpu.intel.quickpath.llc_ewb@chip,
868      retire=0, response=0;
869
870prop fault.cpu.intel.quickpath.llc_ewb@chip
871    { (payloadprop_defined("physaddr") || payloadprop_defined("offset")) &&
872    SET_ADDR && SET_OFFSET } (1)->
873    ereport.cpu.intel.quickpath.llc_ewb_uc@chip;
874
875prop upset.cpu.intel.quickpath.discard@chip (0)->
876    ereport.cpu.intel.quickpath.llc_ewb_uc@chip;
877
878/*
879 * SBox errors
880 */
881EX_EVENT(system_cache_uc, 1s);
882event fault.cpu.intel.quickpath.system_cache@chip,
883      retire=0, response=0;
884prop fault.cpu.intel.quickpath.system_cache@chip ->
885    ereport.cpu.intel.quickpath.system_cache_uc@chip;
886
887/*
888 * BBox errors
889 */
890EX_EVENT(home_agent_uc, 1s);
891event fault.cpu.intel.quickpath.home_agent@chip,
892      retire=0, response=0;
893prop fault.cpu.intel.quickpath.home_agent@chip ->
894    ereport.cpu.intel.quickpath.home_agent_uc@chip;
895
896/*
897 * UBox errors
898 */
899EX_EVENT(sys_cfg_cfa_ecc, 1s);
900EX_EVENT(sys_cfg_uc, 1s);
901
902engine serd.cpu.intel.quickpath.sys_cfg@chip,
903      N=2, T=72h;
904event fault.cpu.intel.quickpath.sys_cfg@chip,
905      engine=serd.cpu.intel.quickpath.sys_cfg@chip,
906      retire=0, response=0;
907
908prop fault.cpu.intel.quickpath.sys_cfg@chip (0)->
909    ereport.cpu.intel.quickpath.sys_cfg_cfa_ecc@chip;
910
911prop fault.cpu.intel.quickpath.sys_cfg@chip
912    { setserdincrement(3) } (0)->
913    ereport.cpu.intel.quickpath.sys_cfg_uc@chip;
914
915/*
916 * Handling poison errors
917 */
918engine stat.has_poison@motherboard;
919event fault.cpu.intel.has_poison@motherboard,
920      count=stat.has_poison@motherboard[0],
921      message=0, retire=0, response=0;
922engine stat.discard_fatal@motherboard;
923event fault.cpu.intel.discard_fatal@motherboard,
924      count=stat.discard_fatal@motherboard[0],
925      message=0, retire=0, response=0;
926
927prop fault.cpu.intel.has_poison@motherboard
928    { payloadprop_defined("poison") && 1 == payloadprop("poison") } (1)->
929    ereport.cpu.intel.quickpath.mem_scrubbing_uc@chip<>/memory-controller<>,
930    ereport.cpu.intel.quickpath.llc_ewb_uc@chip<>,
931    ereport.cpu.intel.quickpath.system_cache_uc@chip<>,
932    ereport.cpu.intel.quickpath.bus_opr_poison_err@chip<>,
933    ereport.cpu.intel.quickpath.bus_opr_poison_err_external@chip<>;
934
935prop fault.cpu.intel.discard_fatal@motherboard
936    { count(stat.has_poison@motherboard[0]) > count(stat.discard_fatal@motherboard[0]) &&
937      payloadprop_defined("bank_number") && 5 == payloadprop("bank_number") &&
938      payloadprop_defined("processor_context_corrupt") &&
939      1 == payloadprop("processor_context_corrupt") } (0)->
940    ereport.cpu.intel.internal_unclassified@chip<>/core<>/strand<> {within(10s)};
941
942prop fault.cpu.intel.internal@chip/core/strand
943    { (count(stat.has_poison@motherboard[0]) <= count(stat.discard_fatal@motherboard[0]) ||
944      !payloadprop_defined("bank_number") || 5 != payloadprop("bank_number") ||
945      !payloadprop_defined("processor_context_corrupt") ||
946      0 == payloadprop("processor_context_corrupt")) &&
947      (payloadprop("error_uncorrected") == 1 ? setserdincrement(4) : 1) } (0)->
948    ereport.cpu.intel.internal_unclassified@chip/core/strand;
949