vmm: Fix use-after-free in load_elf()
[akaros.git] / user / perfmon / events / intel_nhm_unc_events.h
1 /*
2  * Copyright (c) 2011 Google, Inc
3  * Contributed by Stephane Eranian <eranian@gmail.com>
4  *
5  * Permission is hereby granted, free of charge, to any person obtaining a copy
6  * of this software and associated documentation files (the "Software"), to deal
7  * in the Software without restriction, including without limitation the rights
8  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
9  * of the Software, and to permit persons to whom the Software is furnished to do so,
10  * subject to the following conditions:
11  *
12  * The above copyright notice and this permission notice shall be included in all
13  * copies or substantial portions of the Software.
14  *
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
16  * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
17  * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
18  * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
19  * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
20  * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21  *
22  * This file is part of libpfm, a performance monitoring support library for
23  * applications on Linux.
24  *
25  * This file has been automatically generated.
26  *
27  * PMU: nhm_unc (Intel Nehalem uncore)
28  */
29
30 static const intel_x86_umask_t nhm_unc_unc_dram_open[]={
31    { .uname  = "CH0",
32      .udesc  = "DRAM Channel 0 open commands issued for read or write",
33      .ucode = 0x100,
34    },
35    { .uname  = "CH1",
36      .udesc  = "DRAM Channel 1 open commands issued for read or write",
37      .ucode = 0x200,
38    },
39    { .uname  = "CH2",
40      .udesc  = "DRAM Channel 2 open commands issued for read or write",
41      .ucode = 0x400,
42    },
43 };
44
45 static const intel_x86_umask_t nhm_unc_unc_dram_page_close[]={
46    { .uname  = "CH0",
47      .udesc  = "DRAM Channel 0 page close",
48      .ucode = 0x100,
49    },
50    { .uname  = "CH1",
51      .udesc  = "DRAM Channel 1 page close",
52      .ucode = 0x200,
53    },
54    { .uname  = "CH2",
55      .udesc  = "DRAM Channel 2 page close",
56      .ucode = 0x400,
57    },
58 };
59
60 static const intel_x86_umask_t nhm_unc_unc_dram_page_miss[]={
61    { .uname  = "CH0",
62      .udesc  = "DRAM Channel 0 page miss",
63      .ucode = 0x100,
64    },
65    { .uname  = "CH1",
66      .udesc  = "DRAM Channel 1 page miss",
67      .ucode = 0x200,
68    },
69    { .uname  = "CH2",
70      .udesc  = "DRAM Channel 2 page miss",
71      .ucode = 0x400,
72    },
73 };
74
75 static const intel_x86_umask_t nhm_unc_unc_dram_pre_all[]={
76    { .uname  = "CH0",
77      .udesc  = "DRAM Channel 0 precharge all commands",
78      .ucode = 0x100,
79    },
80    { .uname  = "CH1",
81      .udesc  = "DRAM Channel 1 precharge all commands",
82      .ucode = 0x200,
83    },
84    { .uname  = "CH2",
85      .udesc  = "DRAM Channel 2 precharge all commands",
86      .ucode = 0x400,
87    },
88 };
89
90 static const intel_x86_umask_t nhm_unc_unc_dram_read_cas[]={
91    { .uname  = "CH0",
92      .udesc  = "DRAM Channel 0 read CAS commands",
93      .ucode = 0x100,
94    },
95    { .uname  = "AUTOPRE_CH0",
96      .udesc  = "DRAM Channel 0 read CAS auto page close commands",
97      .ucode = 0x200,
98    },
99    { .uname  = "CH1",
100      .udesc  = "DRAM Channel 1 read CAS commands",
101      .ucode = 0x400,
102    },
103    { .uname  = "AUTOPRE_CH1",
104      .udesc  = "DRAM Channel 1 read CAS auto page close commands",
105      .ucode = 0x800,
106    },
107    { .uname  = "CH2",
108      .udesc  = "DRAM Channel 2 read CAS commands",
109      .ucode = 0x1000,
110    },
111    { .uname  = "AUTOPRE_CH2",
112      .udesc  = "DRAM Channel 2 read CAS auto page close commands",
113      .ucode = 0x2000,
114    },
115 };
116
117 static const intel_x86_umask_t nhm_unc_unc_dram_refresh[]={
118    { .uname  = "CH0",
119      .udesc  = "DRAM Channel 0 refresh commands",
120      .ucode = 0x100,
121    },
122    { .uname  = "CH1",
123      .udesc  = "DRAM Channel 1 refresh commands",
124      .ucode = 0x200,
125    },
126    { .uname  = "CH2",
127      .udesc  = "DRAM Channel 2 refresh commands",
128      .ucode = 0x400,
129    },
130 };
131
132 static const intel_x86_umask_t nhm_unc_unc_dram_write_cas[]={
133    { .uname  = "CH0",
134      .udesc  = "DRAM Channel 0 write CAS commands",
135      .ucode = 0x100,
136    },
137    { .uname  = "AUTOPRE_CH0",
138      .udesc  = "DRAM Channel 0 write CAS auto page close commands",
139      .ucode = 0x200,
140    },
141    { .uname  = "CH1",
142      .udesc  = "DRAM Channel 1 write CAS commands",
143      .ucode = 0x400,
144    },
145    { .uname  = "AUTOPRE_CH1",
146      .udesc  = "DRAM Channel 1 write CAS auto page close commands",
147      .ucode = 0x800,
148    },
149    { .uname  = "CH2",
150      .udesc  = "DRAM Channel 2 write CAS commands",
151      .ucode = 0x1000,
152    },
153    { .uname  = "AUTOPRE_CH2",
154      .udesc  = "DRAM Channel 2 write CAS auto page close commands",
155      .ucode = 0x2000,
156    },
157 };
158
159 static const intel_x86_umask_t nhm_unc_unc_gq_alloc[]={
160    { .uname  = "READ_TRACKER",
161      .udesc  = "GQ read tracker requests",
162      .ucode = 0x100,
163    },
164    { .uname  = "RT_LLC_MISS",
165      .udesc  = "GQ read tracker LLC misses",
166      .ucode = 0x200,
167    },
168    { .uname  = "RT_TO_LLC_RESP",
169      .udesc  = "GQ read tracker LLC requests",
170      .ucode = 0x400,
171    },
172    { .uname  = "RT_TO_RTID_ACQUIRED",
173      .udesc  = "GQ read tracker LLC miss to RTID acquired",
174      .ucode = 0x800,
175    },
176    { .uname  = "WT_TO_RTID_ACQUIRED",
177      .udesc  = "GQ write tracker LLC miss to RTID acquired",
178      .ucode = 0x1000,
179    },
180    { .uname  = "WRITE_TRACKER",
181      .udesc  = "GQ write tracker LLC misses",
182      .ucode = 0x2000,
183    },
184    { .uname  = "PEER_PROBE_TRACKER",
185      .udesc  = "GQ peer probe tracker requests",
186      .ucode = 0x4000,
187    },
188 };
189
190 static const intel_x86_umask_t nhm_unc_unc_gq_cycles_full[]={
191    { .uname  = "READ_TRACKER",
192      .udesc  = "Cycles GQ read tracker is full.",
193      .ucode = 0x100,
194    },
195    { .uname  = "WRITE_TRACKER",
196      .udesc  = "Cycles GQ write tracker is full.",
197      .ucode = 0x200,
198    },
199    { .uname  = "PEER_PROBE_TRACKER",
200      .udesc  = "Cycles GQ peer probe tracker is full.",
201      .ucode = 0x400,
202    },
203 };
204
205 static const intel_x86_umask_t nhm_unc_unc_gq_cycles_not_empty[]={
206    { .uname  = "READ_TRACKER",
207      .udesc  = "Cycles GQ read tracker is busy",
208      .ucode = 0x100,
209    },
210    { .uname  = "WRITE_TRACKER",
211      .udesc  = "Cycles GQ write tracker is busy",
212      .ucode = 0x200,
213    },
214    { .uname  = "PEER_PROBE_TRACKER",
215      .udesc  = "Cycles GQ peer probe tracker is busy",
216      .ucode = 0x400,
217    },
218 };
219
220 static const intel_x86_umask_t nhm_unc_unc_gq_data_from[]={
221    { .uname  = "QPI",
222      .udesc  = "Cycles GQ data is imported from Quickpath interface",
223      .ucode = 0x100,
224    },
225    { .uname  = "QMC",
226      .udesc  = "Cycles GQ data is imported from Quickpath memory interface",
227      .ucode = 0x200,
228    },
229    { .uname  = "LLC",
230      .udesc  = "Cycles GQ data is imported from LLC",
231      .ucode = 0x400,
232    },
233    { .uname  = "CORES_02",
234      .udesc  = "Cycles GQ data is imported from Cores 0 and 2",
235      .ucode = 0x800,
236    },
237    { .uname  = "CORES_13",
238      .udesc  = "Cycles GQ data is imported from Cores 1 and 3",
239      .ucode = 0x1000,
240    },
241 };
242
243 static const intel_x86_umask_t nhm_unc_unc_gq_data_to[]={
244    { .uname  = "QPI_QMC",
245      .udesc  = "Cycles GQ data sent to the QPI or QMC",
246      .ucode = 0x100,
247    },
248    { .uname  = "LLC",
249      .udesc  = "Cycles GQ data sent to LLC",
250      .ucode = 0x200,
251    },
252    { .uname  = "CORES",
253      .udesc  = "Cycles GQ data sent to cores",
254      .ucode = 0x400,
255    },
256 };
257
258 static const intel_x86_umask_t nhm_unc_unc_llc_hits[]={
259    { .uname  = "READ",
260      .udesc  = "Number of LLC read hits",
261      .ucode = 0x100,
262    },
263    { .uname  = "WRITE",
264      .udesc  = "Number of LLC write hits",
265      .ucode = 0x200,
266    },
267    { .uname  = "PROBE",
268      .udesc  = "Number of LLC peer probe hits",
269      .ucode = 0x400,
270    },
271    { .uname  = "ANY",
272      .udesc  = "Number of LLC hits",
273      .ucode = 0x300,
274      .uflags= INTEL_X86_NCOMBO | INTEL_X86_DFL,
275    },
276 };
277
278 static const intel_x86_umask_t nhm_unc_unc_llc_lines_in[]={
279    { .uname  = "M_STATE",
280      .udesc  = "LLC lines allocated in M state",
281      .ucode = 0x100,
282    },
283    { .uname  = "E_STATE",
284      .udesc  = "LLC lines allocated in E state",
285      .ucode = 0x200,
286    },
287    { .uname  = "S_STATE",
288      .udesc  = "LLC lines allocated in S state",
289      .ucode = 0x400,
290    },
291    { .uname  = "F_STATE",
292      .udesc  = "LLC lines allocated in F state",
293      .ucode = 0x800,
294    },
295    { .uname  = "ANY",
296      .udesc  = "LLC lines allocated",
297      .ucode = 0xf00,
298      .uflags= INTEL_X86_NCOMBO | INTEL_X86_DFL,
299    },
300 };
301
302 static const intel_x86_umask_t nhm_unc_unc_llc_lines_out[]={
303    { .uname  = "M_STATE",
304      .udesc  = "LLC lines victimized in M state",
305      .ucode = 0x100,
306    },
307    { .uname  = "E_STATE",
308      .udesc  = "LLC lines victimized in E state",
309      .ucode = 0x200,
310    },
311    { .uname  = "S_STATE",
312      .udesc  = "LLC lines victimized in S state",
313      .ucode = 0x400,
314    },
315    { .uname  = "I_STATE",
316      .udesc  = "LLC lines victimized in I state",
317      .ucode = 0x800,
318    },
319    { .uname  = "F_STATE",
320      .udesc  = "LLC lines victimized in F state",
321      .ucode = 0x1000,
322    },
323    { .uname  = "ANY",
324      .udesc  = "LLC lines victimized",
325      .ucode = 0x1f00,
326      .uflags= INTEL_X86_NCOMBO | INTEL_X86_DFL,
327    },
328 };
329
330 static const intel_x86_umask_t nhm_unc_unc_llc_miss[]={
331    { .uname  = "READ",
332      .udesc  = "Number of LLC read misses",
333      .ucode = 0x100,
334    },
335    { .uname  = "WRITE",
336      .udesc  = "Number of LLC write misses",
337      .ucode = 0x200,
338    },
339    { .uname  = "PROBE",
340      .udesc  = "Number of LLC peer probe misses",
341      .ucode = 0x400,
342    },
343    { .uname  = "ANY",
344      .udesc  = "Number of LLC misses",
345      .ucode = 0x300,
346      .uflags= INTEL_X86_NCOMBO | INTEL_X86_DFL,
347    },
348 };
349
350 static const intel_x86_umask_t nhm_unc_unc_qhl_address_conflicts[]={
351    { .uname  = "2WAY",
352      .udesc  = "QHL 2 way address conflicts",
353      .ucode = 0x200,
354    },
355    { .uname  = "3WAY",
356      .udesc  = "QHL 3 way address conflicts",
357      .ucode = 0x400,
358    },
359 };
360
361 static const intel_x86_umask_t nhm_unc_unc_qhl_conflict_cycles[]={
362    { .uname  = "IOH",
363      .udesc  = "QHL IOH Tracker conflict cycles",
364      .ucode = 0x100,
365    },
366    { .uname  = "REMOTE",
367      .udesc  = "QHL Remote Tracker conflict cycles",
368      .ucode = 0x200,
369    },
370    { .uname  = "LOCAL",
371      .udesc  = "QHL Local Tracker conflict cycles",
372      .ucode = 0x400,
373    },
374 };
375
376 static const intel_x86_umask_t nhm_unc_unc_qhl_cycles_full[]={
377    { .uname  = "REMOTE",
378      .udesc  = "Cycles QHL  Remote Tracker is full",
379      .ucode = 0x200,
380    },
381    { .uname  = "LOCAL",
382      .udesc  = "Cycles QHL Local Tracker is full",
383      .ucode = 0x400,
384    },
385    { .uname  = "IOH",
386      .udesc  = "Cycles QHL IOH Tracker is full",
387      .ucode = 0x100,
388    },
389 };
390
391 static const intel_x86_umask_t nhm_unc_unc_qhl_cycles_not_empty[]={
392    { .uname  = "IOH",
393      .udesc  = "Cycles QHL IOH is busy",
394      .ucode = 0x100,
395    },
396    { .uname  = "REMOTE",
397      .udesc  = "Cycles QHL Remote Tracker is busy",
398      .ucode = 0x200,
399    },
400    { .uname  = "LOCAL",
401      .udesc  = "Cycles QHL Local Tracker is busy",
402      .ucode = 0x400,
403    },
404 };
405
406 static const intel_x86_umask_t nhm_unc_unc_qhl_frc_ack_cnflts[]={
407    { .uname  = "LOCAL",
408      .udesc  = "QHL FrcAckCnflts sent to local home",
409      .ucode = 0x400,
410      .uflags= INTEL_X86_DFL,
411    },
412 };
413
414 static const intel_x86_umask_t nhm_unc_unc_qhl_occupancy[]={
415    { .uname  = "IOH",
416      .udesc  = "Cycles QHL IOH Tracker Allocate to Deallocate Read Occupancy",
417      .ucode = 0x100,
418    },
419    { .uname  = "REMOTE",
420      .udesc  = "Cycles QHL Remote Tracker Allocate to Deallocate Read Occupancy",
421      .ucode = 0x200,
422    },
423    { .uname  = "LOCAL",
424      .udesc  = "Cycles QHL Local Tracker Allocate to Deallocate Read Occupancy",
425      .ucode = 0x400,
426    },
427 };
428
429 static const intel_x86_umask_t nhm_unc_unc_qhl_requests[]={
430    { .uname  = "LOCAL_READS",
431      .udesc  = "Quickpath Home Logic local read requests",
432      .ucode = 0x1000,
433    },
434    { .uname  = "LOCAL_WRITES",
435      .udesc  = "Quickpath Home Logic local write requests",
436      .ucode = 0x2000,
437    },
438    { .uname  = "REMOTE_READS",
439      .udesc  = "Quickpath Home Logic remote read requests",
440      .ucode = 0x400,
441    },
442    { .uname  = "IOH_READS",
443      .udesc  = "Quickpath Home Logic IOH read requests",
444      .ucode = 0x100,
445    },
446    { .uname  = "IOH_WRITES",
447      .udesc  = "Quickpath Home Logic IOH write requests",
448      .ucode = 0x200,
449    },
450    { .uname  = "REMOTE_WRITES",
451      .udesc  = "Quickpath Home Logic remote write requests",
452      .ucode = 0x800,
453    },
454 };
455
456 static const intel_x86_umask_t nhm_unc_unc_qmc_busy[]={
457    { .uname  = "READ_CH0",
458      .udesc  = "Cycles QMC channel 0 busy with a read request",
459      .ucode = 0x100,
460    },
461    { .uname  = "READ_CH1",
462      .udesc  = "Cycles QMC channel 1 busy with a read request",
463      .ucode = 0x200,
464    },
465    { .uname  = "READ_CH2",
466      .udesc  = "Cycles QMC channel 2 busy with a read request",
467      .ucode = 0x400,
468    },
469    { .uname  = "WRITE_CH0",
470      .udesc  = "Cycles QMC channel 0 busy with a write request",
471      .ucode = 0x800,
472    },
473    { .uname  = "WRITE_CH1",
474      .udesc  = "Cycles QMC channel 1 busy with a write request",
475      .ucode = 0x1000,
476    },
477    { .uname  = "WRITE_CH2",
478      .udesc  = "Cycles QMC channel 2 busy with a write request",
479      .ucode = 0x2000,
480    },
481 };
482
483 static const intel_x86_umask_t nhm_unc_unc_qmc_cancel[]={
484    { .uname  = "CH0",
485      .udesc  = "QMC channel 0 cancels",
486      .ucode = 0x100,
487    },
488    { .uname  = "CH1",
489      .udesc  = "QMC channel 1 cancels",
490      .ucode = 0x200,
491    },
492    { .uname  = "CH2",
493      .udesc  = "QMC channel 2 cancels",
494      .ucode = 0x400,
495    },
496    { .uname  = "ANY",
497      .udesc  = "QMC cancels",
498      .ucode = 0x700,
499      .uflags= INTEL_X86_NCOMBO | INTEL_X86_DFL,
500    },
501 };
502
503 static const intel_x86_umask_t nhm_unc_unc_qmc_critical_priority_reads[]={
504    { .uname  = "CH0",
505      .udesc  = "QMC channel 0 critical priority read requests",
506      .ucode = 0x100,
507    },
508    { .uname  = "CH1",
509      .udesc  = "QMC channel 1 critical priority read requests",
510      .ucode = 0x200,
511    },
512    { .uname  = "CH2",
513      .udesc  = "QMC channel 2 critical priority read requests",
514      .ucode = 0x400,
515    },
516    { .uname  = "ANY",
517      .udesc  = "QMC critical priority read requests",
518      .ucode = 0x700,
519      .uflags= INTEL_X86_NCOMBO | INTEL_X86_DFL,
520    },
521 };
522
523 static const intel_x86_umask_t nhm_unc_unc_qmc_high_priority_reads[]={
524    { .uname  = "CH0",
525      .udesc  = "QMC channel 0 high priority read requests",
526      .ucode = 0x100,
527    },
528    { .uname  = "CH1",
529      .udesc  = "QMC channel 1 high priority read requests",
530      .ucode = 0x200,
531    },
532    { .uname  = "CH2",
533      .udesc  = "QMC channel 2 high priority read requests",
534      .ucode = 0x400,
535    },
536    { .uname  = "ANY",
537      .udesc  = "QMC high priority read requests",
538      .ucode = 0x700,
539      .uflags= INTEL_X86_NCOMBO | INTEL_X86_DFL,
540    },
541 };
542
543 static const intel_x86_umask_t nhm_unc_unc_qmc_isoc_full[]={
544    { .uname  = "READ_CH0",
545      .udesc  = "Cycles DRAM channel 0 full with isochronous read requests",
546      .ucode = 0x100,
547    },
548    { .uname  = "READ_CH1",
549      .udesc  = "Cycles DRAM channel 1 full with isochronous read requests",
550      .ucode = 0x200,
551    },
552    { .uname  = "READ_CH2",
553      .udesc  = "Cycles DRAM channel 2 full with isochronous read requests",
554      .ucode = 0x400,
555    },
556    { .uname  = "WRITE_CH0",
557      .udesc  = "Cycles DRAM channel 0 full with isochronous write requests",
558      .ucode = 0x800,
559    },
560    { .uname  = "WRITE_CH1",
561      .udesc  = "Cycles DRAM channel 1 full with isochronous write requests",
562      .ucode = 0x1000,
563    },
564    { .uname  = "WRITE_CH2",
565      .udesc  = "Cycles DRAM channel 2 full with isochronous write requests",
566      .ucode = 0x2000,
567    },
568 };
569
570 static const intel_x86_umask_t nhm_unc_unc_imc_isoc_occupancy[]={
571    { .uname  = "CH0",
572      .udesc  = "IMC channel 0 isochronous read request occupancy",
573      .ucode = 0x100,
574    },
575    { .uname  = "CH1",
576      .udesc  = "IMC channel 1 isochronous read request occupancy",
577      .ucode = 0x200,
578    },
579    { .uname  = "CH2",
580      .udesc  = "IMC channel 2 isochronous read request occupancy",
581      .ucode = 0x400,
582    },
583    { .uname  = "ANY",
584      .udesc  = "IMC isochronous read request occupancy",
585      .ucode = 0x700,
586      .uflags= INTEL_X86_NCOMBO | INTEL_X86_DFL,
587    },
588 };
589
590 static const intel_x86_umask_t nhm_unc_unc_qmc_normal_full[]={
591    { .uname  = "READ_CH0",
592      .udesc  = "Cycles DRAM channel 0 full with normal read requests",
593      .ucode = 0x100,
594    },
595    { .uname  = "READ_CH1",
596      .udesc  = "Cycles DRAM channel 1 full with normal read requests",
597      .ucode = 0x200,
598    },
599    { .uname  = "READ_CH2",
600      .udesc  = "Cycles DRAM channel 2 full with normal read requests",
601      .ucode = 0x400,
602    },
603    { .uname  = "WRITE_CH0",
604      .udesc  = "Cycles DRAM channel 0 full with normal write requests",
605      .ucode = 0x800,
606    },
607    { .uname  = "WRITE_CH1",
608      .udesc  = "Cycles DRAM channel 1 full with normal write requests",
609      .ucode = 0x1000,
610    },
611    { .uname  = "WRITE_CH2",
612      .udesc  = "Cycles DRAM channel 2 full with normal write requests",
613      .ucode = 0x2000,
614    },
615 };
616
617 static const intel_x86_umask_t nhm_unc_unc_qmc_normal_reads[]={
618    { .uname  = "CH0",
619      .udesc  = "QMC channel 0 normal read requests",
620      .ucode = 0x100,
621    },
622    { .uname  = "CH1",
623      .udesc  = "QMC channel 1 normal read requests",
624      .ucode = 0x200,
625    },
626    { .uname  = "CH2",
627      .udesc  = "QMC channel 2 normal read requests",
628      .ucode = 0x400,
629    },
630    { .uname  = "ANY",
631      .udesc  = "QMC normal read requests",
632      .ucode = 0x700,
633      .uflags= INTEL_X86_NCOMBO | INTEL_X86_DFL,
634    },
635 };
636
637 static const intel_x86_umask_t nhm_unc_unc_qmc_occupancy[]={
638    { .uname  = "CH0",
639      .udesc  = "IMC channel 0 normal read request occupancy",
640      .ucode = 0x100,
641    },
642    { .uname  = "CH1",
643      .udesc  = "IMC channel 1 normal read request occupancy",
644      .ucode = 0x200,
645    },
646    { .uname  = "CH2",
647      .udesc  = "IMC channel 2 normal read request occupancy",
648      .ucode = 0x400,
649    },
650 };
651
652 static const intel_x86_umask_t nhm_unc_unc_qmc_priority_updates[]={
653    { .uname  = "CH0",
654      .udesc  = "QMC channel 0 priority updates",
655      .ucode = 0x100,
656    },
657    { .uname  = "CH1",
658      .udesc  = "QMC channel 1 priority updates",
659      .ucode = 0x200,
660    },
661    { .uname  = "CH2",
662      .udesc  = "QMC channel 2 priority updates",
663      .ucode = 0x400,
664    },
665    { .uname  = "ANY",
666      .udesc  = "QMC priority updates",
667      .ucode = 0x700,
668      .uflags= INTEL_X86_NCOMBO | INTEL_X86_DFL,
669    },
670 };
671
672 static const intel_x86_umask_t nhm_unc_unc_qmc_writes[]={
673    { .uname  = "FULL_CH0",
674      .udesc  = "QMC channel 0 full cache line writes",
675      .ucode = 0x100,
676      .grpid = 0,
677    },
678    { .uname  = "FULL_CH1",
679      .udesc  = "QMC channel 1 full cache line writes",
680      .ucode = 0x200,
681      .grpid = 0,
682    },
683    { .uname  = "FULL_CH2",
684      .udesc  = "QMC channel 2 full cache line writes",
685      .ucode = 0x400,
686      .grpid = 0,
687    },
688    { .uname  = "FULL_ANY",
689      .udesc  = "QMC full cache line writes",
690      .ucode = 0x700,
691      .uflags= INTEL_X86_NCOMBO | INTEL_X86_DFL,
692      .grpid = 0,
693    },
694    { .uname  = "PARTIAL_CH0",
695      .udesc  = "QMC channel 0 partial cache line writes",
696      .ucode = 0x800,
697      .grpid = 1,
698    },
699    { .uname  = "PARTIAL_CH1",
700      .udesc  = "QMC channel 1 partial cache line writes",
701      .ucode = 0x1000,
702      .grpid = 1,
703    },
704    { .uname  = "PARTIAL_CH2",
705      .udesc  = "QMC channel 2 partial cache line writes",
706      .ucode = 0x2000,
707      .grpid = 1,
708    },
709    { .uname  = "PARTIAL_ANY",
710      .udesc  = "QMC partial cache line writes",
711      .ucode = 0x3800,
712      .uflags= INTEL_X86_NCOMBO | INTEL_X86_DFL,
713      .grpid = 1,
714    },
715 };
716
717 static const intel_x86_umask_t nhm_unc_unc_qpi_rx_no_ppt_credit[]={
718    { .uname  = "STALLS_LINK_0",
719      .udesc  = "Link 0 snoop stalls due to no PPT entry",
720      .ucode = 0x100,
721    },
722    { .uname  = "STALLS_LINK_1",
723      .udesc  = "Link 1 snoop stalls due to no PPT entry",
724      .ucode = 0x200,
725    },
726 };
727
728 static const intel_x86_umask_t nhm_unc_unc_qpi_tx_header[]={
729    { .uname  = "BUSY_LINK_0",
730      .udesc  = "Cycles link 0 outbound header busy",
731      .ucode = 0x200,
732    },
733    { .uname  = "BUSY_LINK_1",
734      .udesc  = "Cycles link 1 outbound header busy",
735      .ucode = 0x800,
736    },
737 };
738
739 static const intel_x86_umask_t nhm_unc_unc_qpi_tx_stalled_multi_flit[]={
740    { .uname  = "DRS_LINK_0",
741      .udesc  = "Cycles QPI outbound link 0 DRS stalled",
742      .ucode = 0x100,
743    },
744    { .uname  = "NCB_LINK_0",
745      .udesc  = "Cycles QPI outbound link 0 NCB stalled",
746      .ucode = 0x200,
747    },
748    { .uname  = "NCS_LINK_0",
749      .udesc  = "Cycles QPI outbound link 0 NCS stalled",
750      .ucode = 0x400,
751    },
752    { .uname  = "DRS_LINK_1",
753      .udesc  = "Cycles QPI outbound link 1 DRS stalled",
754      .ucode = 0x800,
755    },
756    { .uname  = "NCB_LINK_1",
757      .udesc  = "Cycles QPI outbound link 1 NCB stalled",
758      .ucode = 0x1000,
759    },
760    { .uname  = "NCS_LINK_1",
761      .udesc  = "Cycles QPI outbound link 1 NCS stalled",
762      .ucode = 0x2000,
763    },
764    { .uname  = "LINK_0",
765      .udesc  = "Cycles QPI outbound link 0 multi flit stalled",
766      .ucode = 0x700,
767      .uflags= INTEL_X86_NCOMBO,
768    },
769    { .uname  = "LINK_1",
770      .udesc  = "Cycles QPI outbound link 1 multi flit stalled",
771      .ucode = 0x3800,
772      .uflags= INTEL_X86_NCOMBO,
773    },
774 };
775
776 static const intel_x86_umask_t nhm_unc_unc_qpi_tx_stalled_single_flit[]={
777    { .uname  = "HOME_LINK_0",
778      .udesc  = "Cycles QPI outbound link 0 HOME stalled",
779      .ucode = 0x100,
780    },
781    { .uname  = "SNOOP_LINK_0",
782      .udesc  = "Cycles QPI outbound link 0 SNOOP stalled",
783      .ucode = 0x200,
784    },
785    { .uname  = "NDR_LINK_0",
786      .udesc  = "Cycles QPI outbound link 0 NDR stalled",
787      .ucode = 0x400,
788    },
789    { .uname  = "HOME_LINK_1",
790      .udesc  = "Cycles QPI outbound link 1 HOME stalled",
791      .ucode = 0x800,
792    },
793    { .uname  = "SNOOP_LINK_1",
794      .udesc  = "Cycles QPI outbound link 1 SNOOP stalled",
795      .ucode = 0x1000,
796    },
797    { .uname  = "NDR_LINK_1",
798      .udesc  = "Cycles QPI outbound link 1 NDR stalled",
799      .ucode = 0x2000,
800    },
801    { .uname  = "LINK_0",
802      .udesc  = "Cycles QPI outbound link 0 single flit stalled",
803      .ucode = 0x700,
804      .uflags= INTEL_X86_NCOMBO,
805    },
806    { .uname  = "LINK_1",
807      .udesc  = "Cycles QPI outbound link 1 single flit stalled",
808      .ucode = 0x3800,
809      .uflags= INTEL_X86_NCOMBO,
810    },
811 };
812
813 static const intel_x86_umask_t nhm_unc_unc_snp_resp_to_local_home[]={
814    { .uname  = "I_STATE",
815      .udesc  = "Local home snoop response - LLC does not have cache line",
816      .ucode = 0x100,
817    },
818    { .uname  = "S_STATE",
819      .udesc  = "Local home snoop response - LLC has  cache line in S state",
820      .ucode = 0x200,
821    },
822    { .uname  = "FWD_S_STATE",
823      .udesc  = "Local home snoop response - LLC forwarding cache line in S state.",
824      .ucode = 0x400,
825    },
826    { .uname  = "FWD_I_STATE",
827      .udesc  = "Local home snoop response - LLC has forwarded a modified cache line",
828      .ucode = 0x800,
829    },
830    { .uname  = "CONFLICT",
831      .udesc  = "Local home conflict snoop response",
832      .ucode = 0x1000,
833    },
834    { .uname  = "WB",
835      .udesc  = "Local home snoop response - LLC has cache line in the M state",
836      .ucode = 0x2000,
837    },
838 };
839
840 static const intel_x86_umask_t nhm_unc_unc_snp_resp_to_remote_home[]={
841    { .uname  = "I_STATE",
842      .udesc  = "Remote home snoop response - LLC does not have cache line",
843      .ucode = 0x100,
844    },
845    { .uname  = "S_STATE",
846      .udesc  = "Remote home snoop response - LLC has  cache line in S state",
847      .ucode = 0x200,
848    },
849    { .uname  = "FWD_S_STATE",
850      .udesc  = "Remote home snoop response - LLC forwarding cache line in S state.",
851      .ucode = 0x400,
852    },
853    { .uname  = "FWD_I_STATE",
854      .udesc  = "Remote home snoop response - LLC has forwarded a modified cache line",
855      .ucode = 0x800,
856    },
857    { .uname  = "CONFLICT",
858      .udesc  = "Remote home conflict snoop response",
859      .ucode = 0x1000,
860    },
861    { .uname  = "WB",
862      .udesc  = "Remote home snoop response - LLC has cache line in the M state",
863      .ucode = 0x2000,
864    },
865    { .uname  = "HITM",
866      .udesc  = "Remote home snoop response - LLC HITM",
867      .ucode = 0x2400,
868      .uflags= INTEL_X86_NCOMBO,
869    },
870 };
871
872 static const intel_x86_entry_t intel_nhm_unc_pe[]={
873 { .name   = "UNC_CLK_UNHALTED",
874   .desc   = "Uncore clockticks.",
875   .modmsk =0x0,
876   .cntmsk = 0x100000,
877   .code = 0xff,
878   .flags = INTEL_X86_FIXED,
879 },
880 { .name   = "UNC_DRAM_OPEN",
881   .desc   = "DRAM open commands issued for read or write",
882   .modmsk = NHM_UNC_ATTRS,
883   .cntmsk = 0x1fe00000,
884   .code = 0x60,
885   .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_dram_open),
886   .ngrp = 1,
887   .umasks = nhm_unc_unc_dram_open,
888 },
889 { .name   = "UNC_DRAM_PAGE_CLOSE",
890   .desc   = "DRAM page close due to idle timer expiration",
891   .modmsk = NHM_UNC_ATTRS,
892   .cntmsk = 0x1fe00000,
893   .code = 0x61,
894   .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_dram_page_close),
895   .ngrp = 1,
896   .umasks = nhm_unc_unc_dram_page_close,
897 },
898 { .name   = "UNC_DRAM_PAGE_MISS",
899   .desc   = "DRAM Channel 0 page miss",
900   .modmsk = NHM_UNC_ATTRS,
901   .cntmsk = 0x1fe00000,
902   .code = 0x62,
903   .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_dram_page_miss),
904   .ngrp = 1,
905   .umasks = nhm_unc_unc_dram_page_miss,
906 },
907 { .name   = "UNC_DRAM_PRE_ALL",
908   .desc   = "DRAM Channel 0 precharge all commands",
909   .modmsk = NHM_UNC_ATTRS,
910   .cntmsk = 0x1fe00000,
911   .code = 0x66,
912   .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_dram_pre_all),
913   .ngrp = 1,
914   .umasks = nhm_unc_unc_dram_pre_all,
915 },
916 { .name   = "UNC_DRAM_READ_CAS",
917   .desc   = "DRAM Channel 0 read CAS commands",
918   .modmsk = NHM_UNC_ATTRS,
919   .cntmsk = 0x1fe00000,
920   .code = 0x63,
921   .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_dram_read_cas),
922   .ngrp = 1,
923   .umasks = nhm_unc_unc_dram_read_cas,
924 },
925 { .name   = "UNC_DRAM_REFRESH",
926   .desc   = "DRAM Channel 0 refresh commands",
927   .modmsk = NHM_UNC_ATTRS,
928   .cntmsk = 0x1fe00000,
929   .code = 0x65,
930   .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_dram_refresh),
931   .ngrp = 1,
932   .umasks = nhm_unc_unc_dram_refresh,
933 },
934 { .name   = "UNC_DRAM_WRITE_CAS",
935   .desc   = "DRAM Channel 0 write CAS commands",
936   .modmsk = NHM_UNC_ATTRS,
937   .cntmsk = 0x1fe00000,
938   .code = 0x64,
939   .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_dram_write_cas),
940   .ngrp = 1,
941   .umasks = nhm_unc_unc_dram_write_cas,
942 },
943 { .name   = "UNC_GQ_ALLOC",
944   .desc   = "GQ read tracker requests",
945   .modmsk = NHM_UNC_ATTRS,
946   .cntmsk = 0x1fe00000,
947   .code = 0x3,
948   .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_gq_alloc),
949   .ngrp = 1,
950   .umasks = nhm_unc_unc_gq_alloc,
951 },
952 { .name   = "UNC_GQ_CYCLES_FULL",
953   .desc   = "Cycles GQ read tracker is full.",
954   .modmsk = NHM_UNC_ATTRS,
955   .cntmsk = 0x1fe00000,
956   .code = 0x0,
957   .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_gq_cycles_full),
958   .ngrp = 1,
959   .umasks = nhm_unc_unc_gq_cycles_full,
960 },
961 { .name   = "UNC_GQ_CYCLES_NOT_EMPTY",
962   .desc   = "Cycles GQ read tracker is busy",
963   .modmsk = NHM_UNC_ATTRS,
964   .cntmsk = 0x1fe00000,
965   .code = 0x1,
966   .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_gq_cycles_not_empty),
967   .ngrp = 1,
968   .umasks = nhm_unc_unc_gq_cycles_not_empty,
969 },
970 { .name   = "UNC_GQ_DATA_FROM",
971   .desc   = "Cycles GQ data is imported",
972   .modmsk = NHM_UNC_ATTRS,
973   .cntmsk = 0x1fe00000,
974   .code = 0x4,
975   .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_gq_data_from),
976   .ngrp = 1,
977   .umasks = nhm_unc_unc_gq_data_from,
978 },
979 { .name   = "UNC_GQ_DATA_TO",
980   .desc   = "Cycles GQ data is exported",
981   .modmsk = NHM_UNC_ATTRS,
982   .cntmsk = 0x1fe00000,
983   .code = 0x5,
984   .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_gq_data_to),
985   .ngrp = 1,
986   .umasks = nhm_unc_unc_gq_data_to,
987 },
988 { .name   = "UNC_LLC_HITS",
989   .desc   = "Number of LLC read hits",
990   .modmsk = NHM_UNC_ATTRS,
991   .cntmsk = 0x1fe00000,
992   .code = 0x8,
993   .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_llc_hits),
994   .ngrp = 1,
995   .umasks = nhm_unc_unc_llc_hits,
996 },
997 { .name   = "UNC_LLC_LINES_IN",
998   .desc   = "LLC lines allocated in M state",
999   .modmsk = NHM_UNC_ATTRS,
1000   .cntmsk = 0x1fe00000,
1001   .code = 0xa,
1002   .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_llc_lines_in),
1003   .ngrp = 1,
1004   .umasks = nhm_unc_unc_llc_lines_in,
1005 },
1006 { .name   = "UNC_LLC_LINES_OUT",
1007   .desc   = "LLC lines victimized in M state",
1008   .modmsk = NHM_UNC_ATTRS,
1009   .cntmsk = 0x1fe00000,
1010   .code = 0xb,
1011   .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_llc_lines_out),
1012   .ngrp = 1,
1013   .umasks = nhm_unc_unc_llc_lines_out,
1014 },
1015 { .name   = "UNC_LLC_MISS",
1016   .desc   = "Number of LLC read misses",
1017   .modmsk = NHM_UNC_ATTRS,
1018   .cntmsk = 0x1fe00000,
1019   .code = 0x9,
1020   .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_llc_miss),
1021   .ngrp = 1,
1022   .umasks = nhm_unc_unc_llc_miss,
1023 },
1024 { .name   = "UNC_QHL_ADDRESS_CONFLICTS",
1025   .desc   = "QHL 2 way address conflicts",
1026   .modmsk = NHM_UNC_ATTRS,
1027   .cntmsk = 0x1fe00000,
1028   .code = 0x24,
1029   .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_qhl_address_conflicts),
1030   .ngrp = 1,
1031   .umasks = nhm_unc_unc_qhl_address_conflicts,
1032 },
1033 { .name   = "UNC_QHL_CONFLICT_CYCLES",
1034   .desc   = "QHL IOH Tracker conflict cycles",
1035   .modmsk = NHM_UNC_ATTRS,
1036   .cntmsk = 0x1fe00000,
1037   .code = 0x25,
1038   .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_qhl_conflict_cycles),
1039   .ngrp = 1,
1040   .umasks = nhm_unc_unc_qhl_conflict_cycles,
1041 },
1042 { .name   = "UNC_QHL_CYCLES_FULL",
1043   .desc   = "Cycles QHL  Remote Tracker is full",
1044   .modmsk = NHM_UNC_ATTRS,
1045   .cntmsk = 0x1fe00000,
1046   .code = 0x21,
1047   .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_qhl_cycles_full),
1048   .ngrp = 1,
1049   .umasks = nhm_unc_unc_qhl_cycles_full,
1050 },
1051 { .name   = "UNC_QHL_CYCLES_NOT_EMPTY",
1052   .desc   = "Cycles QHL Tracker is not empty",
1053   .modmsk =0x0,
1054   .cntmsk = 0x1fe00000,
1055   .code = 0x22,
1056   .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_qhl_cycles_not_empty),
1057   .ngrp = 1,
1058   .umasks = nhm_unc_unc_qhl_cycles_not_empty,
1059 },
1060 { .name   = "UNC_QHL_FRC_ACK_CNFLTS",
1061   .desc   = "QHL FrcAckCnflts sent to local home",
1062   .modmsk = NHM_UNC_ATTRS,
1063   .cntmsk = 0x1fe00000,
1064   .code = 0x33,
1065   .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_qhl_frc_ack_cnflts),
1066   .ngrp = 1,
1067   .umasks = nhm_unc_unc_qhl_frc_ack_cnflts,
1068 },
1069 { .name   = "UNC_QHL_OCCUPANCY",
1070   .desc   = "Cycles QHL Tracker Allocate to Deallocate Read Occupancy",
1071   .modmsk = NHM_UNC_ATTRS,
1072   .cntmsk = 0x1fe00000,
1073   .code = 0x23,
1074   .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_qhl_occupancy),
1075   .ngrp = 1,
1076   .umasks = nhm_unc_unc_qhl_occupancy,
1077 },
1078 { .name   = "UNC_QHL_REQUESTS",
1079   .desc   = "Quickpath Home Logic local read requests",
1080   .modmsk = NHM_UNC_ATTRS,
1081   .cntmsk = 0x1fe00000,
1082   .code = 0x20,
1083   .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_qhl_requests),
1084   .ngrp = 1,
1085   .umasks = nhm_unc_unc_qhl_requests,
1086 },
1087 { .name   = "UNC_QHL_TO_QMC_BYPASS",
1088   .desc   = "Number of requests to QMC that bypass QHL",
1089   .modmsk = NHM_UNC_ATTRS,
1090   .cntmsk = 0x1fe00000,
1091   .code = 0x26,
1092 },
1093 { .name   = "UNC_QMC_BUSY",
1094   .desc   = "Cycles QMC busy with a read request",
1095   .modmsk = NHM_UNC_ATTRS,
1096   .cntmsk = 0x1fe00000,
1097   .code = 0x29,
1098   .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_qmc_busy),
1099   .ngrp = 1,
1100   .umasks = nhm_unc_unc_qmc_busy,
1101 },
1102 { .name   = "UNC_QMC_CANCEL",
1103   .desc   = "QMC cancels",
1104   .modmsk = NHM_UNC_ATTRS,
1105   .cntmsk = 0x1fe00000,
1106   .code = 0x30,
1107   .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_qmc_cancel),
1108   .ngrp = 1,
1109   .umasks = nhm_unc_unc_qmc_cancel,
1110 },
1111 { .name   = "UNC_QMC_CRITICAL_PRIORITY_READS",
1112   .desc   = "QMC critical priority read requests",
1113   .modmsk = NHM_UNC_ATTRS,
1114   .cntmsk = 0x1fe00000,
1115   .code = 0x2e,
1116   .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_qmc_critical_priority_reads),
1117   .ngrp = 1,
1118   .umasks = nhm_unc_unc_qmc_critical_priority_reads,
1119 },
1120 { .name   = "UNC_QMC_HIGH_PRIORITY_READS",
1121   .desc   = "QMC high priority read requests",
1122   .modmsk = NHM_UNC_ATTRS,
1123   .cntmsk = 0x1fe00000,
1124   .code = 0x2d,
1125   .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_qmc_high_priority_reads),
1126   .ngrp = 1,
1127   .umasks = nhm_unc_unc_qmc_high_priority_reads,
1128 },
1129 { .name   = "UNC_QMC_ISOC_FULL",
1130   .desc   = "Cycles DRAM full with isochronous (ISOC) read requests",
1131   .modmsk = NHM_UNC_ATTRS,
1132   .cntmsk = 0x1fe00000,
1133   .code = 0x28,
1134   .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_qmc_isoc_full),
1135   .ngrp = 1,
1136   .umasks = nhm_unc_unc_qmc_isoc_full,
1137 },
1138 { .name   = "UNC_IMC_ISOC_OCCUPANCY",
1139   .desc   = "IMC isochronous (ISOC) Read Occupancy",
1140   .modmsk = NHM_UNC_ATTRS,
1141   .cntmsk = 0x1fe00000,
1142   .code = 0x2b,
1143   .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_imc_isoc_occupancy),
1144   .ngrp = 1,
1145   .umasks = nhm_unc_unc_imc_isoc_occupancy,
1146 },
1147 { .name   = "UNC_QMC_NORMAL_FULL",
1148   .desc   = "Cycles DRAM full with normal read requests",
1149   .modmsk = NHM_UNC_ATTRS,
1150   .cntmsk = 0x1fe00000,
1151   .code = 0x27,
1152   .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_qmc_normal_full),
1153   .ngrp = 1,
1154   .umasks = nhm_unc_unc_qmc_normal_full,
1155 },
1156 { .name   = "UNC_QMC_NORMAL_READS",
1157   .desc   = "QMC normal read requests",
1158   .modmsk = NHM_UNC_ATTRS,
1159   .cntmsk = 0x1fe00000,
1160   .code = 0x2c,
1161   .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_qmc_normal_reads),
1162   .ngrp = 1,
1163   .umasks = nhm_unc_unc_qmc_normal_reads,
1164 },
1165 { .name   = "UNC_QMC_OCCUPANCY",
1166   .desc   = "QMC Occupancy",
1167   .modmsk = NHM_UNC_ATTRS,
1168   .cntmsk = 0x1fe00000,
1169   .code = 0x2a,
1170   .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_qmc_occupancy),
1171   .ngrp = 1,
1172   .umasks = nhm_unc_unc_qmc_occupancy,
1173 },
1174 { .name   = "UNC_QMC_PRIORITY_UPDATES",
1175   .desc   = "QMC priority updates",
1176   .modmsk = NHM_UNC_ATTRS,
1177   .cntmsk = 0x1fe00000,
1178   .code = 0x31,
1179   .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_qmc_priority_updates),
1180   .ngrp = 1,
1181   .umasks = nhm_unc_unc_qmc_priority_updates,
1182 },
1183 { .name   = "UNC_QMC_WRITES",
1184   .desc   = "QMC cache line writes",
1185   .modmsk = NHM_UNC_ATTRS,
1186   .cntmsk = 0x1fe00000,
1187   .code = 0x2f,
1188   .flags= INTEL_X86_GRP_EXCL,
1189   .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_qmc_writes),
1190   .ngrp = 2,
1191   .umasks = nhm_unc_unc_qmc_writes,
1192 },
1193 { .name   = "UNC_QPI_RX_NO_PPT_CREDIT",
1194   .desc   = "Link 0 snoop stalls due to no PPT entry",
1195   .modmsk = NHM_UNC_ATTRS,
1196   .cntmsk = 0x1fe00000,
1197   .code = 0x43,
1198   .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_qpi_rx_no_ppt_credit),
1199   .ngrp = 1,
1200   .umasks = nhm_unc_unc_qpi_rx_no_ppt_credit,
1201 },
1202 { .name   = "UNC_QPI_TX_HEADER",
1203   .desc   = "Cycles link 0 outbound header busy",
1204   .modmsk = NHM_UNC_ATTRS,
1205   .cntmsk = 0x1fe00000,
1206   .code = 0x42,
1207   .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_qpi_tx_header),
1208   .ngrp = 1,
1209   .umasks = nhm_unc_unc_qpi_tx_header,
1210 },
1211 { .name   = "UNC_QPI_TX_STALLED_MULTI_FLIT",
1212   .desc   = "Cycles QPI outbound stalls",
1213   .modmsk = NHM_UNC_ATTRS,
1214   .cntmsk = 0x1fe00000,
1215   .code = 0x41,
1216   .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_qpi_tx_stalled_multi_flit),
1217   .ngrp = 1,
1218   .umasks = nhm_unc_unc_qpi_tx_stalled_multi_flit,
1219 },
1220 { .name   = "UNC_QPI_TX_STALLED_SINGLE_FLIT",
1221   .desc   = "Cycles QPI outbound link stalls",
1222   .modmsk = NHM_UNC_ATTRS,
1223   .cntmsk = 0x1fe00000,
1224   .code = 0x40,
1225   .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_qpi_tx_stalled_single_flit),
1226   .ngrp = 1,
1227   .umasks = nhm_unc_unc_qpi_tx_stalled_single_flit,
1228 },
1229 { .name   = "UNC_SNP_RESP_TO_LOCAL_HOME",
1230   .desc   = "Local home snoop response",
1231   .modmsk = NHM_UNC_ATTRS,
1232   .cntmsk = 0x1fe00000,
1233   .code = 0x6,
1234   .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_snp_resp_to_local_home),
1235   .ngrp = 1,
1236   .umasks = nhm_unc_unc_snp_resp_to_local_home,
1237 },
1238 { .name   = "UNC_SNP_RESP_TO_REMOTE_HOME",
1239   .desc   = "Remote home snoop response",
1240   .modmsk = NHM_UNC_ATTRS,
1241   .cntmsk = 0x1fe00000,
1242   .code = 0x7,
1243   .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_snp_resp_to_remote_home),
1244   .ngrp = 1,
1245   .umasks = nhm_unc_unc_snp_resp_to_remote_home,
1246 },
1247 };