All of lore.kernel.org
 help / color / mirror / Atom feed
* [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.