* [PATCH] perf/x86/intel/pt: Export cpu frequency ratios needed by PT decoders
@ 2015-08-27 15:06 Alexander Shishkin
2015-08-28 19:33 ` Andi Kleen
0 siblings, 1 reply; 4+ messages in thread
From: Alexander Shishkin @ 2015-08-27 15:06 UTC (permalink / raw)
To: Peter Zijlstra
Cc: Ingo Molnar, linux-kernel, Arnaldo Carvalho de Melo,
Alexander Shishkin
In order for Intel PT decoders to infer correct crystal clock and bus
frequencies that are required to correctly decode timing information
from a PT stream (MTC and CBR packets), export them as sysfs attributes:
* max_nonturbo_ratio: ratio between the invariant TSC and base clock;
* tsc_art_ratio: TSC to core crystal clock ratio.
Signed-off-by: Alexander Shishkin <alexander.shishkin@linux.intel.com>
---
arch/x86/kernel/cpu/perf_event_intel_pt.c | 40 +++++++++++++++++++++++++++++++
1 file changed, 40 insertions(+)
diff --git a/arch/x86/kernel/cpu/perf_event_intel_pt.c b/arch/x86/kernel/cpu/perf_event_intel_pt.c
index c534261068..e76aa5a30c 100644
--- a/arch/x86/kernel/cpu/perf_event_intel_pt.c
+++ b/arch/x86/kernel/cpu/perf_event_intel_pt.c
@@ -126,9 +126,49 @@ static struct attribute_group pt_format_group = {
.attrs = pt_formats_attr,
};
+static ssize_t
+pt_timing_attr_show(struct device *dev, struct device_attribute *attr,
+ char *page)
+{
+ struct perf_pmu_events_attr *pmu_attr =
+ container_of(attr, struct perf_pmu_events_attr, attr);
+ u32 eax, ebx, ecx, edx;
+ unsigned long val;
+
+ switch (pmu_attr->id) {
+ case 0:
+ rdmsrl(MSR_PLATFORM_INFO, val);
+ val = (val & 0xff00) >> 8;
+ return sprintf(page, "%lu\n", val);
+ case 1:
+ cpuid(0x15, &eax, &ebx, &ecx, &edx);
+ return sprintf(page, "%u:%u\n", ebx, eax);
+ default:
+ break;
+ }
+
+ return -EINVAL;
+}
+
+PMU_EVENT_ATTR(max_nonturbo_ratio, timing_attr_max_nonturbo_ratio, 0,
+ pt_timing_attr_show);
+PMU_EVENT_ATTR(tsc_art_ratio, timing_attr_tsc_art_ratio, 1,
+ pt_timing_attr_show);
+
+static struct attribute *pt_timing_attr[] = {
+ &timing_attr_max_nonturbo_ratio.attr.attr,
+ &timing_attr_tsc_art_ratio.attr.attr,
+ NULL,
+};
+
+static struct attribute_group pt_timing_group = {
+ .attrs = pt_timing_attr,
+};
+
static const struct attribute_group *pt_attr_groups[] = {
&pt_cap_group,
&pt_format_group,
+ &pt_timing_group,
NULL,
};
--
2.5.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH] perf/x86/intel/pt: Export cpu frequency ratios needed by PT decoders
2015-08-27 15:06 [PATCH] perf/x86/intel/pt: Export cpu frequency ratios needed by PT decoders Alexander Shishkin
@ 2015-08-28 19:33 ` Andi Kleen
2015-08-31 12:59 ` Alexander Shishkin
0 siblings, 1 reply; 4+ messages in thread
From: Andi Kleen @ 2015-08-28 19:33 UTC (permalink / raw)
To: Alexander Shishkin
Cc: Peter Zijlstra, Ingo Molnar, linux-kernel,
Arnaldo Carvalho de Melo
Alexander Shishkin <alexander.shishkin@linux.intel.com> writes:
> + return sprintf(page, "%lu\n", val);
> + case 1:
> + cpuid(0x15, &eax, &ebx, &ecx, &edx);
Surely this needs to be protected by a cpuid level check?
Broadwell for once doesn't have CPUID 0x15.
-Andi
--
ak@linux.intel.com -- Speaking for myself only
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] perf/x86/intel/pt: Export cpu frequency ratios needed by PT decoders
2015-08-28 19:33 ` Andi Kleen
@ 2015-08-31 12:59 ` Alexander Shishkin
2015-08-31 20:04 ` Andi Kleen
0 siblings, 1 reply; 4+ messages in thread
From: Alexander Shishkin @ 2015-08-31 12:59 UTC (permalink / raw)
To: Andi Kleen
Cc: Peter Zijlstra, Ingo Molnar, linux-kernel,
Arnaldo Carvalho de Melo
Andi Kleen <andi@firstfloor.org> writes:
> Alexander Shishkin <alexander.shishkin@linux.intel.com> writes:
>> + return sprintf(page, "%lu\n", val);
>> + case 1:
>> + cpuid(0x15, &eax, &ebx, &ecx, &edx);
>
> Surely this needs to be protected by a cpuid level check?
> Broadwell for once doesn't have CPUID 0x15.
I couldn't find where this is explicitly said in the SDM. However, the
leaf description says that CPUID.0x15.EBX[31:0]==0 means that the ratio
is not enumerated. I don't see how to better communicate this to
userspace though than to simply have 0 there.
Regards,
--
Alex
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] perf/x86/intel/pt: Export cpu frequency ratios needed by PT decoders
2015-08-31 12:59 ` Alexander Shishkin
@ 2015-08-31 20:04 ` Andi Kleen
0 siblings, 0 replies; 4+ messages in thread
From: Andi Kleen @ 2015-08-31 20:04 UTC (permalink / raw)
To: Alexander Shishkin
Cc: Andi Kleen, Peter Zijlstra, Ingo Molnar, linux-kernel,
Arnaldo Carvalho de Melo
On Mon, Aug 31, 2015 at 03:59:08PM +0300, Alexander Shishkin wrote:
> Andi Kleen <andi@firstfloor.org> writes:
>
> > Alexander Shishkin <alexander.shishkin@linux.intel.com> writes:
> >> + return sprintf(page, "%lu\n", val);
> >> + case 1:
> >> + cpuid(0x15, &eax, &ebx, &ecx, &edx);
> >
> > Surely this needs to be protected by a cpuid level check?
> > Broadwell for once doesn't have CPUID 0x15.
>
> I couldn't find where this is explicitly said in the SDM. However, the
> leaf description says that CPUID.0x15.EBX[31:0]==0 means that the ratio
> is not enumerated. I don't see how to better communicate this to
> userspace though than to simply have 0 there.
What I meant is -- the kernel may crash on a older CPU that does
not support CPUID 0x15. For example Broadwell doesn't have it.
For CPUID you always need to check the level.
-Andi
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2015-08-31 20:04 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-08-27 15:06 [PATCH] perf/x86/intel/pt: Export cpu frequency ratios needed by PT decoders Alexander Shishkin
2015-08-28 19:33 ` Andi Kleen
2015-08-31 12:59 ` Alexander Shishkin
2015-08-31 20:04 ` Andi Kleen
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.