All of lore.kernel.org
 help / color / mirror / Atom feed
From: Peter Zijlstra <a.p.zijlstra@chello.nl>
To: Jiri Olsa <jolsa@redhat.com>
Cc: acme@redhat.com, mingo@elte.hu, paulus@samba.org,
	cjashfor@linux.vnet.ibm.com, linux-kernel@vger.kernel.org
Subject: Re: [PATCHv4 0/9] perf tool: parser generator for events parsing
Date: Tue, 14 Feb 2012 17:28:44 +0100	[thread overview]
Message-ID: <1329236924.2293.13.camel@twins> (raw)
In-Reply-To: <1327674868-10486-1-git-send-email-jolsa@redhat.com>

On Fri, 2012-01-27 at 15:34 +0100, Jiri Olsa wrote:
> hi,
> Here's new version of event parsing patchset. To summarize:
>  - adding event parser bison/flex generator
>  - the event syntax stays as it was
>  - adding event format sysfs group attribute
>    for pmu device
>  - adding new syntax to specify raw events based
>    on the sysfs pmu's format attribute
>    eg. "cpu/config=1,config1=2,config2=3/u"
> 
> There are helping patches 1-4, which I did not want to
> mangle with the actual change. Patches 5-9 implement
> the feature itself.
> 
> v4 changes:
>  - 5/9 changed sysfs pmu format definitions to the group attribute,
>        each line (in previous patch) is now represented by single
>        sysfs attribute under format group
>  - 6/9 fix raw events so the number is always considered to be hex number
>  - 8/9 move config[12] definitions to be processed by the parser


I added the below but all I managed was to crash my kernel, its probably
a simple thing, but sysfs didn't give a hint.

---
Subject: perf, x86: Add simple format descriptions
From: Peter Zijlstra <a.p.zijlstra@chello.nl>
Date: Tue Feb 14 16:37:27 CET 2012


Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
---
 arch/x86/kernel/cpu/perf_event.c       |    7 ++++++
 arch/x86/kernel/cpu/perf_event.h       |    1 
 arch/x86/kernel/cpu/perf_event_amd.c   |   18 +++++++++++++++++
 arch/x86/kernel/cpu/perf_event_intel.c |   34 +++++++++++++++++++++++++++++++++
 arch/x86/kernel/cpu/perf_event_p6.c    |   18 +++++++++++++++++
 include/linux/perf_event.h             |    6 -----
 kernel/events/core.c                   |   22 ---------------------
 7 files changed, 78 insertions(+), 28 deletions(-)
--- a/arch/x86/kernel/cpu/perf_event.c
+++ b/arch/x86/kernel/cpu/perf_event.c
@@ -1250,6 +1250,11 @@ static void __init pmu_check_apic(void)
 	pr_info("no hardware sampling interrupt available.\n");
 }
 
