vmm: Fix use-after-free in load_elf()
[akaros.git] / user / perfmon / events / amd64_events_fam11h.h
1 /*
2  * Copyright (c) 2012 University of Tennessee
3  * Contributed by Vince Weaver <vweaver1@utk.edu>
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  * PMU: amd64_fam11h (AMD64 Fam11h)
26  */
27
28 static const amd64_umask_t amd64_fam11h_dispatched_fpu[]={
29    { .uname  = "OPS_ADD",
30      .udesc  = "Add pipe ops excluding load ops and SSE move ops",
31      .ucode = 0x1,
32    },
33    { .uname  = "OPS_MULTIPLY",
34      .udesc  = "Multiply pipe ops excluding load ops and SSE move ops",
35      .ucode = 0x2,
36    },
37    { .uname  = "OPS_STORE",
38      .udesc  = "Store pipe ops excluding load ops and SSE move ops",
39      .ucode = 0x4,
40    },
41    { .uname  = "OPS_ADD_PIPE_LOAD_OPS",
42      .udesc  = "Add pipe load ops and SSE move ops",
43      .ucode = 0x8,
44    },
45    { .uname  = "OPS_MULTIPLY_PIPE_LOAD_OPS",
46      .udesc  = "Multiply pipe load ops and SSE move ops",
47      .ucode = 0x10,
48    },
49    { .uname  = "OPS_STORE_PIPE_LOAD_OPS",
50      .udesc  = "Store pipe load ops and SSE move ops",
51      .ucode = 0x20,
52    },
53    { .uname  = "ALL",
54      .udesc  = "All sub-events selected",
55      .ucode = 0x3f,
56      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
57    },
58 };
59
60 static const amd64_umask_t amd64_fam11h_segment_register_loads[]={
61    { .uname  = "ES",
62      .udesc  = "ES",
63      .ucode = 0x1,
64    },
65    { .uname  = "CS",
66      .udesc  = "CS",
67      .ucode = 0x2,
68    },
69    { .uname  = "SS",
70      .udesc  = "SS",
71      .ucode = 0x4,
72    },
73    { .uname  = "DS",
74      .udesc  = "DS",
75      .ucode = 0x8,
76    },
77    { .uname  = "FS",
78      .udesc  = "FS",
79      .ucode = 0x10,
80    },
81    { .uname  = "GS",
82      .udesc  = "GS",
83      .ucode = 0x20,
84    },
85    { .uname  = "HS",
86      .udesc  = "HS",
87      .ucode = 0x40,
88    },
89    { .uname  = "ALL",
90      .udesc  = "All sub-events selected",
91      .ucode = 0x7f,
92      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
93    },
94 };
95
96 static const amd64_umask_t amd64_fam11h_locked_ops[]={
97    { .uname  = "EXECUTED",
98      .udesc  = "The number of locked instructions executed",
99      .ucode = 0x1,
100    },
101    { .uname  = "CYCLES_SPECULATIVE_PHASE",
102      .udesc  = "The number of cycles spent in speculative phase",
103      .ucode = 0x2,
104    },
105    { .uname  = "CYCLES_NON_SPECULATIVE_PHASE",
106      .udesc  = "The number of cycles spent in non-speculative phase (including cache miss penalty)",
107      .ucode = 0x4,
108    },
109    { .uname  = "ALL",
110      .udesc  = "All sub-events selected",
111      .ucode = 0x7,
112      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
113    },
114 };
115
116 static const amd64_umask_t amd64_fam11h_data_cache_refills[]={
117    { .uname  = "SYSTEM",
118      .udesc  = "Refill from the Northbridge",
119      .ucode = 0x1,
120    },
121    { .uname  = "L2_SHARED",
122      .udesc  = "Shared-state line from L2",
123      .ucode = 0x2,
124    },
125    { .uname  = "L2_EXCLUSIVE",
126      .udesc  = "Exclusive-state line from L2",
127      .ucode = 0x4,
128    },
129    { .uname  = "L2_OWNED",
130      .udesc  = "Owned-state line from L2",
131      .ucode = 0x8,
132    },
133    { .uname  = "L2_MODIFIED",
134      .udesc  = "Modified-state line from L2",
135      .ucode = 0x10,
136    },
137    { .uname  = "ALL",
138      .udesc  = "All sub-events selected",
139      .ucode = 0x1f,
140      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
141    },
142 };
143
144 static const amd64_umask_t amd64_fam11h_data_cache_refills_from_system[]={
145    { .uname  = "INVALID",
146      .udesc  = "Invalid",
147      .ucode = 0x1,
148    },
149    { .uname  = "SHARED",
150      .udesc  = "Shared",
151      .ucode = 0x2,
152    },
153    { .uname  = "EXCLUSIVE",
154      .udesc  = "Exclusive",
155      .ucode = 0x4,
156    },
157    { .uname  = "OWNED",
158      .udesc  = "Owned",
159      .ucode = 0x8,
160    },
161    { .uname  = "MODIFIED",
162      .udesc  = "Modified",
163      .ucode = 0x10,
164    },
165    { .uname  = "ALL",
166      .udesc  = "All sub-events selected",
167      .ucode = 0x1f,
168      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
169    },
170 };
171
172 static const amd64_umask_t amd64_fam11h_data_cache_lines_evicted[]={
173    { .uname  = "INVALID",
174      .udesc  = "Invalid",
175      .ucode = 0x1,
176    },
177    { .uname  = "SHARED",
178      .udesc  = "Shared",
179      .ucode = 0x2,
180    },
181    { .uname  = "EXCLUSIVE",
182      .udesc  = "Exclusive",
183      .ucode = 0x4,
184    },
185    { .uname  = "OWNED",
186      .udesc  = "Owned",
187      .ucode = 0x8,
188    },
189    { .uname  = "MODIFIED",
190      .udesc  = "Modified",
191      .ucode = 0x10,
192    },
193    { .uname  = "ALL",
194      .udesc  = "All sub-events selected",
195      .ucode = 0x1f,
196      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
197    },
198 };
199
200 static const amd64_umask_t amd64_fam11h_scrubber_single_bit_ecc_errors[]={
201   { .uname  = "SCRUBBER_ERROR",
202     .udesc  = "Scrubber error",
203     .ucode = 0x1,
204   },
205   { .uname  = "PIGGYBACK_ERROR",
206     .udesc  = "Piggyback scrubber errors",
207     .ucode = 0x2,
208   },
209   { .uname  = "ALL",
210     .udesc  = "All sub-events selected",
211     .ucode = 0x3,
212     .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
213   },
214 };
215
216 static const amd64_umask_t amd64_fam11h_prefetch_instructions_dispatched[]={
217    { .uname  = "LOAD",
218      .udesc  = "Load (Prefetch, PrefetchT0/T1/T2)",
219      .ucode = 0x1,
220    },
221    { .uname  = "STORE",
222      .udesc  = "Store (PrefetchW)",
223      .ucode = 0x2,
224    },
225    { .uname  = "NTA",
226      .udesc  = "NTA (PrefetchNTA)",
227      .ucode = 0x4,
228    },
229    { .uname  = "ALL",
230      .udesc  = "All sub-events selected",
231      .ucode = 0x7,
232      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
233    },
234 };
235
236 static const amd64_umask_t amd64_fam11h_dcache_misses_by_locked_instructions[]={
237    { .uname  = "DATA_CACHE_MISSES_BY_LOCKED_INSTRUCTIONS",
238      .udesc  = "Data cache misses by locked instructions",
239      .ucode = 0x2,
240    },
241    { .uname  = "ALL",
242      .udesc  = "All sub-events selected",
243      .ucode = 0x2,
244      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
245    },
246 };
247
248 static const amd64_umask_t amd64_fam11h_memory_requests[]={
249    { .uname  = "NON_CACHEABLE",
250      .udesc  = "Requests to non-cacheable (UC) memory",
251      .ucode = 0x1,
252    },
253    { .uname  = "WRITE_COMBINING",
254      .udesc  = "Requests to write-combining (WC) memory or WC buffer flushes to WB memory",
255      .ucode = 0x2,
256    },
257    { .uname  = "STREAMING_STORE",
258      .udesc  = "Streaming store (SS) requests",
259      .ucode = 0x80,
260    },
261    { .uname  = "ALL",
262      .udesc  = "All sub-events selected",
263      .ucode = 0x83,
264      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
265    },
266 };
267
268 static const amd64_umask_t amd64_fam11h_data_prefetches[]={
269    { .uname  = "CANCELLED",
270      .udesc  = "Cancelled prefetches",
271      .ucode = 0x1,
272    },
273    { .uname  = "ATTEMPTED",
274      .udesc  = "Prefetch attempts",
275      .ucode = 0x2,
276    },
277    { .uname  = "ALL",
278      .udesc  = "All sub-events selected",
279      .ucode = 0x3,
280      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
281    },
282 };
283
284 static const amd64_umask_t amd64_fam11h_system_read_responses[]={
285    { .uname  = "EXCLUSIVE",
286      .udesc  = "Exclusive",
287      .ucode = 0x1,
288    },
289    { .uname  = "MODIFIED",
290      .udesc  = "Modified",
291      .ucode = 0x2,
292    },
293    { .uname  = "SHARED",
294      .udesc  = "Shared",
295      .ucode = 0x4,
296    },
297    { .uname  = "DATA_ERROR",
298      .udesc  = "Data Error",
299      .ucode = 0x10,
300    },
301    { .uname  = "ALL",
302      .udesc  = "All sub-events selected",
303      .ucode = 0x17,
304      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
305    },
306 };
307
308 static const amd64_umask_t amd64_fam11h_quadwords_written_to_system[]={
309    { .uname  = "QUADWORD_WRITE_TRANSFER",
310      .udesc  = "Quadword write transfer",
311      .ucode = 0x1,
312    },
313    { .uname  = "ALL",
314      .udesc  = "All sub-events selected",
315      .ucode = 0x1,
316      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
317    },
318 };
319
320 static const amd64_umask_t amd64_fam11h_requests_to_l2[]={
321    { .uname  = "INSTRUCTIONS",
322      .udesc  = "IC fill",
323      .ucode = 0x1,
324    },
325    { .uname  = "DATA",
326      .udesc  = "DC fill",
327      .ucode = 0x2,
328    },
329    { .uname  = "TLB_WALK",
330      .udesc  = "TLB fill (page table walks)",
331      .ucode = 0x4,
332    },
333    { .uname  = "SNOOP",
334      .udesc  = "Tag snoop request",
335      .ucode = 0x8,
336    },
337    { .uname  = "CANCELLED",
338      .udesc  = "Cancelled request",
339      .ucode = 0x10,
340    },
341    { .uname  = "ALL",
342      .udesc  = "All sub-events selected",
343      .ucode = 0x1f,
344      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
345    },
346 };
347
348 static const amd64_umask_t amd64_fam11h_l2_cache_miss[]={
349    { .uname  = "INSTRUCTIONS",
350      .udesc  = "IC fill",
351      .ucode = 0x1,
352    },
353    { .uname  = "DATA",
354      .udesc  = "DC fill (includes possible replays, whereas EventSelect 041h does not)",
355      .ucode = 0x2,
356    },
357    { .uname  = "TLB_WALK",
358      .udesc  = "TLB page table walk",
359      .ucode = 0x4,
360    },
361    { .uname  = "ALL",
362      .udesc  = "All sub-events selected",
363      .ucode = 0x7,
364      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
365    },
366 };
367
368 static const amd64_umask_t amd64_fam11h_l2_fill_writeback[]={
369    { .uname  = "L2_FILLS",
370      .udesc  = "L2 fills (victims from L1 caches, TLB page table walks and data prefetches)",
371      .ucode = 0x1,
372    },
373    { .uname  = "L2_WRITEBACKS",
374      .udesc  = "L2 Writebacks to system.",
375      .ucode = 0x2,
376    },
377    { .uname  = "ALL",
378      .udesc  = "All sub-events selected",
379      .ucode = 0x3,
380      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
381    },
382 };
383
384 static const amd64_umask_t amd64_fam11h_retired_mmx_and_fp_instructions[]={
385    { .uname  = "X87",
386      .udesc  = "X87 instructions",
387      .ucode = 0x1,
388    },
389    { .uname  = "MMX_AND_3DNOW",
390      .udesc  = "MMX and 3DNow! instructions",
391      .ucode = 0x2,
392    },
393    { .uname  = "PACKED_SSE_AND_SSE2",
394      .udesc  = "Packed SSE and SSE2 instructions",
395      .ucode = 0x4,
396    },
397    { .uname  = "SCALAR_SSE_AND_SSE2",
398      .udesc  = "Scalar SSE and SSE2 instructions",
399      .ucode = 0x8,
400    },
401    { .uname  = "ALL",
402      .udesc  = "All sub-events selected",
403      .ucode = 0xf,
404      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
405    },
406 };
407
408 static const amd64_umask_t amd64_fam11h_retired_fastpath_double_op_instructions[]={
409   { .uname  = "POSITION_0",
410     .udesc  = "With low op in position 0",
411     .ucode = 0x1,
412   },
413   { .uname  = "POSITION_1",
414     .udesc  = "With low op in position 1",
415     .ucode = 0x2,
416   },
417   { .uname  = "POSITION_2",
418     .udesc  = "With low op in position 2",
419     .ucode = 0x4,
420   },
421   { .uname  = "ALL",
422     .udesc  = "All sub-events selected",
423     .ucode = 0x7,
424     .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
425   },
426 };
427
428 static const amd64_umask_t amd64_fam11h_interrupt_events[]={
429    { .uname  = "FIXED_AND_LPA",
430      .udesc  = "Fixed and LPA",
431      .ucode = 0x1,
432    },
433    { .uname  = "LPA",
434      .udesc  = "LPA",
435      .ucode = 0x2,
436    },
437    { .uname  = "SMI",
438      .udesc  = "SMI",
439      .ucode = 0x4,
440    },
441    { .uname  = "NMI",
442      .udesc  = "NMI",
443      .ucode = 0x8,
444    },
445    { .uname  = "INIT",
446      .udesc  = "INIT",
447      .ucode = 0x10,
448    },
449    { .uname  = "STARTUP",
450      .udesc  = "STARTUP",
451      .ucode = 0x20,
452    },
453    { .uname  = "INT",
454      .udesc  = "INT",
455      .ucode = 0x40,
456    },
457    { .uname  = "EOI",
458      .udesc  = "EOI",
459      .ucode = 0x80,
460    },
461    { .uname  = "ALL",
462      .udesc  = "All sub-events selected",
463      .ucode = 0xff,
464      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
465    },
466 };
467
468 static const amd64_umask_t amd64_fam11h_sideband_signals[]={
469    { .uname  = "HALT",
470      .udesc  = "HALT",
471      .ucode = 0x1,
472    },
473    { .uname  = "STOPGRANT",
474      .udesc  = "STOPGRANT",
475      .ucode = 0x2,
476    },
477    { .uname  = "SHUTDOWN",
478      .udesc  = "SHUTDOWN",
479      .ucode = 0x4,
480    },
481    { .uname  = "WBINVD",
482      .udesc  = "WBINVD",
483      .ucode = 0x8,
484    },
485    { .uname  = "INVD",
486      .udesc  = "INVD",
487      .ucode = 0x10,
488    },
489    { .uname  = "ALL",
490      .udesc  = "All sub-events selected",
491      .ucode = 0x1f,
492      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
493    },
494 };
495
496 static const amd64_umask_t amd64_fam11h_fpu_exceptions[]={
497    { .uname  = "X87_RECLASS_MICROFAULTS",
498      .udesc  = "X87 reclass microfaults",
499      .ucode = 0x1,
500    },
501    { .uname  = "SSE_RETYPE_MICROFAULTS",
502      .udesc  = "SSE retype microfaults",
503      .ucode = 0x2,
504    },
505    { .uname  = "SSE_RECLASS_MICROFAULTS",
506      .udesc  = "SSE reclass microfaults",
507      .ucode = 0x4,
508    },
509    { .uname  = "SSE_AND_X87_MICROTRAPS",
510      .udesc  = "SSE and x87 microtraps",
511      .ucode = 0x8,
512    },
513    { .uname  = "ALL",
514      .udesc  = "All sub-events selected",
515      .ucode = 0xf,
516      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
517    },
518 };
519
520 static const amd64_umask_t amd64_fam11h_dram_accesses[]={
521    { .uname  = "DCT0_PAGE_HIT",
522      .udesc  = "DCT0 Page hit",
523      .ucode = 0x1,
524    },
525    { .uname  = "DCT0_PAGE_MISS",
526      .udesc  = "DCT0 Page Miss",
527      .ucode = 0x2,
528    },
529    { .uname  = "DCT0_PAGE_CONFLICT",
530      .udesc  = "DCT0 Page Conflict",
531      .ucode = 0x4,
532    },
533    { .uname  = "DCT1_PAGE_HIT",
534      .udesc  = "DCT1 Page hit",
535      .ucode = 0x8,
536    },
537    { .uname  = "DCT1_PAGE_MISS",
538      .udesc  = "DCT1 Page Miss",
539      .ucode = 0x10,
540    },
541    { .uname  = "DCT1_PAGE_CONFLICT",
542      .udesc  = "DCT1 Page Conflict",
543      .ucode = 0x20,
544    },
545    { .uname  = "WRITE_REQUEST",
546      .udesc  = "Write request.",
547      .ucode = 0x40,
548    },
549    { .uname  = "READ_REQUEST",
550      .udesc  = "Read request.",
551      .ucode = 0x80,
552    },
553    { .uname  = "ALL",
554      .udesc  = "All sub-events selected",
555      .ucode = 0xff,
556      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
557    },
558 };
559
560 static const amd64_umask_t amd64_fam11h_dram_controller_page_table_events[]={
561    { .uname  = "DCT_PAGE_TABLE_OVERFLOW",
562      .udesc  = "DCT Page Table Overflow",
563      .ucode = 0x1,
564    },
565    { .uname  = "STALE_TABLE_ENTRY_HITS",
566      .udesc  = "Number of stale table entry hits. (hit on a page closed too soon).",
567      .ucode = 0x2,
568    },
569    { .uname  = "PAGE_TABLE_IDLE_CYCLE_LIMIT_INCREMENTED",
570      .udesc  = "Page table idle cycle limit incremented.",
571      .ucode = 0x4,
572    },
573    { .uname  = "PAGE_TABLE_IDLE_CYCLE_LIMIT_DECREMENTED",
574      .udesc  = "Page table idle cycle limit decremented.",
575      .ucode = 0x8,
576    },
577    { .uname  = "ALL",
578      .udesc  = "All sub-events selected",
579      .ucode = 0xf,
580      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
581    },
582 };
583
584 static const amd64_umask_t amd64_fam11h_memory_controller_turnarounds[]={
585    { .uname  = "DCT0_READ_TO_WRITE",
586      .udesc  = "DCT0 read-to-write turnaround.",
587      .ucode = 0x1,
588    },
589    { .uname  = "DCT0_WRITE_TO_READ",
590      .udesc  = "DCT0 write-to-read turnaround",
591      .ucode = 0x2,
592    },
593    { .uname  = "DCT0_DIMM",
594      .udesc  = "DCT0 DIMM (chip select) turnaround",
595      .ucode = 0x4,
596    },
597    { .uname  = "DCT1_READ_TO_WRITE",
598      .udesc  = "DCT1 read-to-write turnaround.",
599      .ucode = 0x8,
600    },
601    { .uname  = "DCT1_WRITE_TO_READ",
602      .udesc  = "DCT1 write-to-read turnaround",
603      .ucode = 0x10,
604    },
605    { .uname  = "DCT1_DIMM",
606      .udesc  = "DCT1 DIMM (chip select) turnaround",
607      .ucode = 0x20,
608    },
609    { .uname  = "ALL",
610      .udesc  = "All sub-events selected",
611      .ucode = 0x3f,
612      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
613    },
614 };
615
616 static const amd64_umask_t amd64_fam11h_memory_rbd_queue[]={
617    { .uname  = "COUNTER_REACHED",
618      .udesc  = "F2x[1,0]94[DcqBypassMax] counter reached.",
619      .ucode = 0x4,
620    },
621    { .uname  = "ALL",
622      .udesc  = "All sub-events selected",
623      .ucode = 0x4,
624      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
625    },
626 };
627
628 static const amd64_umask_t amd64_fam11h_thermal_status[]={
629    { .uname  = "MEMHOT_L_ASSERTIONS",
630      .udesc  = "Number of clocks MEMHOT_L is asserted.",
631      .ucode = 0x1,
632    },
633    { .uname  = "HTC_TRANSITIONS",
634      .udesc  = "Number of times the HTC transitions from inactive to active.",
635      .ucode = 0x4,
636    },
637    { .uname  = "CLOCKS_HTC_P_STATE_INACTIVE",
638      .udesc  = "Number of clocks HTC P-state is inactive.",
639      .ucode = 0x20,
640    },
641    { .uname  = "CLOCKS_HTC_P_STATE_ACTIVE",
642      .udesc  = "Number of clocks HTC P-state is active",
643      .ucode = 0x40,
644    },
645    { .uname  = "PROCHOT_L_ASSERTIONS",
646      .udesc  = "PROCHOT_L asserted by an external source and the assertion causes a P-state change.",
647      .ucode = 0x80,
648    },
649    { .uname  = "ALL",
650      .udesc  = "All sub-events selected",
651      .ucode = 0xe5,
652      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
653    },
654 };
655
656 static const amd64_umask_t amd64_fam11h_cpu_io_requests_to_memory_io[]={
657    { .uname  = "I_O_TO_I_O",
658      .udesc  = "IO to IO",
659      .ucode = 0xa1,
660      .uflags= AMD64_FL_NCOMBO,
661    },
662    { .uname  = "I_O_TO_MEM",
663      .udesc  = "IO to Mem",
664      .ucode = 0xa2,
665      .uflags= AMD64_FL_NCOMBO,
666    },
667    { .uname  = "CPU_TO_I_O",
668      .udesc  = "CPU to IO",
669      .ucode = 0xa4,
670      .uflags= AMD64_FL_NCOMBO,
671    },
672    { .uname  = "CPU_TO_MEM",
673      .udesc  = "CPU to Mem",
674      .ucode = 0xa8,
675      .uflags= AMD64_FL_NCOMBO,
676    },
677    { .uname  = "ALL",
678      .udesc  = "All sub-events selected",
679      .ucode = 0xaf,
680      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
681    },
682 };
683
684 static const amd64_umask_t amd64_fam11h_cache_block[]={
685    { .uname  = "VICTIM_WRITEBACK",
686      .udesc  = "Victim Block (Writeback)",
687      .ucode = 0x1,
688    },
689    { .uname  = "DCACHE_LOAD_MISS",
690      .udesc  = "Read Block (Dcache load miss refill)",
691      .ucode = 0x4,
692    },
693    { .uname  = "SHARED_ICACHE_REFILL",
694      .udesc  = "Read Block Shared (Icache refill)",
695      .ucode = 0x8,
696    },
697    { .uname  = "READ_BLOCK_MODIFIED",
698      .udesc  = "Read Block Modified (Dcache store miss refill)",
699      .ucode = 0x10,
700    },
701    { .uname  = "READ_TO_DIRTY",
702      .udesc  = "Change-to-Dirty (first store to clean block already in cache)",
703      .ucode = 0x20,
704    },
705    { .uname  = "ALL",
706      .udesc  = "All sub-events selected",
707      .ucode = 0x3d,
708      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
709    },
710 };
711
712 static const amd64_umask_t amd64_fam11h_sized_commands[]={
713    { .uname  = "NON_POSTED_WRITE_BYTE",
714      .udesc  = "Non-Posted SzWr Byte (1-32 bytes) Legacy or mapped IO, typically 1-4 bytes",
715      .ucode = 0x1,
716    },
717    { .uname  = "NON_POSTED_WRITE_DWORD",
718      .udesc  = "Non-Posted SzWr DW (1-16 dwords) Legacy or mapped IO, typically 1 DWORD",
719      .ucode = 0x2,
720    },
721    { .uname  = "POSTED_WRITE_BYTE",
722      .udesc  = "Posted SzWr Byte (1-32 bytes) Subcache-line DMA writes, size varies; also flushes of partially-filled Write Combining buffer",
723      .ucode = 0x4,
724    },
725    { .uname  = "POSTED_WRITE_DWORD",
726      .udesc  = "Posted SzWr DW (1-16 dwords) Block-oriented DMA writes, often cache-line sized; also processor Write Combining buffer flushes",
727      .ucode = 0x8,
728    },
729    { .uname  = "READ_BYTE_4_BYTES",
730      .udesc  = "SzRd Byte (4 bytes) Legacy or mapped IO",
731      .ucode = 0x10,
732    },
733    { .uname  = "READ_DWORD_1_16_DWORDS",
734      .udesc  = "SzRd DW (1-16 dwords) Block-oriented DMA reads, typically cache-line size",
735      .ucode = 0x20,
736    },
737    { .uname  = "ALL",
738      .udesc  = "All sub-events selected",
739      .ucode = 0x3f,
740      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
741    },
742 };
743
744 static const amd64_umask_t amd64_fam11h_probe[]={
745    { .uname  = "MISS",
746      .udesc  = "Probe miss",
747      .ucode = 0x1,
748    },
749    { .uname  = "HIT_CLEAN",
750      .udesc  = "Probe hit clean",
751      .ucode = 0x2,
752    },
753    { .uname  = "HIT_DIRTY_NO_MEMORY_CANCEL",
754      .udesc  = "Probe hit dirty without memory cancel (probed by Sized Write or Change2Dirty)",
755      .ucode = 0x4,
756    },
757    { .uname  = "HIT_DIRTY_WITH_MEMORY_CANCEL",
758      .udesc  = "Probe hit dirty with memory cancel (probed by DMA read or cache refill request)",
759      .ucode = 0x8,
760    },
761    { .uname  = "UPSTREAM_DISPLAY_REFRESH_READS",
762      .udesc  = "Upstream display refresh/ISOC reads.",
763      .ucode = 0x10,
764    },
765    { .uname  = "UPSTREAM_NON_DISPLAY_REFRESH_READS",
766      .udesc  = "Upstream non-display refresh reads.",
767      .ucode = 0x20,
768    },
769    { .uname  = "UPSTREAM_ISOC_WRITES",
770      .udesc  = "Upstream ISOC writes.",
771      .ucode = 0x40,
772    },
773    { .uname  = "UPSTREAM_NON_ISOC_WRITES",
774      .udesc  = "Upstream non-ISOC writes.",
775      .ucode = 0x80,
776    },
777    { .uname  = "ALL",
778      .udesc  = "All sub-events selected",
779      .ucode = 0xff,
780      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
781    },
782 };
783
784 static const amd64_umask_t amd64_fam11h_dev[]={
785    { .uname  = "DEV_HIT",
786      .udesc  = "DEV hit",
787      .ucode = 0x10,
788    },
789    { .uname  = "DEV_MISS",
790      .udesc  = "DEV miss",
791      .ucode = 0x20,
792    },
793    { .uname  = "DEV_ERROR",
794      .udesc  = "DEV error",
795      .ucode = 0x40,
796    },
797    { .uname  = "ALL",
798      .udesc  = "All sub-events selected",
799      .ucode = 0x70,
800      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
801    },
802 };
803
804 static const amd64_umask_t amd64_fam11h_memory_controller_requests[]={
805    { .uname  = "32_BYTES_WRITES",
806      .udesc  = "32 Bytes Sized Writes",
807      .ucode = 0x8,
808    },
809    { .uname  = "64_BYTES_WRITES",
810      .udesc  = "64 Bytes Sized Writes",
811      .ucode = 0x10,
812    },
813    { .uname  = "32_BYTES_READS",
814      .udesc  = "32 Bytes Sized Reads",
815      .ucode = 0x20,
816    },
817    { .uname  = "64_BYTES_READS",
818      .udesc  = "64 Byte Sized Reads",
819      .ucode = 0x40,
820    },
821    { .uname  = "ALL",
822      .udesc  = "All sub-events selected",
823      .ucode = 0x78,
824      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
825    },
826 };
827
828 static const amd64_umask_t amd64_fam11h_hypertransport_link0[]={
829   { .uname  = "COMMAND_DWORD_SENT",
830     .udesc  = "Command DWORD sent",
831     .ucode = 0x1,
832     .grpid = 0,
833   },
834   { .uname  = "ADDRESS_DWORD_SENT",
835     .udesc  = "Address DWORD sent",
836     .ucode = 0x2,
837     .grpid = 0,
838   },
839   { .uname  = "DATA_DWORD_SENT",
840     .udesc  = "Data DWORD sent",
841     .ucode = 0x4,
842     .grpid = 0,
843   },
844   { .uname  = "BUFFER_RELEASE_DWORD_SENT",
845     .udesc  = "Buffer release DWORD sent",
846     .ucode = 0x8,
847     .grpid = 0,
848   },
849   { .uname  = "NOP_DWORD_SENT",
850     .udesc  = "Nop DW sent (idle)",
851     .ucode = 0x10,
852     .grpid = 0,
853   },
854   { .uname  = "PER_PACKET_CRC_SENT",
855     .udesc  = "Per packet CRC sent",
856     .ucode = 0x20,
857     .grpid = 0,
858   },
859   { .uname  = "ALL",
860     .udesc  = "All sub-events selected",
861     .ucode = 0x3f,
862     .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
863     .grpid = 0,
864   },
865 };
866
867
868 static const amd64_entry_t amd64_fam11h_pe[]={
869 { .name    = "DISPATCHED_FPU",
870   .desc    = "Dispatched FPU Operations",
871   .modmsk  = AMD64_FAM10H_ATTRS,
872   .code    = 0x0,
873   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam11h_dispatched_fpu),
874   .ngrp    = 1,
875   .umasks  = amd64_fam11h_dispatched_fpu,
876 },
877 { .name    = "CYCLES_NO_FPU_OPS_RETIRED",
878   .desc    = "Cycles in which the FPU is Empty",
879   .modmsk  = AMD64_FAM10H_ATTRS,
880   .code    = 0x1,
881 },
882 { .name    = "DISPATCHED_FPU_OPS_FAST_FLAG",
883   .desc    = "Dispatched Fast Flag FPU Operations",
884   .modmsk  = AMD64_FAM10H_ATTRS,
885   .code    = 0x2,
886 },
887 { .name    = "SEGMENT_REGISTER_LOADS",
888   .desc    = "Segment Register Loads",
889   .modmsk  = AMD64_FAM10H_ATTRS,
890   .code    = 0x20,
891   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam11h_segment_register_loads),
892   .ngrp    = 1,
893   .umasks  = amd64_fam11h_segment_register_loads,
894 },
895 { .name    = "PIPELINE_RESTART_DUE_TO_SELF_MODIFYING_CODE",
896   .desc    = "Pipeline Restart Due to Self-Modifying Code",
897   .modmsk  = AMD64_FAM10H_ATTRS,
898   .code    = 0x21,
899 },
900 { .name    = "PIPELINE_RESTART_DUE_TO_PROBE_HIT",
901   .desc    = "Pipeline Restart Due to Probe Hit",
902   .modmsk  = AMD64_FAM10H_ATTRS,
903   .code    = 0x22,
904 },
905 { .name    = "LS_BUFFER_2_FULL_CYCLES",
906   .desc    = "LS Buffer 2 Full",
907   .modmsk  = AMD64_FAM10H_ATTRS,
908   .code    = 0x23,
909 },
910 { .name    = "LOCKED_OPS",
911   .desc    = "Locked Operations",
912   .modmsk  = AMD64_FAM10H_ATTRS,
913   .code    = 0x24,
914   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam11h_locked_ops),
915   .ngrp    = 1,
916   .umasks  = amd64_fam11h_locked_ops,
917 },
918 { .name    = "RETIRED_CLFLUSH_INSTRUCTIONS",
919   .desc    = "Retired CLFLUSH Instructions",
920   .modmsk  = AMD64_FAM10H_ATTRS,
921   .code    = 0x26,
922 },
923 { .name    = "RETIRED_CPUID_INSTRUCTIONS",
924   .desc    = "Retired CPUID Instructions",
925   .modmsk  = AMD64_FAM10H_ATTRS,
926   .code    = 0x27,
927 },
928 { .name    = "DATA_CACHE_ACCESSES",
929   .desc    = "Data Cache Accesses",
930   .modmsk  = AMD64_FAM10H_ATTRS,
931   .code    = 0x40,
932 },
933 { .name    = "DATA_CACHE_MISSES",
934   .desc    = "Data Cache Misses",
935   .modmsk  = AMD64_FAM10H_ATTRS,
936   .code    = 0x41,
937 },
938 { .name    = "DATA_CACHE_REFILLS",
939   .desc    = "Data Cache Refills from L2 or System",
940   .modmsk  = AMD64_FAM10H_ATTRS,
941   .code    = 0x42,
942   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam11h_data_cache_refills),
943   .ngrp    = 1,
944   .umasks  = amd64_fam11h_data_cache_refills,
945 },
946 { .name    = "DATA_CACHE_REFILLS_FROM_SYSTEM",
947   .desc    = "Data Cache Refills from the System",
948   .modmsk  = AMD64_FAM10H_ATTRS,
949   .code    = 0x43,
950   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam11h_data_cache_refills_from_system),
951   .ngrp    = 1,
952   .umasks  = amd64_fam11h_data_cache_refills_from_system,
953 },
954 { .name    = "DATA_CACHE_LINES_EVICTED",
955   .desc    = "Data Cache Lines Evicted",
956   .modmsk  = AMD64_FAM10H_ATTRS,
957   .code    = 0x44,
958   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam11h_data_cache_lines_evicted),
959   .ngrp    = 1,
960   .umasks  = amd64_fam11h_data_cache_lines_evicted,
961 },
962 { .name    = "L1_DTLB_MISS_AND_L2_DTLB_HIT",
963   .desc    = "Number of data cache accesses that miss in L1 DTLB and hit in L2 DTLB",
964   .modmsk  = AMD64_FAM10H_ATTRS,
965   .code    = 0x45,
966 },
967 { .name    = "L1_DTLB_AND_L2_DTLB_MISS",
968   .desc    = "Number of data cache accesses that miss both the L1 and L2 DTLBs",
969   .modmsk  = AMD64_FAM10H_ATTRS,
970   .code    = 0x46,
971 },
972 { .name    = "MISALIGNED_ACCESSES",
973   .desc    = "Misaligned Accesses",
974   .modmsk  = AMD64_FAM10H_ATTRS,
975   .code    = 0x47,
976 },
977 { .name    = "MICROARCHITECTURAL_LATE_CANCEL_OF_AN_ACCESS",
978   .desc    = "Microarchitectural Late Cancel of an Access",
979   .modmsk  = AMD64_FAM10H_ATTRS,
980   .code    = 0x48,
981 },
982 { .name    = "MICROARCHITECTURAL_EARLY_CANCEL_OF_AN_ACCESS",
983   .desc    = "Microarchitectural Early Cancel of an Access",
984   .modmsk  = AMD64_FAM10H_ATTRS,
985   .code    = 0x49,
986 },
987 { .name    = "SCRUBBER_SINGLE_BIT_ECC_ERRORS",
988   .desc    = "Single-bit ECC Errors Recorded by Scrubber",
989   .modmsk  = AMD64_FAM10H_ATTRS,
990   .code    = 0x4a,
991   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam11h_scrubber_single_bit_ecc_errors),
992   .ngrp    = 1,
993   .umasks  = amd64_fam11h_scrubber_single_bit_ecc_errors,
994 },
995 { .name    = "PREFETCH_INSTRUCTIONS_DISPATCHED",
996   .desc    = "Prefetch Instructions Dispatched",
997   .modmsk  = AMD64_FAM10H_ATTRS,
998   .code    = 0x4b,
999   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam11h_prefetch_instructions_dispatched),
1000   .ngrp    = 1,
1001   .umasks  = amd64_fam11h_prefetch_instructions_dispatched,
1002 },
1003 { .name    = "DCACHE_MISSES_BY_LOCKED_INSTRUCTIONS",
1004   .desc    = "DCACHE Misses by Locked Instructions",
1005   .modmsk  = AMD64_FAM10H_ATTRS,
1006   .code    = 0x4c,
1007   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam11h_dcache_misses_by_locked_instructions),
1008   .ngrp    = 1,
1009   .umasks  = amd64_fam11h_dcache_misses_by_locked_instructions,
1010 },
1011 { .name    = "MEMORY_REQUESTS",
1012   .desc    = "Memory Requests by Type",
1013   .modmsk  = AMD64_FAM10H_ATTRS,
1014   .code    = 0x65,
1015   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam11h_memory_requests),
1016   .ngrp    = 1,
1017   .umasks  = amd64_fam11h_memory_requests,
1018 },
1019 { .name    = "DATA_PREFETCHES",
1020   .desc    = "Data Prefetcher",
1021   .modmsk  = AMD64_FAM10H_ATTRS,
1022   .code    = 0x67,
1023   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam11h_data_prefetches),
1024   .ngrp    = 1,
1025   .umasks  = amd64_fam11h_data_prefetches,
1026 },
1027 { .name    = "SYSTEM_READ_RESPONSES",
1028   .desc    = "System Read Responses by Coherency State",
1029   .modmsk  = AMD64_FAM10H_ATTRS,
1030   .code    = 0x6c,
1031   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam11h_system_read_responses),
1032   .ngrp    = 1,
1033   .umasks  = amd64_fam11h_system_read_responses,
1034 },
1035 { .name    = "QUADWORDS_WRITTEN_TO_SYSTEM",
1036   .desc    = "Quadwords Written to System",
1037   .modmsk  = AMD64_FAM10H_ATTRS,
1038   .code    = 0x6d,
1039   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam11h_quadwords_written_to_system),
1040   .ngrp    = 1,
1041   .umasks  = amd64_fam11h_quadwords_written_to_system,
1042 },
1043 { .name    = "CPU_CLK_UNHALTED",
1044   .desc    = "CPU Clocks not Halted",
1045   .modmsk  = AMD64_FAM10H_ATTRS,
1046   .code    = 0x76,
1047 },
1048 { .name    = "REQUESTS_TO_L2",
1049   .desc    = "Requests to L2 Cache",
1050   .modmsk  = AMD64_FAM10H_ATTRS,
1051   .code    = 0x7d,
1052   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam11h_requests_to_l2),
1053   .ngrp    = 1,
1054   .umasks  = amd64_fam11h_requests_to_l2,
1055 },
1056 { .name    = "L2_CACHE_MISS",
1057   .desc    = "L2 Cache Misses",
1058   .modmsk  = AMD64_FAM10H_ATTRS,
1059   .code    = 0x7e,
1060   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam11h_l2_cache_miss),
1061   .ngrp    = 1,
1062   .umasks  = amd64_fam11h_l2_cache_miss,
1063 },
1064 { .name    = "L2_FILL_WRITEBACK",
1065   .desc    = "L2 Fill/Writeback",
1066   .modmsk  = AMD64_FAM10H_ATTRS,
1067   .code    = 0x7f,
1068   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam11h_l2_fill_writeback),
1069   .ngrp    = 1,
1070   .umasks  = amd64_fam11h_l2_fill_writeback,
1071 },
1072 { .name    = "INSTRUCTION_CACHE_FETCHES",
1073   .desc    = "Instruction Cache Fetches",
1074   .modmsk  = AMD64_FAM10H_ATTRS,
1075   .code    = 0x80,
1076 },
1077 { .name    = "INSTRUCTION_CACHE_MISSES",
1078   .desc    = "Instruction Cache Misses",
1079   .modmsk  = AMD64_FAM10H_ATTRS,
1080   .code    = 0x81,
1081 },
1082 { .name    = "INSTRUCTION_CACHE_REFILLS_FROM_L2",
1083   .desc    = "Instruction Cache Refills from L2",
1084   .modmsk  = AMD64_FAM10H_ATTRS,
1085   .code    = 0x82,
1086 },
1087 { .name    = "INSTRUCTION_CACHE_REFILLS_FROM_SYSTEM",
1088   .desc    = "Instruction Cache Refills from System",
1089   .modmsk  = AMD64_FAM10H_ATTRS,
1090   .code    = 0x83,
1091 },
1092 { .name    = "L1_ITLB_MISS_AND_L2_ITLB_HIT",
1093   .desc    = "L1 ITLB Miss and L2 ITLB Hit",
1094   .modmsk  = AMD64_FAM10H_ATTRS,
1095   .code    = 0x84,
1096 },
1097 { .name    = "L1_ITLB_MISS_AND_L2_ITLB_MISS",
1098   .desc    = "L1 ITLB Miss and L2 ITLB Miss",
1099   .modmsk  = AMD64_FAM10H_ATTRS,
1100   .code    = 0x85,
1101 },
1102 { .name    = "PIPELINE_RESTART_DUE_TO_INSTRUCTION_STREAM_PROBE",
1103   .desc    = "Pipeline Restart Due to Instruction Stream Probe",
1104   .modmsk  = AMD64_FAM10H_ATTRS,
1105   .code    = 0x86,
1106 },
1107 { .name    = "INSTRUCTION_FETCH_STALL",
1108   .desc    = "Instruction Fetch Stall",
1109   .modmsk  = AMD64_FAM10H_ATTRS,
1110   .code    = 0x87,
1111 },
1112 { .name    = "RETURN_STACK_HITS",
1113   .desc    = "Return Stack Hits",
1114   .modmsk  = AMD64_FAM10H_ATTRS,
1115   .code    = 0x88,
1116 },
1117 { .name    = "RETURN_STACK_OVERFLOWS",
1118   .desc    = "Return Stack Overflows",
1119   .modmsk  = AMD64_FAM10H_ATTRS,
1120   .code    = 0x89,
1121 },
1122 { .name    = "RETIRED_INSTRUCTIONS",
1123   .desc    = "Retired Instructions",
1124   .modmsk  = AMD64_FAM10H_ATTRS,
1125   .code    = 0xc0,
1126 },
1127 { .name    = "RETIRED_UOPS",
1128   .desc    = "Retired uops",
1129   .modmsk  = AMD64_FAM10H_ATTRS,
1130   .code    = 0xc1,
1131 },
1132 { .name    = "RETIRED_BRANCH_INSTRUCTIONS",
1133   .desc    = "Retired Branch Instructions",
1134   .modmsk  = AMD64_FAM10H_ATTRS,
1135   .code    = 0xc2,
1136 },
1137 { .name    = "RETIRED_MISPREDICTED_BRANCH_INSTRUCTIONS",
1138   .desc    = "Retired Mispredicted Branch Instructions",
1139   .modmsk  = AMD64_FAM10H_ATTRS,
1140   .code    = 0xc3,
1141 },
1142 { .name    = "RETIRED_TAKEN_BRANCH_INSTRUCTIONS",
1143   .desc    = "Retired Taken Branch Instructions",
1144   .modmsk  = AMD64_FAM10H_ATTRS,
1145   .code    = 0xc4,
1146 },
1147 { .name    = "RETIRED_TAKEN_BRANCH_INSTRUCTIONS_MISPREDICTED",
1148   .desc    = "Retired Taken Branch Instructions Mispredicted",
1149   .modmsk  = AMD64_FAM10H_ATTRS,
1150   .code    = 0xc5,
1151 },
1152 { .name    = "RETIRED_FAR_CONTROL_TRANSFERS",
1153   .desc    = "Retired Far Control Transfers",
1154   .modmsk  = AMD64_FAM10H_ATTRS,
1155   .code    = 0xc6,
1156 },
1157 { .name    = "RETIRED_BRANCH_RESYNCS",
1158   .desc    = "Retired Branch Resyncs",
1159   .modmsk  = AMD64_FAM10H_ATTRS,
1160   .code    = 0xc7,
1161 },
1162 { .name    = "RETIRED_NEAR_RETURNS",
1163   .desc    = "Retired Near Returns",
1164   .modmsk  = AMD64_FAM10H_ATTRS,
1165   .code    = 0xc8,
1166 },
1167 { .name    = "RETIRED_NEAR_RETURNS_MISPREDICTED",
1168   .desc    = "Retired Near Returns Mispredicted",
1169   .modmsk  = AMD64_FAM10H_ATTRS,
1170   .code    = 0xc9,
1171 },
1172 { .name    = "RETIRED_INDIRECT_BRANCHES_MISPREDICTED",
1173   .desc    = "Retired Indirect Branches Mispredicted",
1174   .modmsk  = AMD64_FAM10H_ATTRS,
1175   .code    = 0xca,
1176 },
1177 { .name    = "RETIRED_MMX_AND_FP_INSTRUCTIONS",
1178   .desc    = "Retired MMX/FP Instructions",
1179   .modmsk  = AMD64_FAM10H_ATTRS,
1180   .code    = 0xcb,
1181   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam11h_retired_mmx_and_fp_instructions),
1182   .ngrp    = 1,
1183   .umasks  = amd64_fam11h_retired_mmx_and_fp_instructions,
1184 },
1185 { .name    = "RETIRED_FASTPATH_DOUBLE_OP_INSTRUCTIONS",
1186   .desc    = "Retired Fastpath Double Op Instructions",
1187   .modmsk  = AMD64_FAM10H_ATTRS,
1188   .code    = 0xcc,
1189   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam11h_retired_fastpath_double_op_instructions),
1190   .ngrp    = 1,
1191   .umasks  = amd64_fam11h_retired_fastpath_double_op_instructions,
1192 },
1193 { .name    = "INTERRUPTS_MASKED_CYCLES",
1194   .desc    = "Interrupts-Masked Cycles",
1195   .modmsk  = AMD64_FAM10H_ATTRS,
1196   .code    = 0xcd,
1197 },
1198 { .name    = "INTERRUPTS_MASKED_CYCLES_WITH_INTERRUPT_PENDING",
1199   .desc    = "Interrupts-Masked Cycles with Interrupt Pending",
1200   .modmsk  = AMD64_FAM10H_ATTRS,
1201   .code    = 0xce,
1202 },
1203 { .name    = "INTERRUPTS_TAKEN",
1204   .desc    = "Interrupts Taken",
1205   .modmsk  = AMD64_FAM10H_ATTRS,
1206   .code    = 0xcf,
1207 },
1208 { .name    = "DECODER_EMPTY",
1209   .desc    = "Decoder Empty",
1210   .modmsk  = AMD64_FAM10H_ATTRS,
1211   .code    = 0xd0,
1212 },
1213 { .name    = "DISPATCH_STALLS",
1214   .desc    = "Dispatch Stalls",
1215   .modmsk  = AMD64_FAM10H_ATTRS,
1216   .code    = 0xd1,
1217 },
1218 { .name    = "DISPATCH_STALL_FOR_BRANCH_ABORT",
1219   .desc    = "Dispatch Stall for Branch Abort to Retire",
1220   .modmsk  = AMD64_FAM10H_ATTRS,
1221   .code    = 0xd2,
1222 },
1223 { .name    = "DISPATCH_STALL_FOR_SERIALIZATION",
1224   .desc    = "Dispatch Stall for Serialization",
1225   .modmsk  = AMD64_FAM10H_ATTRS,
1226   .code    = 0xd3,
1227 },
1228 { .name    = "DISPATCH_STALL_FOR_SEGMENT_LOAD",
1229   .desc    = "Dispatch Stall for Segment Load",
1230   .modmsk  = AMD64_FAM10H_ATTRS,
1231   .code    = 0xd4,
1232 },
1233 { .name    = "DISPATCH_STALL_FOR_REORDER_BUFFER_FULL",
1234   .desc    = "Dispatch Stall for Reorder Buffer Full",
1235   .modmsk  = AMD64_FAM10H_ATTRS,
1236   .code    = 0xd5,
1237 },
1238 { .name    = "DISPATCH_STALL_FOR_RESERVATION_STATION_FULL",
1239   .desc    = "Dispatch Stall for Reservation Station Full",
1240   .modmsk  = AMD64_FAM10H_ATTRS,
1241   .code    = 0xd6,
1242 },
1243 { .name    = "DISPATCH_STALL_FOR_FPU_FULL",
1244   .desc    = "Dispatch Stall for FPU Full",
1245   .modmsk  = AMD64_FAM10H_ATTRS,
1246   .code    = 0xd7,
1247 },
1248 { .name    = "DISPATCH_STALL_FOR_LS_FULL",
1249   .desc    = "Dispatch Stall for LS Full",
1250   .modmsk  = AMD64_FAM10H_ATTRS,
1251   .code    = 0xd8,
1252 },
1253 { .name    = "DISPATCH_STALL_WAITING_FOR_ALL_QUIET",
1254   .desc    = "Dispatch Stall Waiting for All Quiet",
1255   .modmsk  = AMD64_FAM10H_ATTRS,
1256   .code    = 0xd9,
1257 },
1258 { .name    = "DISPATCH_STALL_FOR_FAR_TRANSFER_OR_RSYNC",
1259   .desc    = "Dispatch Stall for Far Transfer or Resync to Retire",
1260   .modmsk  = AMD64_FAM10H_ATTRS,
1261   .code    = 0xda,
1262 },
1263 { .name    = "FPU_EXCEPTIONS",
1264   .desc    = "FPU Exceptions",
1265   .modmsk  = AMD64_FAM10H_ATTRS,
1266   .code    = 0xdb,
1267   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam11h_fpu_exceptions),
1268   .ngrp    = 1,
1269   .umasks  = amd64_fam11h_fpu_exceptions,
1270 },
1271 { .name    = "DR0_BREAKPOINT_MATCHES",
1272   .desc    = "DR0 Breakpoint Matches",
1273   .modmsk  = AMD64_FAM10H_ATTRS,
1274   .code    = 0xdc,
1275 },
1276 { .name    = "DR1_BREAKPOINT_MATCHES",
1277   .desc    = "DR1 Breakpoint Matches",
1278   .modmsk  = AMD64_FAM10H_ATTRS,
1279   .code    = 0xdd,
1280 },
1281 { .name    = "DR2_BREAKPOINT_MATCHES",
1282   .desc    = "DR2 Breakpoint Matches",
1283   .modmsk  = AMD64_FAM10H_ATTRS,
1284   .code    = 0xde,
1285 },
1286 { .name    = "DR3_BREAKPOINT_MATCHES",
1287   .desc    = "DR3 Breakpoint Matches",
1288   .modmsk  = AMD64_FAM10H_ATTRS,
1289   .code    = 0xdf,
1290 },
1291 { .name    = "DRAM_ACCESSES",
1292   .desc    = "DRAM Accesses",
1293   .modmsk  = AMD64_FAM10H_ATTRS,
1294   .code    = 0xe0,
1295   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam11h_dram_accesses),
1296   .ngrp    = 1,
1297   .umasks  = amd64_fam11h_dram_accesses,
1298 },
1299 { .name    = "DRAM_CONTROLLER_PAGE_TABLE_EVENTS",
1300   .desc    = "DRAM Controller Page Table Events",
1301   .modmsk  = AMD64_FAM10H_ATTRS,
1302   .code    = 0xe1,
1303   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam11h_dram_controller_page_table_events),
1304   .ngrp    = 1,
1305   .umasks  = amd64_fam11h_dram_controller_page_table_events,
1306 },
1307 { .name    = "MEMORY_CONTROLLER_TURNAROUNDS",
1308   .desc    = "Memory Controller Turnarounds",
1309   .modmsk  = AMD64_FAM10H_ATTRS,
1310   .code    = 0xe3,
1311   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam11h_memory_controller_turnarounds),
1312   .ngrp    = 1,
1313   .umasks  = amd64_fam11h_memory_controller_turnarounds,
1314 },
1315 { .name    = "MEMORY_CONTROLLER_RBD_QUEUE",
1316   .desc    = "Memory Controller RBD Queue Events",
1317   .modmsk  = AMD64_FAM10H_ATTRS,
1318   .code    = 0xe4,
1319   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam11h_memory_rbd_queue),
1320   .ngrp    = 1,
1321   .umasks  = amd64_fam11h_memory_rbd_queue,
1322 },
1323 { .name    = "THERMAL_STATUS",
1324   .desc    = "Thermal Status",
1325   .modmsk  = AMD64_FAM10H_ATTRS,
1326   .code    = 0xe8,
1327   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam11h_thermal_status),
1328   .ngrp    = 1,
1329   .umasks  = amd64_fam11h_thermal_status,
1330 },
1331 { .name    = "CPU_IO_REQUESTS_TO_MEMORY_IO",
1332   .desc    = "CPU/IO Requests to Memory/IO",
1333   .modmsk  = AMD64_FAM10H_ATTRS,
1334   .code    = 0xe9,
1335   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam11h_cpu_io_requests_to_memory_io),
1336   .ngrp    = 1,
1337   .umasks  = amd64_fam11h_cpu_io_requests_to_memory_io,
1338 },
1339 { .name    = "CACHE_BLOCK",
1340   .desc    = "Cache Block Commands",
1341   .modmsk  = AMD64_FAM10H_ATTRS,
1342   .code    = 0xea,
1343   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam11h_cache_block),
1344   .ngrp    = 1,
1345   .umasks  = amd64_fam11h_cache_block,
1346 },
1347 { .name    = "SIZED_COMMANDS",
1348   .desc    = "Sized Commands",
1349   .modmsk  = AMD64_FAM10H_ATTRS,
1350   .code    = 0xeb,
1351   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam11h_sized_commands),
1352   .ngrp    = 1,
1353   .umasks  = amd64_fam11h_sized_commands,
1354 },
1355 { .name    = "PROBE",
1356   .desc    = "Probe Responses and Upstream Requests",
1357   .modmsk  = AMD64_FAM10H_ATTRS,
1358   .code    = 0xec,
1359   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam11h_probe),
1360   .ngrp    = 1,
1361   .umasks  = amd64_fam11h_probe,
1362 },
1363 { .name    = "DEV",
1364   .desc    = "DEV Events",
1365   .modmsk  = AMD64_FAM10H_ATTRS,
1366   .code    = 0xee,
1367   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam11h_dev),
1368   .ngrp    = 1,
1369   .umasks  = amd64_fam11h_dev,
1370 },
1371 { .name    = "HYPERTRANSPORT_LINK0",
1372   .desc    = "HyperTransport Link 0 Transmit Bandwidth",
1373   .modmsk  = AMD64_FAM10H_ATTRS,
1374   .code    = 0xf6,
1375   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam11h_hypertransport_link0),
1376   .ngrp    = 1,
1377   .umasks  = amd64_fam11h_hypertransport_link0,
1378 },
1379 { .name    = "MEMORY_CONTROLLER_REQUESTS",
1380   .desc    = "Memory Controller Requests",
1381   .modmsk  = AMD64_FAM10H_ATTRS,
1382   .code    = 0x1f0,
1383   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam11h_memory_controller_requests),
1384   .ngrp    = 1,
1385   .umasks  = amd64_fam11h_memory_controller_requests,
1386 },
1387 { .name    = "SIDEBAND_SIGNALS",
1388   .desc    = "Sideband Signals and Special Cycles",
1389   .modmsk  = AMD64_FAM10H_ATTRS,
1390   .code    = 0x1e9,
1391   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam11h_sideband_signals),
1392   .ngrp    = 1,
1393   .umasks  = amd64_fam11h_sideband_signals,
1394 },
1395 { .name    = "Interrupt Events",
1396   .desc    = "Interrupt Events",
1397   .modmsk  = AMD64_FAM10H_ATTRS,
1398   .code    = 0x1ea,
1399   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam11h_interrupt_events),
1400   .ngrp    = 1,
1401   .umasks  = amd64_fam11h_interrupt_events,
1402 },
1403 };