Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754796AbcKNQV3 (ORCPT ); Mon, 14 Nov 2016 11:21:29 -0500 Received: from mail-pg0-f67.google.com ([74.125.83.67]:34539 "EHLO mail-pg0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752149AbcKNQV1 (ORCPT ); Mon, 14 Nov 2016 11:21:27 -0500 X-Greylist: delayed 28758 seconds by postgrey-1.27 at vger.kernel.org; Mon, 14 Nov 2016 11:21:27 EST Subject: Re: [PATCH 1/6] perf config: Add support for getting config key-value pairs To: Arnaldo Carvalho de Melo References: <1478241862-31230-1-git-send-email-treeze.taeung@gmail.com> <1478241862-31230-2-git-send-email-treeze.taeung@gmail.com> <20161114155050.GB26543@kernel.org> Cc: linux-kernel@vger.kernel.org, Jiri Olsa , Namhyung Kim , Ingo Molnar , Peter Zijlstra , Wang Nan , Nambong Ha , Wookje Kwon From: Taeung Song Message-ID: Date: Tue, 15 Nov 2016 01:21:22 +0900 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.2.0 MIME-Version: 1.0 In-Reply-To: <20161114155050.GB26543@kernel.org> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3680 Lines: 129 Hi, Arnaldo Thank you for your reply :) I was worried lest you don't it.. On 11/15/2016 12:50 AM, Arnaldo Carvalho de Melo wrote: > Em Fri, Nov 04, 2016 at 03:44:17PM +0900, Taeung Song escreveu: >> Add a functionality getting specific config key-value pairs. >> For the syntax examples, >> >> perf config [] [section.name ...] >> >> e.g. To query config items 'report.queue-size' and 'report.children', do >> >> # perf config report.queue-size report.children > > So, I'm applying it, but while testing I noticed that it shows only the > options that were explicitely set: > > [acme@jouet linux]$ perf config report.queue-size report.children > report.children=false > [acme@jouet linux]$ > > Perhaps we should, in a follow up patch, show this instead: > > [acme@jouet linux]$ perf config report.queue-size report.children > report.children=false > # report.queue-size=18446744073709551615 # Default, not set in ~/.perfconfig > [acme@jouet linux]$ > > ? Yes, I agree it. I also think we should get not only config info in config files but also inbuilt default config info. After this patchset (support config read/wirte) is applied, I'll send a follow up patch that contains default config array to show inbuilt default config info as you said!! Is it OK ? Thanks, Taeung > >> Cc: Namhyung Kim >> Cc: Jiri Olsa >> Cc: Wang Nan >> Signed-off-by: Taeung Song >> --- >> tools/perf/builtin-config.c | 40 +++++++++++++++++++++++++++++++++++++--- >> 1 file changed, 37 insertions(+), 3 deletions(-) >> >> diff --git a/tools/perf/builtin-config.c b/tools/perf/builtin-config.c >> index e4207a2..df3fa1c 100644 >> --- a/tools/perf/builtin-config.c >> +++ b/tools/perf/builtin-config.c >> @@ -17,7 +17,7 @@ >> static bool use_system_config, use_user_config; >> >> static const char * const config_usage[] = { >> - "perf config [] [options]", >> + "perf config [] [options] [section.name ...]", >> NULL >> }; >> >> @@ -33,6 +33,36 @@ static struct option config_options[] = { >> OPT_END() >> }; >> >> +static int show_spec_config(struct perf_config_set *set, const char *var) >> +{ >> + struct perf_config_section *section; >> + struct perf_config_item *item; >> + >> + if (set == NULL) >> + return -1; >> + >> + perf_config_items__for_each_entry(&set->sections, section) { >> + if (prefixcmp(var, section->name) != 0) >> + continue; >> + >> + perf_config_items__for_each_entry(§ion->items, item) { >> + const char *name = var + strlen(section->name) + 1; >> + >> + if (strcmp(name, item->name) == 0) { >> + char *value = item->value; >> + >> + if (value) { >> + printf("%s=%s\n", var, value); >> + return 0; >> + } >> + } >> + >> + } >> + } >> + >> + return 0; >> +} >> + >> static int show_config(struct perf_config_set *set) >> { >> struct perf_config_section *section; >> @@ -54,7 +84,7 @@ static int show_config(struct perf_config_set *set) >> >> int cmd_config(int argc, const char **argv, const char *prefix __maybe_unused) >> { >> - int ret = 0; >> + int i, ret = 0; >> struct perf_config_set *set; >> char *user_config = mkpath("%s/.perfconfig", getenv("HOME")); >> >> @@ -100,7 +130,11 @@ int cmd_config(int argc, const char **argv, const char *prefix __maybe_unused) >> } >> break; >> default: >> - usage_with_options(config_usage, config_options); >> + if (argc) >> + for (i = 0; argv[i]; i++) >> + ret = show_spec_config(set, argv[i]); >> + else >> + usage_with_options(config_usage, config_options); >> } >> >> perf_config_set__delete(set); >> -- >> 2.7.4