/*
 * bpf-script-example.c
 * Test basic LLVM building
 */
#ifndef LINUX_VERSION_CODE
# error Need LINUX_VERSION_CODE
# error Example: for 4.2 kernel, put 'clang-opt="-DLINUX_VERSION_CODE=0x40200" into llvm section of ~/.perfconfig'
#endif
#define BPF_ANY 0
#define BPF_MAP_TYPE_ARRAY 2
#define BPF_FUNC_map_lookup_elem 1
#define BPF_FUNC_map_update_elem 2

static void *(*bpf_map_lookup_elem)(void *map, void *key) =
	(void *) BPF_FUNC_map_lookup_elem;
static void *(*bpf_map_update_elem)(void *map, void *key, void *value, int flags) =
	(void *) BPF_FUNC_map_update_elem;

struct bpf_map_def {
	unsigned int type;
	unsigned int key_size;
	unsigned int value_size;
	unsigned int max_entries;
};

#define SEC(NAME) __attribute__((section(NAME), used))
struct bpf_map_def SEC("maps") flip_table = {
	.type = BPF_MAP_TYPE_ARRAY,
	.key_size = sizeof(int),
	.value_size = sizeof(int),
	.max_entries = 1,
};

SEC("func=SyS_epoll_wait")
int bpf_func__SyS_epoll_wait(void *ctx)
{
	int ind =0;
	int *flag = bpf_map_lookup_elem(&flip_table, &ind);
	int new_flag;
	if (!flag)
		return 0;
	/* flip flag and store back */
	new_flag = !*flag;
	bpf_map_update_elem(&flip_table, &ind, &new_flag, BPF_ANY);
	return new_flag;
}
char _license[] SEC("license") = "GPL";
int _version SEC("version") = LINUX_VERSION_CODE;
></form></td></tr>
<tr><td class='sub'>net-next plumbings</td><td class='sub right'>Tobias Klauser</td></tr></table>
<table class='tabs'><tr><td>
<a href='/cgit.cgi/linux/net-next.git/'>summary</a><a href='/cgit.cgi/linux/net-next.git/refs/?id=d1908f52557b3230fbd63c0429f3b4b748bf2b6d'>refs</a><a class='active' href='/cgit.cgi/linux/net-next.git/log/drivers/usb/misc/emi26.c'>log</a><a href='/cgit.cgi/linux/net-next.git/tree/drivers/usb/misc/emi26.c?id=d1908f52557b3230fbd63c0429f3b4b748bf2b6d'>tree</a><a href='/cgit.cgi/linux/net-next.git/commit/drivers/usb/misc/emi26.c?id=d1908f52557b3230fbd63c0429f3b4b748bf2b6d'>commit</a><a href='/cgit.cgi/linux/net-next.git/diff/drivers/usb/misc/emi26.c?id=d1908f52557b3230fbd63c0429f3b4b748bf2b6d'>diff</a></td><td class='form'><form class='right' method='get' action='/cgit.cgi/linux/net-next.git/log/drivers/usb/misc/emi26.c'>
<input type='hidden' name='id' value='d1908f52557b3230fbd63c0429f3b4b748bf2b6d'/><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=d1908f52557b3230fbd63c0429f3b4b748bf2b6d'>root</a>/<a href='/cgit.cgi/linux/net-next.git/log/drivers?id=d1908f52557b3230fbd63c0429f3b4b748bf2b6d'>drivers</a>/<a href='/cgit.cgi/linux/net-next.git/log/drivers/usb?id=d1908f52557b3230fbd63c0429f3b4b748bf2b6d'>usb</a>/<a href='/cgit.cgi/linux/net-next.git/log/drivers/usb/misc?id=d1908f52557b3230fbd63c0429f3b4b748bf2b6d'>misc</a>/<a href='/cgit.cgi/linux/net-next.git/log/drivers/usb/misc/emi26.c?id=d1908f52557b3230fbd63c0429f3b4b748bf2b6d'>emi26.c</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/drivers/usb/misc/emi26.c?id=d1908f52557b3230fbd63c0429f3b4b748bf2b6d&amp;showmsg=1'>Expand</a>)</th><th class='left'>Author</th><th class='left'>Files</th><th class='left'>Lines</th></tr>