Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758020AbcC2XeM (ORCPT ); Tue, 29 Mar 2016 19:34:12 -0400 Received: from mail-pa0-f66.google.com ([209.85.220.66]:35505 "EHLO mail-pa0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750940AbcC2XeJ (ORCPT ); Tue, 29 Mar 2016 19:34:09 -0400 Subject: Re: [PATCH v4 3/4] perf config: Prepare all default configs To: Arnaldo Carvalho de Melo , Namhyung Kim References: <1459212236-1186-1-git-send-email-treeze.taeung@gmail.com> <20160329161256.GC23816@kernel.org> Cc: linux-kernel@vger.kernel.org, Jiri Olsa , Ingo Molnar , Peter Zijlstra From: Taeung Song Message-ID: <56FB10EC.8030803@gmail.com> Date: Wed, 30 Mar 2016 08:34:04 +0900 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.6.0 MIME-Version: 1.0 In-Reply-To: <20160329161256.GC23816@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: 7205 Lines: 257 On 03/30/2016 01:12 AM, Arnaldo Carvalho de Melo wrote: > Em Tue, Mar 29, 2016 at 09:43:56AM +0900, Taeung Song escreveu: >> To precisely manage configs, >> prepare all default perf's configs that contain >> default section name, variable name, value >> and correct type, not string type. >> >> In the near future, this will be used when >> checking type of config variable or showing >> all configs with default values, etc. >> >> Acked-by: Namhyung Kim > > Doesn't apply, probably because needs the first patch? All right, I'm waiting for namhyung's reconsidering the first patch. Thanks, Taeung > >> Cc: Jiri Olsa >> Signed-off-by: Taeung Song >> --- >> tools/perf/util/config.c | 110 ++++++++++++++++++++++++++++++++++++++++++++++- >> tools/perf/util/config.h | 62 +++++++++++++++++++++++++- >> 2 files changed, 168 insertions(+), 4 deletions(-) >> >> diff --git a/tools/perf/util/config.c b/tools/perf/util/config.c >> index 2dbf47c..df9f0dd 100644 >> --- a/tools/perf/util/config.c >> +++ b/tools/perf/util/config.c >> @@ -15,6 +15,7 @@ >> #include "util/llvm-utils.h" /* perf_llvm_config */ >> #include "config.h" >> >> +#define MAX_CONFIGS 64 >> #define MAXNAME (256) >> >> #define DEBUG_CACHE_DIR ".debug" >> @@ -29,6 +30,111 @@ static int config_file_eof; >> >> const char *config_exclusive_filename; >> >> +struct perf_config_section default_sections[] = { >> + { .name = "colors" }, >> + { .name = "tui" }, >> + { .name = "buildid" }, >> + { .name = "annotate" }, >> + { .name = "gtk" }, >> + { .name = "pager" }, >> + { .name = "help" }, >> + { .name = "hist" }, >> + { .name = "ui" }, >> + { .name = "call-graph" }, >> + { .name = "report" }, >> + { .name = "top" }, >> + { .name = "man" }, >> + { .name = "kmem" } >> +}; >> + >> +struct perf_config_item default_config_items[][MAX_CONFIGS] = { >> + [CONFIG_COLORS] = { >> + CONF_STR_VAR("top", "red, default"), >> + CONF_STR_VAR("medium", "green, default"), >> + CONF_STR_VAR("normal", "lightgray, default"), >> + CONF_STR_VAR("selected", "white, lightgray"), >> + CONF_STR_VAR("jump_arrows", "blue, default"), >> + CONF_STR_VAR("addr", "magenta, default"), >> + CONF_STR_VAR("root", "white, blue"), >> + CONF_END() >> + }, >> + [CONFIG_TUI] = { >> + CONF_BOOL_VAR("report", true), >> + CONF_BOOL_VAR("annotate", true), >> + CONF_BOOL_VAR("top", true), >> + CONF_END() >> + }, >> + [CONFIG_BUILDID] = { >> + CONF_STR_VAR("dir", "~/.debug"), >> + CONF_END() >> + }, >> + [CONFIG_ANNOTATE] = { >> + CONF_BOOL_VAR("hide_src_code", false), >> + CONF_BOOL_VAR("use_offset", true), >> + CONF_BOOL_VAR("jump_arrows", true), >> + CONF_BOOL_VAR("show_nr_jumps", false), >> + CONF_BOOL_VAR("show_linenr", false), >> + CONF_BOOL_VAR("show_total_period", false), >> + CONF_END() >> + }, >> + [CONFIG_GTK] = { >> + CONF_BOOL_VAR("annotate", false), >> + CONF_BOOL_VAR("report", false), >> + CONF_BOOL_VAR("top", false), >> + CONF_END() >> + }, >> + [CONFIG_PAGER] = { >> + CONF_BOOL_VAR("cmd", true), >> + CONF_BOOL_VAR("report", true), >> + CONF_BOOL_VAR("annotate", true), >> + CONF_BOOL_VAR("top", true), >> + CONF_BOOL_VAR("diff", true), >> + CONF_END() >> + }, >> + [CONFIG_HELP] = { >> + CONF_STR_VAR("format", "man"), >> + CONF_INT_VAR("autocorrect", 0), >> + CONF_END() >> + }, >> + [CONFIG_HIST] = { >> + CONF_STR_VAR("percentage", "absolute"), >> + CONF_END() >> + }, >> + [CONFIG_UI] = { >> + CONF_BOOL_VAR("show-headers", true), >> + CONF_END() >> + }, >> + [CONFIG_CALL_GRAPH] = { >> + CONF_STR_VAR("record-mode", "fp"), >> + CONF_LONG_VAR("dump-size", 8192), >> + CONF_STR_VAR("print-type", "graph"), >> + CONF_STR_VAR("order", "callee"), >> + CONF_STR_VAR("sort-key", "function"), >> + CONF_DOUBLE_VAR("threshold", 0.5), >> + CONF_LONG_VAR("print-limit", 0), >> + CONF_END() >> + }, >> + [CONFIG_REPORT] = { >> + CONF_BOOL_VAR("group", true), >> + CONF_BOOL_VAR("children", true), >> + CONF_FLOAT_VAR("percent-limit", 0), >> + CONF_U64_VAR("queue-size", 0), >> + CONF_END() >> + }, >> + [CONFIG_TOP] = { >> + CONF_BOOL_VAR("children", true), >> + CONF_END() >> + }, >> + [CONFIG_MAN] = { >> + CONF_STR_VAR("viewer", "man"), >> + CONF_END() >> + }, >> + [CONFIG_KMEM] = { >> + CONF_STR_VAR("default", "slab"), >> + CONF_END() >> + } >> +}; >> + >> static int get_next_char(void) >> { >> int c; >> @@ -665,12 +771,12 @@ void perf_config_set__delete(struct perf_config_set *perf_configs) >> list_for_each_entry_safe(config_item, item_tmp, >> §ion->config_items, list) { >> list_del(&config_item->list); >> - free(config_item->name); >> + free((char *)config_item->name); >> free(config_item->value); >> free(config_item); >> } >> list_del(§ion->list); >> - free(section->name); >> + free((char *)section->name); >> free(section); >> } >> >> diff --git a/tools/perf/util/config.h b/tools/perf/util/config.h >> index e270e51..aa4a5a2 100644 >> --- a/tools/perf/util/config.h >> +++ b/tools/perf/util/config.h >> @@ -4,14 +4,34 @@ >> #include >> #include >> >> +enum perf_config_type { >> + CONFIG_TYPE_BOOL, >> + CONFIG_TYPE_INT, >> + CONFIG_TYPE_LONG, >> + CONFIG_TYPE_U64, >> + CONFIG_TYPE_FLOAT, >> + CONFIG_TYPE_DOUBLE, >> + CONFIG_TYPE_STRING >> +}; >> + >> struct perf_config_item { >> - char *name; >> + const char *name; >> char *value; >> + union { >> + bool b; >> + int i; >> + u32 l; >> + u64 ll; >> + float f; >> + double d; >> + const char *s; >> + } default_value; >> + enum perf_config_type type; >> struct list_head list; >> }; >> >> struct perf_config_section { >> - char *name; >> + const char *name; >> struct list_head config_items; >> struct list_head list; >> }; >> @@ -20,6 +40,44 @@ struct perf_config_set { >> struct list_head sections; >> }; >> >> +enum perf_config_secion_idx { >> + CONFIG_COLORS, >> + CONFIG_TUI, >> + CONFIG_BUILDID, >> + CONFIG_ANNOTATE, >> + CONFIG_GTK, >> + CONFIG_PAGER, >> + CONFIG_HELP, >> + CONFIG_HIST, >> + CONFIG_UI, >> + CONFIG_CALL_GRAPH, >> + CONFIG_REPORT, >> + CONFIG_TOP, >> + CONFIG_MAN, >> + CONFIG_KMEM, >> + CONFIG_END >> +}; >> + >> +#define CONF_VAR(_name, _field, _val, _type) \ >> + { .name = _name, .default_value._field = _val, .type = _type } >> + >> +#define CONF_BOOL_VAR(_name, _val) \ >> + CONF_VAR(_name, b, _val, CONFIG_TYPE_BOOL) >> +#define CONF_INT_VAR(_name, _val) \ >> + CONF_VAR(_name, i, _val, CONFIG_TYPE_INT) >> +#define CONF_LONG_VAR(_name, _val) \ >> + CONF_VAR(_name, l, _val, CONFIG_TYPE_LONG) >> +#define CONF_U64_VAR(_name, _val) \ >> + CONF_VAR(_name, ll, _val, CONFIG_TYPE_U64) >> +#define CONF_FLOAT_VAR(_name, _val) \ >> + CONF_VAR(_name, f, _val, CONFIG_TYPE_FLOAT) >> +#define CONF_DOUBLE_VAR(_name, _val) \ >> + CONF_VAR(_name, d, _val, CONFIG_TYPE_DOUBLE) >> +#define CONF_STR_VAR(_name, _val) \ >> + CONF_VAR(_name, s, _val, CONFIG_TYPE_STRING) >> +#define CONF_END() \ >> + { .name = NULL } >> + >> struct perf_config_set *perf_config_set__new(void); >> void perf_config_set__delete(struct perf_config_set *perf_configs); >> >> -- >> 2.5.0