From: Namhyung Kim <namhyung@kernel.org>
To: Taeung Song <treeze.taeung@gmail.com>
Cc: Arnaldo Carvalho de Melo <acme@kernel.org>,
linux-kernel@vger.kernel.org, Jiri Olsa <jolsa@kernel.org>,
Ingo Molnar <mingo@kernel.org>,
Peter Zijlstra <peterz@infradead.org>
Subject: Re: [PATCH v3 4/4] perf config: Initialize perf_config_set with all default configs
Date: Thu, 24 Mar 2016 15:13:17 +0900 [thread overview]
Message-ID: <20160324061317.GD32072@sejong> (raw)
In-Reply-To: <1458764193-15551-5-git-send-email-treeze.taeung@gmail.com>
On Thu, Mar 24, 2016 at 05:16:33AM +0900, Taeung Song wrote:
> To avoid duplicated config variables and
> use perf_config_set classifying between standard
> perf config variables and unknown or new config
> variables other than them, initialize perf_config_set
> with all default configs.
>
> And this will be needed when showing all configs with
> default value or checking correct type of a config
> variable in the near future.
>
> Cc: Namhyung Kim <namhyung@kernel.org>
> Cc: Jiri Olsa <jolsa@kernel.org>
> Signed-off-by: Taeung Song <treeze.taeung@gmail.com>
> ---
> tools/perf/builtin-config.c | 11 +++++++----
> tools/perf/util/config.c | 35 +++++++++++++++++++++++++++++------
> tools/perf/util/config.h | 6 ++++++
> 3 files changed, 42 insertions(+), 10 deletions(-)
>
> diff --git a/tools/perf/builtin-config.c b/tools/perf/builtin-config.c
> index c7cf34f..9e2adad 100644
> --- a/tools/perf/builtin-config.c
> +++ b/tools/perf/builtin-config.c
> @@ -35,23 +35,26 @@ static struct option config_options[] = {
>
> static int show_config(struct perf_config_set *perf_configs)
> {
> + bool has_value = false;
> struct perf_config_section *section;
> struct perf_config_item *config_item;
> struct list_head *sections = &perf_configs->sections;
>
> - if (list_empty(sections))
> - return -1;
> -
> list_for_each_entry(section, sections, list) {
> list_for_each_entry(config_item, §ion->config_items, list) {
> char *value = config_item->value;
>
> - if (value)
> + if (value) {
> printf("%s.%s=%s\n", section->name,
> config_item->name, value);
> + has_value = true;
> + }
> }
> }
>
> + if (!has_value)
> + return -1;
> +
> return 0;
> }
>
> diff --git a/tools/perf/util/config.c b/tools/perf/util/config.c
> index e3e6ef4..725015f 100644
> --- a/tools/perf/util/config.c
> +++ b/tools/perf/util/config.c
> @@ -746,6 +746,29 @@ out_free:
> return ret;
> }
>
> +static struct perf_config_set *perf_config_set__init(struct perf_config_set *perf_configs)
> +{
> + int i, j;
> + struct perf_config_section *section;
> + struct perf_config_item *config_items;
> + struct list_head *sections = &perf_configs->sections;
> +
> + INIT_LIST_HEAD(&perf_configs->sections);
> +
> + for (i = 0; i != CONFIG_END; i++) {
> + section = &default_sections[i];
> + INIT_LIST_HEAD(§ion->config_items);
> +
> + config_items = default_config_items[i];
> + for (j = 0; config_items[j].name != NULL; j++)
> + list_add_tail(&config_items[j].list, §ion->config_items);
> +
> + list_add_tail(§ion->list, sections);
> + }
> +
> + return perf_configs;
> +}
> +
> struct perf_config_set *perf_config_set__new(void)
> {
> struct perf_config_set *perf_configs = zalloc(sizeof(*perf_configs));
> @@ -753,7 +776,7 @@ struct perf_config_set *perf_config_set__new(void)
> if (!perf_configs)
> return NULL;
>
> - INIT_LIST_HEAD(&perf_configs->sections);
> + perf_config_set__init(perf_configs);
> perf_config(collect_config, &perf_configs->sections);
>
> return perf_configs;
> @@ -769,13 +792,13 @@ 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((char *)config_item->name);
> - free(config_item->value);
> - free(config_item);
> + if (config_item->is_custom) {
Where did you set the ->is_custom?
> + free((char *)config_item->name);
> + free(config_item->value);
> + free(config_item);
> + }
> }
> list_del(§ion->list);
> - free((char *)section->name);
> - free(section);
Hmm.. I think the section also has to have something like is_custom
flag since the config file may have some sections/items currently
don't aware of. That would be needed for forward-compatibility IMHO.
Thanks,
Namhyung
> }
>
> free(perf_configs);
> diff --git a/tools/perf/util/config.h b/tools/perf/util/config.h
> index aa4a5a2..33cf9db 100644
> --- a/tools/perf/util/config.h
> +++ b/tools/perf/util/config.h
> @@ -14,6 +14,11 @@ enum perf_config_type {
> CONFIG_TYPE_STRING
> };
>
> +/**
> + * struct perf_config_item - element of perf's configs
> + *
> + * @is_custom: unknown or new config other than default config
> + */
> struct perf_config_item {
> const char *name;
> char *value;
> @@ -27,6 +32,7 @@ struct perf_config_item {
> const char *s;
> } default_value;
> enum perf_config_type type;
> + bool is_custom;
> struct list_head list;
> };
>
> --
> 2.5.0
>
next prev parent reply other threads:[~2016-03-24 6:13 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-03-23 20:16 [RFC][PATCH v3 0/4] perf config: Infrastructure code for perf-config Taeung Song
2016-03-23 20:16 ` [PATCH v3 1/4] perf config: Introduce perf_config_set class Taeung Song
2016-03-24 6:07 ` Namhyung Kim
2016-03-24 6:46 ` Taeung Song
2016-03-28 21:06 ` Arnaldo Carvalho de Melo
2016-03-29 0:18 ` Taeung Song
2016-03-23 20:16 ` [PATCH v3 2/4] perf config: Let show_config() work with perf_config_set Taeung Song
2016-03-24 6:08 ` Namhyung Kim
2016-03-23 20:16 ` [PATCH v3 3/4] perf config: Prepare all default configs Taeung Song
2016-03-24 6:08 ` Namhyung Kim
2016-03-23 20:16 ` [PATCH v3 4/4] perf config: Initialize perf_config_set with " Taeung Song
2016-03-24 6:13 ` Namhyung Kim [this message]
2016-03-24 6:49 ` Taeung Song
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=20160324061317.GD32072@sejong \
--to=namhyung@kernel.org \
--cc=acme@kernel.org \
--cc=jolsa@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox