Adding DATALA events into Haaswell events sysfs
directory, so it's easier to use them.

Adding all DATALA events as specified by Intel SDM
manual 18.10.3 PEBS Data Address Profiling.

Link: http://lkml.kernel.org/n/tip-dvpk5ys80v41oh5xgqvlo...@git.kernel.org
Signed-off-by: Jiri Olsa <jo...@kernel.org>
---
 arch/x86/kernel/cpu/perf_event_intel.c | 39 ++++++++++++++++++++++++++++++++++
 1 file changed, 39 insertions(+)

diff --git a/arch/x86/kernel/cpu/perf_event_intel.c 
b/arch/x86/kernel/cpu/perf_event_intel.c
index fed2ab1f1065..aadccb782e78 100644
--- a/arch/x86/kernel/cpu/perf_event_intel.c
+++ b/arch/x86/kernel/cpu/perf_event_intel.c
@@ -3253,6 +3253,26 @@ static __init void intel_ht_bug(void)
 EVENT_ATTR_STR(mem-loads,      mem_ld_hsw,     "event=0xcd,umask=0x1,ldlat=3");
 EVENT_ATTR_STR(mem-stores,     mem_st_hsw,     "event=0xd0,umask=0x82")
 
+EVENT_ATTR_STR(mem-stlb-miss-loads,    hsw_stlb_miss_loads,    
"event=0xd0,umask=0x11");
+EVENT_ATTR_STR(mem-stlb-miss-stores,   hsw_stlb_miss_stores,   
"event=0xd0,umask=0x12");
+EVENT_ATTR_STR(mem-lock-loads,         hsw_lock_loads,         
"event=0xd0,umask=0x21");
+EVENT_ATTR_STR(mem-split-loads,                hsw_split_loads,        
"event=0xd0,umask=0x41");
+EVENT_ATTR_STR(mem-split-stores,       hsw_split_stores,       
"event=0xd0,umask=0x42");
+EVENT_ATTR_STR(mem-all-loads,          hsw_all_loads,          
"event=0xd0,umask=0x81");
+EVENT_ATTR_STR(mem-all-stores,         hsw_all_stores,         
"event=0xd0,umask=0x82");
+EVENT_ATTR_STR(mem-load-l1-hit,                hsw_load_l1_hit,        
"event=0xd1,umask=0x01");
+EVENT_ATTR_STR(mem-load-l2-hit,                hsw_load_l2_hit,        
"event=0xd1,umask=0x02");
+EVENT_ATTR_STR(mem-load-l3-hit,                hsw_load_l3_hit,        
"event=0xd1,umask=0x04");
+EVENT_ATTR_STR(mem-load-l1-miss,       hsw_load_l1_miss,       
"event=0xd1,umask=0x08");
+EVENT_ATTR_STR(mem-load-l2-miss,       hsw_load_l2_miss,       
"event=0xd1,umask=0x10");
+EVENT_ATTR_STR(mem-load-l3-miss,       hsw_load_l3_miss,       
"event=0xd1,umask=0x20");
+EVENT_ATTR_STR(mem-load-hit-lfb,       hsw_load_hit_lfb,       
"event=0xd1,umask=0x40");
+EVENT_ATTR_STR(mem-snp-miss,           hsw_snp_miss,           
"event=0xd2,umask=0x01");
+EVENT_ATTR_STR(mem-snp-hit,            hsw_snp_hit,            
"event=0xd2,umask=0x02");
+EVENT_ATTR_STR(mem-snp-hitm,           hsw_snp_hitm,           
"event=0xd2,umask=0x04");
+EVENT_ATTR_STR(mem-snp-none,           hsw_snp_none,           
"event=0xd2,umask=0x08");
+EVENT_ATTR_STR(mem-local-dram,         hsw_local_dram,         
"event=0xd3,umask=0x01");
+
 /* Haswell special events */
 EVENT_ATTR_STR(tx-start,       tx_start,       "event=0xc9,umask=0x1");
 EVENT_ATTR_STR(tx-commit,      tx_commit,      "event=0xc9,umask=0x2");
@@ -3282,6 +3302,25 @@ static struct attribute *hsw_events_attrs[] = {
        EVENT_PTR(cycles_ct),
        EVENT_PTR(mem_ld_hsw),
        EVENT_PTR(mem_st_hsw),
+       EVENT_PTR(hsw_stlb_miss_loads),
+       EVENT_PTR(hsw_stlb_miss_stores),
+       EVENT_PTR(hsw_lock_loads),
+       EVENT_PTR(hsw_split_loads),
+       EVENT_PTR(hsw_split_stores),
+       EVENT_PTR(hsw_all_loads),
+       EVENT_PTR(hsw_all_stores),
+       EVENT_PTR(hsw_load_l1_hit),
+       EVENT_PTR(hsw_load_l2_hit),
+       EVENT_PTR(hsw_load_l3_hit),
+       EVENT_PTR(hsw_load_l1_miss),
+       EVENT_PTR(hsw_load_l2_miss),
+       EVENT_PTR(hsw_load_l3_miss),
+       EVENT_PTR(hsw_load_hit_lfb),
+       EVENT_PTR(hsw_snp_miss),
+       EVENT_PTR(hsw_snp_hit),
+       EVENT_PTR(hsw_snp_hitm),
+       EVENT_PTR(hsw_snp_none),
+       EVENT_PTR(hsw_local_dram),
        NULL
 };
 
-- 
2.4.3

Reply via email to