Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S965022AbcCNMRa (ORCPT ); Mon, 14 Mar 2016 08:17:30 -0400 Received: from mail-pa0-f66.google.com ([209.85.220.66]:36138 "EHLO mail-pa0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933964AbcCNMQ0 (ORCPT ); Mon, 14 Mar 2016 08:16:26 -0400 From: Taeung Song To: Arnaldo Carvalho de Melo Cc: linux-kernel@vger.kernel.org, Jiri Olsa , Namhyung Kim , Ingo Molnar , Peter Zijlstra , Taeung Song Subject: [PATCH v2 4/5] perf config: Initialize perf_config_set with all default configs Date: Mon, 14 Mar 2016 21:16:08 +0900 Message-Id: <1457957769-3700-5-git-send-email-treeze.taeung@gmail.com> X-Mailer: git-send-email 2.5.0 In-Reply-To: <1457957769-3700-1-git-send-email-treeze.taeung@gmail.com> References: <1457957769-3700-1-git-send-email-treeze.taeung@gmail.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3460 Lines: 129 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 Cc: Jiri Olsa Signed-off-by: Taeung Song --- tools/perf/builtin-config.c | 11 +++++++---- tools/perf/util/config.c | 27 ++++++++++++++++++++++----- tools/perf/util/config.h | 6 ++++++ 3 files changed, 35 insertions(+), 9 deletions(-) diff --git a/tools/perf/builtin-config.c b/tools/perf/builtin-config.c index 2217772..1bc1121 100644 --- a/tools/perf/builtin-config.c +++ b/tools/perf/builtin-config.c @@ -35,20 +35,23 @@ static struct option config_options[] = { static int show_config(struct perf_config_set *perf_configs) { + bool has_value = false; struct perf_config_item *config; struct list_head *config_list = &perf_configs->config_list; - if (list_empty(config_list)) - return -1; - list_for_each_entry(config, config_list, list) { char *value = config->value; - if (value) + if (value) { printf("%s.%s=%s\n", config->section, config->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 0b9ba51..5289063 100644 --- a/tools/perf/util/config.c +++ b/tools/perf/util/config.c @@ -647,6 +647,21 @@ out_free: return ret; } +static struct perf_config_set *perf_config_set__init(struct perf_config_set *perf_configs) +{ + int i; + struct list_head *head = &perf_configs->config_list; + + INIT_LIST_HEAD(&perf_configs->config_list); + + for (i = 0; i != CONFIG_END; i++) { + struct perf_config_item *config = &default_configs[i]; + + list_add_tail(&config->list, head); + } + return perf_configs; +} + struct perf_config_set *perf_config_set__new(void) { struct perf_config_set *perf_configs = zalloc(sizeof(*perf_configs)); @@ -654,7 +669,7 @@ struct perf_config_set *perf_config_set__new(void) if (!perf_configs) return NULL; - INIT_LIST_HEAD(&perf_configs->config_list); + perf_config_set__init(perf_configs); perf_config(collect_config, &perf_configs->config_list); return perf_configs; @@ -666,10 +681,12 @@ void perf_config_set__delete(struct perf_config_set *perf_configs) list_for_each_entry_safe(pos, item, &perf_configs->config_list, list) { list_del(&pos->list); - free((char *)pos->section); - free((char *)pos->name); - free(pos->value); - free(pos); + if (pos->is_custom) { + free((char *)pos->section); + free((char *)pos->name); + free(pos->value); + free(pos); + } } free(perf_configs); diff --git a/tools/perf/util/config.h b/tools/perf/util/config.h index 3c30576..df47420 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 *section; const char *name; @@ -28,6 +33,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