Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754966AbcKOKqx (ORCPT ); Tue, 15 Nov 2016 05:46:53 -0500 Received: from terminus.zytor.com ([198.137.202.10]:51042 "EHLO terminus.zytor.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755060AbcKOKqi (ORCPT ); Tue, 15 Nov 2016 05:46:38 -0500 Date: Tue, 15 Nov 2016 02:46:02 -0800 From: tip-bot for Taeung Song Message-ID: Cc: hpa@zytor.com, tglx@linutronix.de, namhyung@kernel.org, wangnan0@huawei.com, treeze.taeung@gmail.com, mingo@kernel.org, over3025@gmail.com, aweee0@gmail.com, acme@redhat.com, linux-kernel@vger.kernel.org, peterz@infradead.org, jolsa@kernel.org Reply-To: peterz@infradead.org, jolsa@kernel.org, linux-kernel@vger.kernel.org, acme@redhat.com, aweee0@gmail.com, over3025@gmail.com, mingo@kernel.org, treeze.taeung@gmail.com, wangnan0@huawei.com, namhyung@kernel.org, tglx@linutronix.de, hpa@zytor.com In-Reply-To: <1478241862-31230-7-git-send-email-treeze.taeung@gmail.com> References: <1478241862-31230-7-git-send-email-treeze.taeung@gmail.com> To: linux-tip-commits@vger.kernel.org Subject: [tip:perf/core] perf config: Mark where are config items from (user or system) Git-Commit-ID: 08d090cfed8cc2ce5821ddb2b91118979e511019 X-Mailer: tip-git-log-daemon Robot-ID: Robot-Unsubscribe: Contact to get blacklisted from these emails MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8 Content-Disposition: inline Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 4341 Lines: 124 Commit-ID: 08d090cfed8cc2ce5821ddb2b91118979e511019 Gitweb: http://git.kernel.org/tip/08d090cfed8cc2ce5821ddb2b91118979e511019 Author: Taeung Song AuthorDate: Fri, 4 Nov 2016 15:44:22 +0900 Committer: Arnaldo Carvalho de Melo CommitDate: Mon, 14 Nov 2016 13:10:37 -0300 perf config: Mark where are config items from (user or system) To write config items to a particular config file, we should know where is each config section and item from. Current setting functionality of perf-config use autogenerating way by overwriting collected config items to a config file. For example, when collecting config items from user and system config files (i.e. ~/.perfconfig and $(sysconf)/perfconfig), perf_config_set can contain both user and system config items. So we should know where each value is from to avoid merging user and system config items on user config file. Signed-off-by: Taeung Song Cc: Jiri Olsa Cc: Nambong Ha Cc: Namhyung Kim Cc: Peter Zijlstra Cc: Wang Nan Cc: Wookje Kwon Link: http://lkml.kernel.org/r/1478241862-31230-7-git-send-email-treeze.taeung@gmail.com Signed-off-by: Arnaldo Carvalho de Melo --- tools/perf/builtin-config.c | 6 +++++- tools/perf/util/config.c | 16 +++++++++++++++- tools/perf/util/config.h | 4 +++- 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/tools/perf/builtin-config.c b/tools/perf/builtin-config.c index 7c861b5..8c0d93b 100644 --- a/tools/perf/builtin-config.c +++ b/tools/perf/builtin-config.c @@ -48,14 +48,18 @@ static int set_config(struct perf_config_set *set, const char *file_name, if (!fp) return -1; - perf_config_set__collect(set, var, value); + perf_config_set__collect(set, file_name, var, value); fprintf(fp, "%s\n", first_line); /* overwrite configvariables */ perf_config_items__for_each_entry(&set->sections, section) { + if (!use_system_config && section->from_system_config) + continue; fprintf(fp, "[%s]\n", section->name); perf_config_items__for_each_entry(§ion->items, item) { + if (!use_system_config && section->from_system_config) + continue; if (item->value) fprintf(fp, "\t%s = %s\n", item->name, item->value); diff --git a/tools/perf/util/config.c b/tools/perf/util/config.c index c8fb65d..3d906db 100644 --- a/tools/perf/util/config.c +++ b/tools/perf/util/config.c @@ -594,6 +594,19 @@ static int collect_config(const char *var, const char *value, goto out_free; } + /* perf_config_set can contain both user and system config items. + * So we should know where each value is from. + * The classification would be needed when a particular config file + * is overwrited by setting feature i.e. set_config(). + */ + if (strcmp(config_file_name, perf_etc_perfconfig()) == 0) { + section->from_system_config = true; + item->from_system_config = true; + } else { + section->from_system_config = false; + item->from_system_config = false; + } + ret = set_value(item, value); return ret; @@ -602,9 +615,10 @@ out_free: return -1; } -int perf_config_set__collect(struct perf_config_set *set, +int perf_config_set__collect(struct perf_config_set *set, const char *file_name, const char *var, const char *value) { + config_file_name = file_name; return collect_config(var, value, set); } diff --git a/tools/perf/util/config.h b/tools/perf/util/config.h index 0fcdb8c..1a59a6b 100644 --- a/tools/perf/util/config.h +++ b/tools/perf/util/config.h @@ -7,12 +7,14 @@ struct perf_config_item { char *name; char *value; + bool from_system_config; struct list_head node; }; struct perf_config_section { char *name; struct list_head items; + bool from_system_config; struct list_head node; }; @@ -33,7 +35,7 @@ const char *perf_etc_perfconfig(void); struct perf_config_set *perf_config_set__new(void); void perf_config_set__delete(struct perf_config_set *set); -int perf_config_set__collect(struct perf_config_set *set, +int perf_config_set__collect(struct perf_config_set *set, const char *file_name, const char *var, const char *value); void perf_config__init(void); void perf_config__exit(void);