All of lore.kernel.org
 help / color / mirror / Atom feed
From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Ingo Molnar <mingo@kernel.org>
Cc: linux-kernel@vger.kernel.org,
	Taeung Song <treeze.taeung@gmail.com>,
	Jiri Olsa <jolsa@kernel.org>,
	Masami Hiramatsu <mhiramat@kernel.org>,
	Namhyung Kim <namhyung@kernel.org>,
	Peter Zijlstra <peterz@infradead.org>,
	Arnaldo Carvalho de Melo <acme@redhat.com>
Subject: [PATCH 11/11] perf config: Make show_config() use perf_config_set
Date: Thu, 14 Apr 2016 09:32:27 -0300	[thread overview]
Message-ID: <1460637147-10555-12-git-send-email-acme@kernel.org> (raw)
In-Reply-To: <1460637147-10555-1-git-send-email-acme@kernel.org>

From: Taeung Song <treeze.taeung@gmail.com>

Currently show_config() has a problem when user and system config files
have the same config variables i.e.:

  # cat ~/.perfconfig
  [top]
          children = false

When $(sysconfdir) is /usr/local/etc

  # cat /usr/local/etc/perfconfig
  [top]
          children = true

Before:

  # perf config --user --list
  top.children=false

  # perf config --system --list
  top.children=true

  # perf config --list
  top.children=true
   top.children=false

Because perf_config() can call show_config() each the config file (user
and system).  Fix it.

After:

  # perf config --user --list
  top.children=false

  # perf config --system --list
  top.children=true

  # perf config --list
  top.children=false

Signed-off-by: Taeung Song <treeze.taeung@gmail.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Masami Hiramatsu <mhiramat@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/r/1460620401-23430-3-git-send-email-treeze.taeung@gmail.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/builtin-config.c | 39 ++++++++++++++++++++++++++++++++-------
 1 file changed, 32 insertions(+), 7 deletions(-)

diff --git a/tools/perf/builtin-config.c b/tools/perf/builtin-config.c
index c42448ed5dfe..fe1b77fa21f9 100644
--- a/tools/perf/builtin-config.c
+++ b/tools/perf/builtin-config.c
@@ -12,6 +12,7 @@
 #include <subcmd/parse-options.h>
 #include "util/util.h"
 #include "util/debug.h"
+#include "util/config.h"
 
 static bool use_system_config, use_user_config;
 
@@ -32,13 +33,28 @@ static struct option config_options[] = {
 	OPT_END()
 };
 
-static int show_config(const char *key, const char *value,
-		       void *cb __maybe_unused)
+static int show_config(struct perf_config_set *set)
 {
-	if (value)
-		printf("%s=%s\n", key, value);
-	else
-		printf("%s\n", key);
+	struct perf_config_section *section;
+	struct perf_config_item *item;
+	struct list_head *sections;
+
+	if (set == NULL)
+		return -1;
+
+	sections = &set->sections;
+	if (list_empty(sections))
+		return -1;
+
+	list_for_each_entry(section, sections, node) {
+		list_for_each_entry(item, &section->items, node) {
+			char *value = item->value;
+
+			if (value)
+				printf("%s.%s=%s\n", section->name,
+				       item->name, value);
+		}
+	}
 
 	return 0;
 }
@@ -46,6 +62,7 @@ static int show_config(const char *key, const char *value,
 int cmd_config(int argc, const char **argv, const char *prefix __maybe_unused)
 {
 	int ret = 0;
+	struct perf_config_set *set;
 	char *user_config = mkpath("%s/.perfconfig", getenv("HOME"));
 
 	argc = parse_options(argc, argv, config_options, config_usage,
@@ -63,13 +80,19 @@ int cmd_config(int argc, const char **argv, const char *prefix __maybe_unused)
 	else if (use_user_config)
 		config_exclusive_filename = user_config;
 
+	set = perf_config_set__new();
+	if (!set) {
+		ret = -1;
+		goto out_err;
+	}
+
 	switch (actions) {
 	case ACTION_LIST:
 		if (argc) {
 			pr_err("Error: takes no arguments\n");
 			parse_options_usage(config_usage, config_options, "l", 1);
 		} else {
-			ret = perf_config(show_config, NULL);
+			ret = show_config(set);
 			if (ret < 0) {
 				const char * config_filename = config_exclusive_filename;
 				if (!config_exclusive_filename)
@@ -83,5 +106,7 @@ int cmd_config(int argc, const char **argv, const char *prefix __maybe_unused)
 		usage_with_options(config_usage, config_options);
 	}
 
+	perf_config_set__delete(set);
+out_err:
 	return ret;
 }
-- 
2.5.5

  parent reply	other threads:[~2016-04-14 12:33 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-04-14 12:32 [GIT PULL 00/11] perf/core improvements and fixes Arnaldo Carvalho de Melo
2016-04-14 12:32 ` [PATCH 01/11] perf trace: Add seccomp beautifier related defines for older systems Arnaldo Carvalho de Melo
2016-04-14 12:32 ` [PATCH 02/11] perf trace: Add getrandom " Arnaldo Carvalho de Melo
2016-04-14 12:32 ` [PATCH 03/11] perf trace: Move mmap beautifiers to trace/beauty/ directory Arnaldo Carvalho de Melo
2016-04-14 12:32 ` [PATCH 04/11] perf trace: Move eventfd " Arnaldo Carvalho de Melo
2016-04-14 12:32 ` [PATCH 05/11] perf ordered_events: Introduce reinit() Arnaldo Carvalho de Melo
2016-04-14 12:32 ` [PATCH 06/11] perf session: Make ordered_events reusable Arnaldo Carvalho de Melo
2016-04-14 12:32 ` [PATCH 07/11] perf data: Add perf_data_file__switch() helper Arnaldo Carvalho de Melo
2016-04-14 12:32 ` [PATCH 08/11] perf record: Turns auxtrace_snapshot_enable into 3 states Arnaldo Carvalho de Melo
2016-04-14 12:32 ` [PATCH 09/11] perf record: Add '--timestamp-filename' option to append timestamp to output file name Arnaldo Carvalho de Melo
2016-04-14 12:32 ` [PATCH 10/11] perf config: Introduce perf_config_set class Arnaldo Carvalho de Melo
2016-04-14 12:32 ` Arnaldo Carvalho de Melo [this message]
2016-04-14 13:32 ` [GIT PULL 00/11] perf/core improvements and fixes Ingo Molnar

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=1460637147-10555-12-git-send-email-acme@kernel.org \
    --to=acme@kernel.org \
    --cc=acme@redhat.com \
    --cc=jolsa@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mhiramat@kernel.org \
    --cc=mingo@kernel.org \
    --cc=namhyung@kernel.org \
    --cc=peterz@infradead.org \
    --cc=treeze.taeung@gmail.com \
    /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.