/* * 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&showmsg=1'>Expand</a>)</th><th class='left'>Author</th><th class='left'>Files</th><th class='left'>Lines</th></tr>