+static struct attribute_group x86_pmu_format_group = {
+	.name = "format",
+	.attrs = NULL,
+};
+
 static int __init init_hw_perf_events(void)
 {
 	struct x86_pmu_quirk *quirk;
@@ -1324,6 +1329,7 @@ static int __init init_hw_perf_events(vo
 	}
 
 	x86_pmu.attr_rdpmc = 1; /* enable userspace RDPMC usage by default */
+	x86_pmu_format_group.attrs = x86_pmu.format_attrs;
 
 	pr_info("... version:                %d\n",     x86_pmu.version);
 	pr_info("... bit width:              %d\n",     x86_pmu.cntval_bits);
@@ -1604,6 +1610,7 @@ static struct attribute_group x86_pmu_at
 
 static const struct attribute_group *x86_pmu_attr_groups[] = {
 	&x86_pmu_attr_group,
+	&x86_pmu_format_group,
 	NULL,
 };
 
--- a/arch/x86/kernel/cpu/perf_event.h
+++ b/arch/x86/kernel/cpu/perf_event.h
@@ -311,6 +311,7 @@ struct x86_pmu {
 	 * sysfs attrs
 	 */
 	int		attr_rdpmc;
+	struct attribute **format_attrs;
 
 	/*
 	 * CPU Hotplug hooks
--- a/arch/x86/kernel/cpu/perf_event_amd.c
+++ b/arch/x86/kernel/cpu/perf_event_amd.c
@@ -398,6 +398,20 @@ static void amd_pmu_cpu_dead(int cpu)
 	}
 }
 
+PMU_FORMAT_ATTR(event,	"config:0-7,32-35");
+PMU_FORMAT_ATTR(umask,	"config:8-15"	);
+PMU_FORMAT_ATTR(edge,	"config:18"	);
+PMU_FORMAT_ATTR(inv,	"config:23"	);
+PMU_FORMAT_ATTR(cmask,	"config:24-31"	);
+
+static struct attribute *amd_format_attr[] = {
+	&format_attr_event.attr,
+	&format_attr_umask.attr,
+	&format_attr_edge.attr,
+	&format_attr_inv.attr,
+	&format_attr_cmask.attr,
+};
+
 static __initconst const struct x86_pmu amd_pmu = {
 	.name			= "AMD",
 	.handle_irq		= x86_pmu_handle_irq,
@@ -420,6 +434,8 @@ static __initconst const struct x86_pmu 
 	.get_event_constraints	= amd_get_event_constraints,
 	.put_event_constraints	= amd_put_event_constraints,
 
+	.format_attrs		= amd_format_attr,
+
 	.cpu_prepare		= amd_pmu_cpu_prepare,
 	.cpu_starting		= amd_pmu_cpu_starting,
 	.cpu_dead		= amd_pmu_cpu_dead,
@@ -590,6 +606,8 @@ static __initconst const struct x86_pmu 
 	.cpu_starting		= amd_pmu_cpu_starting,
 	.cpu_dead		= amd_pmu_cpu_dead,
 #endif
+
+	.format_attrs		= amd_format_attr,
 };
 
 __init int amd_pmu_init(void)
--- a/arch/x86/kernel/cpu/perf_event_intel.c
+++ b/arch/x86/kernel/cpu/perf_event_intel.c
@@ -1382,6 +1382,23 @@ static void core_pmu_enable_all(int adde
 	}
 }
 
+PMU_FORMAT_ATTR(event,	"config:0-7"	);
+PMU_FORMAT_ATTR(umask,	"config:8-15"	);
+PMU_FORMAT_ATTR(edge,	"config:18"	);
+PMU_FORMAT_ATTR(pc,	"config:19"	);
+PMU_FORMAT_ATTR(any,	"config:21"	); /* v3 + */
+PMU_FORMAT_ATTR(inv,	"config:23"	);
+PMU_FORMAT_ATTR(cmask,	"config:24-31"	);
+
+static struct attribute *intel_arch_formats_attr[] = {
+	&format_attr_event.attr,
+	&format_attr_umask.attr,
+	&format_attr_edge.attr,
+	&format_attr_pc.attr,
+	&format_attr_inv.attr,
+	&format_attr_cmask.attr,
+};
+
 static __initconst const struct x86_pmu core_pmu = {
 	.name			= "core",
 	.handle_irq		= x86_pmu_handle_irq,
@@ -1406,6 +1423,7 @@ static __initconst const struct x86_pmu 
 	.put_event_constraints	= intel_put_event_constraints,
 	.event_constraints	= intel_core_event_constraints,
 	.guest_get_msrs		= core_guest_get_msrs,
+	.format_attrs		= intel_arch_formats_attr,
 };
 
 struct intel_shared_regs *allocate_shared_regs(int cpu)
@@ -1486,6 +1504,20 @@ static void intel_pmu_cpu_dying(int cpu)
 	fini_debug_store_on_cpu(cpu);
 }
 
+PMU_FORMAT_ATTR(offcore_rsp, "config1:0-63");
+
+static struct attribute *intel_arch3_formats_attr[] = {
+	&format_attr_event.attr,
+	&format_attr_umask.attr,
+	&format_attr_edge.attr,
+	&format_attr_pc.attr,
+	&format_attr_any.attr,
+	&format_attr_inv.attr,
+	&format_attr_cmask.attr,
+
+	&format_attr_offcore_rsp.attr, /* XXX do NHM/WSM + SNB breakout */
+};
+
 static __initconst const struct x86_pmu intel_pmu = {
 	.name			= "Intel",
 	.handle_irq		= intel_pmu_handle_irq,
@@ -1509,6 +1541,8 @@ static __initconst const struct x86_pmu 
 	.get_event_constraints	= intel_get_event_constraints,
 	.put_event_constraints	= intel_put_event_constraints,
 
+	.format_attrs		= intel_arch3_formats_attr,
+
 	.cpu_prepare		= intel_pmu_cpu_prepare,
 	.cpu_starting		= intel_pmu_cpu_starting,
 	.cpu_dying		= intel_pmu_cpu_dying,
--- a/arch/x86/kernel/cpu/perf_event_p6.c
+++ b/arch/x86/kernel/cpu/perf_event_p6.c
@@ -87,6 +87,22 @@ static void p6_pmu_enable_event(struct p
 	(void)checking_wrmsrl(hwc->config_base, val);
 }
 
+PMU_FORMAT_ATTR(event,	"config:0-7"	);
+PMU_FORMAT_ATTR(umask,	"config:8-15"	);
+PMU_FORMAT_ATTR(edge,	"config:18"	);
+PMU_FORMAT_ATTR(pc,	"config:19"	);
+PMU_FORMAT_ATTR(inv,	"config:23"	);
+PMU_FORMAT_ATTR(cmask,	"config:24-31"	);
+
+static struct attribute *intel_p6_formats_attr[] = {
+	&format_attr_event.attr,
+	&format_attr_umask.attr,
+	&format_attr_edge.attr,
+	&format_attr_pc.attr,
+	&format_attr_inv.attr,
+	&format_attr_cmask.attr,
+};
+
 static __initconst const struct x86_pmu p6_pmu = {
 	.name			= "p6",
 	.handle_irq		= x86_pmu_handle_irq,
@@ -115,6 +131,8 @@ static __initconst const struct x86_pmu 
 	.cntval_mask		= (1ULL << 32) - 1,
 	.get_event_constraints	= x86_get_event_constraints,
 	.event_constraints	= p6_event_constraints,
+
+	.format_attrs		= intel_p6_formats_attr,
 };
 
 __init int p6_pmu_init(void)
--- a/include/linux/perf_event.h
+++ b/include/linux/perf_event.h
@@ -628,12 +628,6 @@ struct pmu {
 	int				task_ctx_nr;
 
 	/*
-	 * True if the pmu defines its own set of format attributes within
-	 * attr_groups. If false, default format attributes are used.
-	 */
-	bool				format_defined;
-
-	/*
 	 * Fully disable/enable this PMU, can be used to protect from the PMI
 	 * as well as for lazy/batch writing of the MSRs.
 	 */
--- a/kernel/events/core.c
+++ b/kernel/events/core.c
@@ -5540,22 +5540,6 @@ static struct bus_type pmu_bus = {
 	.dev_attrs	= pmu_dev_attrs,
 };
 
-/* Default format attributes. */
-PMU_FORMAT_ATTR(config,  "config:0-63");
-PMU_FORMAT_ATTR(config1, "config1:0-63");
-PMU_FORMAT_ATTR(config2, "config2:0-63");
-
-static struct attribute *format_attrs[] = {
-	&format_attr_config.attr,
-	&format_attr_config1.attr,
-	&format_attr_config2.attr,
-};
-
-static struct attribute_group format_attr_group = {
-	.name   = "format",
-	.attrs  = format_attrs,
-};
-
 static void pmu_dev_release(struct device *dev)
 {
 	kfree(dev);
@@ -5582,12 +5566,6 @@ static int pmu_dev_alloc(struct pmu *pmu
 	if (ret)
 		goto free_dev;
 
-	if (!pmu->format_defined) {
-		ret = sysfs_create_group(&pmu->dev->kobj, &format_attr_group);
-		if (ret)
-			goto free_dev;
-	}
-
 out:
 	return ret;
 


  parent reply	other threads:[~2012-02-14 16:29 UTC|newest]

Thread overview: 91+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-12-15 15:30 [RFC 0/3] perf tool: Add new event group management Jiri Olsa
2011-12-15 15:30 ` [PATCH 1/3] perf, tool: Add parser generator for events parsing Jiri Olsa
2011-12-16 14:02   ` Peter Zijlstra
2011-12-16 14:03     ` Peter Zijlstra
2011-12-20 10:31       ` Jiri Olsa
2011-12-20 10:47         ` Peter Zijlstra
2011-12-20 11:30           ` Peter Zijlstra
2011-12-20 11:39             ` Peter Zijlstra
2011-12-21 16:16               ` new syntax for perf event Jiri Olsa
2012-01-05  9:17                 ` Jiri Olsa
2012-01-05 14:10                 ` Peter Zijlstra
2012-01-09 15:28                   ` Jiri Olsa
2012-01-09 15:43                     ` Peter Zijlstra
2012-01-16 12:31                     ` [RFCv3 0/9] perf tool: parser generator for events parsing Jiri Olsa
2012-01-16 12:31                       ` [PATCH 1/9] perf, tool: Make perf_evlist__splice_list_tail global Jiri Olsa
2012-01-16 12:31                       ` [PATCH 2/9] perf, tool: Remove unused functions from debugfs object Jiri Olsa
2012-01-16 12:31                       ` [PATCH 3/9] perf, tool: Add sysfs mountpoint interface Jiri Olsa
2012-01-16 12:31                       ` [PATCH 4/9] perf, tool: Add bitmap_or function into bitmap object Jiri Olsa
2012-01-16 12:31                       ` [PATCH 5/9] perf: Add sysfs format attribute for pmu device Jiri Olsa
2012-01-23 15:13                         ` Eric W. Biederman
2012-01-23 15:33                           ` Jiri Olsa
2012-01-24 15:22                             ` Peter Zijlstra
2012-01-24 19:40                               ` Eric W. Biederman
2012-01-25  8:54                                 ` Jiri Olsa
2012-01-26 16:26                         ` Peter Zijlstra
2012-01-27 12:32                           ` Jiri Olsa
2012-01-16 12:31                       ` [PATCH 6/9] perf, tool: Add parser generator for events parsing Jiri Olsa
2012-01-24 16:02                         ` Peter Zijlstra
2012-01-25  8:42                           ` Jiri Olsa
2012-01-16 12:31                       ` [PATCH 7/9] perf, tool: Add config options support for event parsing Jiri Olsa
2012-01-16 12:31                       ` [PATCH 8/9] perf, tool: Add perf pmu object to access pmu format definition Jiri Olsa
2012-01-16 12:31                       ` [PATCH 9/9] perf, tool: Add support to specify pmu style event Jiri Olsa
2012-01-24 15:22                       ` [RFCv3 0/9] perf tool: parser generator for events parsing Peter Zijlstra
2012-01-24 16:26                       ` Peter Zijlstra
2012-01-25  0:53                         ` Greg KH
2012-01-25 10:49                           ` Peter Zijlstra
2012-01-25 14:37                             ` Jiri Olsa
2012-01-26 16:23                               ` Peter Zijlstra
2012-01-26 16:27                                 ` Greg KH
2012-01-25 17:01                             ` Greg KH
2012-01-27 14:34                       ` [PATCHv4 " Jiri Olsa
2012-01-27 14:34                         ` [PATCH 1/9] perf, tool: Make perf_evlist__splice_list_tail global Jiri Olsa
2012-02-07 19:31                           ` [tip:perf/core] perf evlist: Make splice_list_tail method public tip-bot for Jiri Olsa
2012-01-27 14:34                         ` [PATCH 2/9] perf, tool: Remove unused functions from debugfs object Jiri Olsa
2012-02-17  9:51                           ` [tip:perf/core] perf tools: " tip-bot for Jiri Olsa
2012-01-27 14:34                         ` [PATCH 3/9] perf, tool: Add sysfs mountpoint interface Jiri Olsa
2012-02-17  9:52                           ` [tip:perf/core] perf tools: " tip-bot for Jiri Olsa
2012-01-27 14:34                         ` [PATCH 4/9] perf, tool: Add bitmap_or function into bitmap object Jiri Olsa
2012-02-17  9:53                           ` [tip:perf/core] perf tools: " tip-bot for Jiri Olsa
2012-01-27 14:34                         ` [PATCH 5/9] perf: Adding sysfs group format attribute for pmu device Jiri Olsa
2012-01-27 21:08                           ` Corey Ashford
2012-01-27 21:19                             ` Peter Zijlstra
2012-02-01  0:47                               ` Corey Ashford
2012-01-30  9:52                             ` Jiri Olsa
2012-02-01  1:25                               ` Corey Ashford
2012-02-01 13:13                                 ` Jiri Olsa
2012-02-01 14:18                                   ` Peter Zijlstra
2012-02-01 14:31                                     ` Jiri Olsa
2012-02-01 14:40                                       ` Peter Zijlstra
2012-02-01 13:36                                 ` Peter Zijlstra
2012-02-02  0:33                                   ` Corey Ashford
2012-01-27 14:34                         ` [PATCH 6/9] perf, tool: Add parser generator for events parsing Jiri Olsa
2012-01-27 14:34                         ` [PATCH 7/9] perf, tool: Add config options support for event parsing Jiri Olsa
2012-01-27 14:34                         ` [PATCH 8/9] perf, tool: Add perf pmu object to access pmu format definition Jiri Olsa
2012-01-27 14:34                         ` [PATCH 9/9] perf, tool: Add support to specify pmu style event Jiri Olsa
2012-02-13 13:13                         ` [PATCHv4 0/9] perf tool: parser generator for events parsing Jiri Olsa
2012-02-14 16:28                         ` Peter Zijlstra [this message]
2012-02-14 16:43                           ` Peter Zijlstra
2012-02-14 20:20                             ` Peter Zijlstra
2012-02-14 20:57                               ` Peter Zijlstra
2012-02-14 21:03                                 ` Peter Zijlstra
2012-02-15  9:24                                   ` Jiri Olsa
2012-02-15 11:18                                     ` Peter Zijlstra
2012-02-15 13:32                                       ` Jiri Olsa
2012-02-15 13:39                                         ` Peter Zijlstra
2012-02-15  9:04                                 ` Jiri Olsa
2012-02-15 11:03                                   ` Peter Zijlstra
2011-12-22 19:32             ` [PATCH 1/3] perf, tool: Add " Vince Weaver
2011-12-19 14:37     ` Jiri Olsa
2011-12-20 10:29     ` [PATCHv2 0/2] perf tool: " Jiri Olsa
2011-12-20 10:29       ` [PATCHv2 1/2] perf, tool: Add " Jiri Olsa
2011-12-20 10:29       ` [PATCHv2 2/2] perf, tool: Add more automated tests for event parsing Jiri Olsa
2011-12-20 17:37   ` [PATCH 1/3] perf, tool: Add parser generator for events parsing Arnaldo Carvalho de Melo
2011-12-21  9:55     ` Jiri Olsa
2011-12-15 15:30 ` [PATCH 2/3] perf, tool: Add new event group management Jiri Olsa
2011-12-20 17:47   ` Arnaldo Carvalho de Melo
2011-12-20 21:20     ` Peter Zijlstra
2011-12-21 11:54       ` Arnaldo Carvalho de Melo
2011-12-15 15:30 ` [PATCH 3/3] perf, tool: Add more automated tests for event parsing Jiri Olsa
2011-12-20 17:38   ` Arnaldo Carvalho de Melo
2011-12-21  8:47   ` [tip:perf/core] perf test: " tip-bot for Jiri Olsa

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1329236924.2293.13.camel@twins \
    --to=a.p.zijlstra@chello.nl \
    --cc=acme@redhat.com \
    --cc=cjashfor@linux.vnet.ibm.com \
    --cc=jolsa@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=paulus@samba.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.