@@ -6,6 +6,7 @@ enum perf_msr_id {
6
6
PERF_MSR_MPERF = 2 ,
7
7
PERF_MSR_PPERF = 3 ,
8
8
PERF_MSR_SMI = 4 ,
9
+ PERF_MSR_PTSC = 5 ,
9
10
10
11
PERF_MSR_EVENT_MAX ,
11
12
};
@@ -15,6 +16,11 @@ static bool test_aperfmperf(int idx)
15
16
return boot_cpu_has (X86_FEATURE_APERFMPERF );
16
17
}
17
18
19
+ static bool test_ptsc (int idx )
20
+ {
21
+ return boot_cpu_has (X86_FEATURE_PTSC );
22
+ }
23
+
18
24
static bool test_intel (int idx )
19
25
{
20
26
if (boot_cpu_data .x86_vendor != X86_VENDOR_INTEL ||
@@ -74,13 +80,15 @@ PMU_EVENT_ATTR_STRING(aperf, evattr_aperf, "event=0x01");
74
80
PMU_EVENT_ATTR_STRING (mperf , evattr_mperf , "event=0x02" );
75
81
PMU_EVENT_ATTR_STRING (pperf , evattr_pperf , "event=0x03" );
76
82
PMU_EVENT_ATTR_STRING (smi , evattr_smi , "event=0x04" );
83
+ PMU_EVENT_ATTR_STRING (ptsc , evattr_ptsc , "event=0x05" );
77
84
78
85
static struct perf_msr msr [] = {
79
86
[PERF_MSR_TSC ] = { 0 , & evattr_tsc , NULL , },
80
87
[PERF_MSR_APERF ] = { MSR_IA32_APERF , & evattr_aperf , test_aperfmperf , },
81
88
[PERF_MSR_MPERF ] = { MSR_IA32_MPERF , & evattr_mperf , test_aperfmperf , },
82
89
[PERF_MSR_PPERF ] = { MSR_PPERF , & evattr_pperf , test_intel , },
83
90
[PERF_MSR_SMI ] = { MSR_SMI_COUNT , & evattr_smi , test_intel , },
91
+ [PERF_MSR_PTSC ] = { MSR_F15H_PTSC , & evattr_ptsc , test_ptsc , },
84
92
};
85
93
86
94
static struct attribute * events_attrs [PERF_MSR_EVENT_MAX + 1 ] = {
0 commit comments