Commit 08d090cf authored by Taeung Song's avatar Taeung Song Committed by Arnaldo Carvalho de Melo

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: default avatarTaeung Song <treeze.taeung@gmail.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Nambong Ha <over3025@gmail.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Wang Nan <wangnan0@huawei.com>
Cc: Wookje Kwon <aweee0@gmail.com>
Link: http://lkml.kernel.org/r/1478241862-31230-7-git-send-email-treeze.taeung@gmail.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent c6fc018a
...@@ -48,14 +48,18 @@ static int set_config(struct perf_config_set *set, const char *file_name, ...@@ -48,14 +48,18 @@ static int set_config(struct perf_config_set *set, const char *file_name,
if (!fp) if (!fp)
return -1; return -1;
perf_config_set__collect(set, var, value); perf_config_set__collect(set, file_name, var, value);
fprintf(fp, "%s\n", first_line); fprintf(fp, "%s\n", first_line);
/* overwrite configvariables */ /* overwrite configvariables */
perf_config_items__for_each_entry(&set->sections, section) { perf_config_items__for_each_entry(&set->sections, section) {
if (!use_system_config && section->from_system_config)
continue;
fprintf(fp, "[%s]\n", section->name); fprintf(fp, "[%s]\n", section->name);
perf_config_items__for_each_entry(&section->items, item) { perf_config_items__for_each_entry(&section->items, item) {
if (!use_system_config && section->from_system_config)
continue;
if (item->value) if (item->value)
fprintf(fp, "\t%s = %s\n", fprintf(fp, "\t%s = %s\n",
item->name, item->value); item->name, item->value);
......
...@@ -594,6 +594,19 @@ static int collect_config(const char *var, const char *value, ...@@ -594,6 +594,19 @@ static int collect_config(const char *var, const char *value,
goto out_free; 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); ret = set_value(item, value);
return ret; return ret;
...@@ -602,9 +615,10 @@ static int collect_config(const char *var, const char *value, ...@@ -602,9 +615,10 @@ static int collect_config(const char *var, const char *value,
return -1; 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) const char *var, const char *value)
{ {
config_file_name = file_name;
return collect_config(var, value, set); return collect_config(var, value, set);
} }
......
...@@ -7,12 +7,14 @@ ...@@ -7,12 +7,14 @@
struct perf_config_item { struct perf_config_item {
char *name; char *name;
char *value; char *value;
bool from_system_config;
struct list_head node; struct list_head node;
}; };
struct perf_config_section { struct perf_config_section {
char *name; char *name;
struct list_head items; struct list_head items;
bool from_system_config;
struct list_head node; struct list_head node;
}; };
...@@ -33,7 +35,7 @@ const char *perf_etc_perfconfig(void); ...@@ -33,7 +35,7 @@ const char *perf_etc_perfconfig(void);
struct perf_config_set *perf_config_set__new(void); struct perf_config_set *perf_config_set__new(void);
void perf_config_set__delete(struct perf_config_set *set); 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); const char *var, const char *value);
void perf_config__init(void); void perf_config__init(void);
void perf_config__exit(void); void perf_config__exit(void);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment