#ifndef __PERF_CONFIG_H
#define __PERF_CONFIG_H

#include <stdbool.h>
#include <linux/list.h>

struct perf_config_item {
	char *name;
	char *value;
	bool from_system_config;
	struct list_head node;
};

struct perf_config_section {
	char *name;
	struct list_head items;
	bool from_system_config;
	struct list_head node;
};

struct perf_config_set {
	struct list_head sections;
};

extern const char *config_exclusive_filename;

typedef int (*config_fn_t)(const char *, const char *, void *);
int perf_default_config(const char *, const char *, void *);
int perf_config(config_fn_t fn, void *);
int perf_config_int(const char *, const char *);
u64 perf_config_u64(const char *, const char *);
int perf_config_bool(const char *, const char *);
int config_error_nonbool(const char *);
const char *perf_etc_perfconfig(void);

struct perf_config_set *perf_config_set__new(void);
void perf_config_set__delete(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);
void perf_config__init(void);
void perf_config__exit(void);
void perf_config__refresh(void);

/**
 * perf_config_sections__for_each - iterate thru all the sections
 * @list: list_head instance to iterate
 * @section: struct perf_config_section iterator
 */
#define perf_config_sections__for_each_entry(list, section)	\
        list_for_each_entry(section, list, node)

/**
 * perf_config_items__for_each - iterate thru all the items
 * @list: list_head instance to iterate
 * @item: struct perf_config_item iterator
 */
#define perf_config_items__for_each_entry(list, item)	\
        list_for_each_entry(item, list, node)

/**
 * perf_config_set__for_each - iterate thru all the config section-item pairs
 * @set: evlist instance to iterate
 * @section: struct perf_config_section iterator
 * @item: struct perf_config_item iterator
 */
#define perf_config_set__for_each_entry(set, section, item)			\
	perf_config_sections__for_each_entry(&set->sections, section)		\
	perf_config_items__for_each_entry(&section->items, item)

#endif /* __PERF_CONFIG_H */
'>
<input type='hidden' name='id' value='cf3e80df13e534eb34a85835d5357c78d8689199'/><select name='qt'>
<option value='grep'>log msg</option>
<option value='author'>author</option>
<option value='committer'>committer</option>
<option value='range'>range</option>
</select>
<input class='txt' type='search' size='10' name='q' value=''/>
<input type='submit' value='search'/>
</form>
</td></tr></table>
<div class='path'>path: <a href='/cgit.cgi/linux/net-next.git/log/?id=cf3e80df13e534eb34a85835d5357c78d8689199'>root</a>/<a href='/cgit.cgi/linux/net-next.git/log/include?id=cf3e80df13e534eb34a85835d5357c78d8689199'>include</a>/<a href='/cgit.cgi/linux/net-next.git/log/include/uapi?id=cf3e80df13e534eb34a85835d5357c78d8689199'>uapi</a></div><div class='content'><table class='list nowrap'><tr class='nohover'><th class='left'>Age</th><th class='left'>Commit message (<a href='/cgit.cgi/linux/net-next.git/log/include/uapi?id=cf3e80df13e534eb34a85835d5357c78d8689199&amp;showmsg=1'>Expand</a>)</th><th class='left'>Author</th><th class='left'>Files</th><th class='left'>Lines</th></tr>
<tr><td><span title='2017-02-03 16:58:20 -0500'>2017-02-03</span></td><td><a href='/cgit.cgi/linux/net-next.git/commit/include/uapi?id=52e01b84a244473074fc0612c169e2e043d58b01'>Merge git://git.kernel.org/pub/scm/linux/kernel/git/pablo/nf-next</a></td><td>David S. Miller</td><td>1</td><td><span class='deletions'>-0</span>/<span class='insertions'>+5</span></td></tr>
<tr><td><span title='2017-02-03 15:21:21 -0500'>2017-02-03</span></td><td><a href='/cgit.cgi/linux/net-next.git/commit/include/uapi?id=b3c7ef0adadc5768e0baa786213c6bd1ce521a77'>bridge: uapi: add per vlan tunnel info</a></td><td>Roopa Prabhu</td><td>2</td><td><span class='deletions'>-0</span>/<span class='insertions'>+12</span></td></tr>
<tr><td><span title='2017-02-03 15:21:21 -0500'>2017-02-03</span></td><td><a href='/cgit.cgi/linux/net-next.git/commit/include/uapi?id=3ad7a4b141ebd6091494913672d7166d5c2764e4'>vxlan: support fdb and learning in COLLECT_METADATA mode</a></td><td>Roopa Prabhu</td><td>1</td><td><span class='deletions'>-0</span>/<span class='insertions'>+1</span></td></tr>
<tr><td><span title='2017-02-03 15:16:46 -0500'>2017-02-03</span></td><td><a href='/cgit.cgi/linux/net-next.git/commit/include/uapi?id=295a6e06d21e1f469c9f38b00125a13b60ad4e7c'>net/sched: act_ife: Change to use ife module</a></td><td>Yotam Gigi</td><td>1</td><td><span class='deletions'>-9</span>/<span class='insertions'>+1</span></td></tr>
<tr><td><span title='2017-02-03 15:16:45 -0500'>2017-02-03</span></td><td><a href='/cgit.cgi/linux/net-next.git/commit/include/uapi?id=1ce8460496c05379c66edc178c3c55ca4e953044'>net: Introduce ife encapsulation module</a></td><td>Yotam Gigi</td><td>2</td><td><span class='deletions'>-0</span>/<span class='insertions'>+19</span></td></tr>
<tr><td><span title='2017-02-02 23:34:19 -0500'>2017-02-02</span></td><td><a href='/cgit.cgi/linux/net-next.git/commit/include/uapi?id=8fe809a992639b2013c0d8da2ba55cdea28a959a'>net: add LINUX_MIB_PFMEMALLOCDROP counter</a></td><td>Eric Dumazet</td><td>1</td><td><span class='deletions'>-0</span>/<span class='insertions'>+1</span></td></tr>
<tr><td><span title='2017-02-02 21:58:02 -0500'>2017-02-02</span></td><td><a href='/cgit.cgi/linux/net-next.git/commit/include/uapi?id=ba94f3088b792b16ea576a256a6030feddc87f24'>unix: add ioctl to open a unix socket file with O_PATH</a></td><td>Andrey Vagin</td><td>1</td><td><span class='deletions'>-0</span>/<span class='insertions'>+2</span></td></tr>
<tr><td><span title='2017-02-02 16:54:00 -0500'>2017-02-02</span></td><td><a href='/cgit.cgi/linux/net-next.git/commit/include/uapi?id=e2160156bf2a7d5018e99a9993fbcdda0abac09b'>Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net</a></td><td>David S. Miller</td><td>1</td><td><span class='deletions'>-1</span>/<span class='insertions'>+3</span></td></tr>