/* Copyright (c) 2015 PLUMgrid, http://plumgrid.com * * This program is free software; you can redistribute it and/or * modify it under the terms of version 2 of the GNU General Public * License as published by the Free Software Foundation. */ #include <stdio.h> #include <stdlib.h> #include <signal.h> #include <unistd.h> #include <stdbool.h> #include <string.h> #include <time.h> #include <linux/bpf.h> #include "libbpf.h" #include "bpf_load.h" struct pair { long long val; __u64 ip; }; static __u64 time_get_ns(void) { struct timespec ts; clock_gettime(CLOCK_MONOTONIC, &ts); return ts.tv_sec * 1000000000ull + ts.tv_nsec; } static void print_old_objects(int fd) { long long val = time_get_ns(); __u64 key, next_key; struct pair v; key = write(1, "\e[1;1H\e[2J", 12); /* clear screen */ key = -1; while (bpf_map_get_next_key(map_fd[0], &key, &next_key) == 0) { bpf_map_lookup_elem(map_fd[0], &next_key, &v); key = next_key; if (val - v.val < 1000000000ll) /* object was allocated more then 1 sec ago */ continue; printf("obj 0x%llx is %2lldsec old was allocated at ip %llx\n", next_key, (val - v.val) / 1000000000ll, v.ip); } } int main(int ac, char **argv) { char filename[256]; int i; snprintf(filename, sizeof(filename), "%s_kern.o", argv[0]); if (load_bpf_file(filename)) { printf("%s", bpf_log_buf); return 1; } for (i = 0; ; i++) { print_old_objects(map_fd[1]); sleep(1); } return 0; } </a><a href='/cgit.cgi/linux/net-next.git/refs/'>refs</a><a href='/cgit.cgi/linux/net-next.git/log/Documentation/ABI/stable'>log</a><a href='/cgit.cgi/linux/net-next.git/tree/Documentation/ABI/stable'>tree</a><a class='active' href='/cgit.cgi/linux/net-next.git/commit/Documentation/ABI/stable'>commit</a><a href='/cgit.cgi/linux/net-next.git/diff/Documentation/ABI/stable'>diff</a></td><td class='form'><form class='right' method='get' action='/cgit.cgi/linux/net-next.git/log/Documentation/ABI/stable'> <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/commit/'>root</a>/<a href='/cgit.cgi/linux/net-next.git/commit/Documentation'>Documentation</a>/<a href='/cgit.cgi/linux/net-next.git/commit/Documentation/ABI'>ABI</a>/<a href='/cgit.cgi/linux/net-next.git/commit/Documentation/ABI/stable'>stable</a></div><div class='content'><div class='cgit-panel'><b>diff options</b><form method='get'><table><tr><td colspan='2'/></tr><tr><td class='label'>context:</td><td class='ctrl'><select name='context' onchange='this.form.submit();'><option value='1'>1</option><option value='2'>2</option><option value='3' selected='selected'>3</option><option value='4'>4</option><option value='5'>5</option><option value='6'>6</option><option value='7'>7</option><option value='8'>8</option><option value='9'>9</option><option value='10'>10</option><option value='15'>15</option><option value='20'>20</option><option value='25'>25</option><option value='30'>30</option><option value='35'>35</option><option value='40'>40</option></select></td></tr><tr><td class='label'>space:</td><td class='ctrl'><select name='ignorews' onchange='this.form.submit();'><option value='0' selected='selected'>include</option><option value='1'>ignore</option></select></td></tr><tr><td class='label'>mode:</td><td class='ctrl'><select name='dt' onchange='this.form.submit();'><option value='0' selected='selected'>unified</option><option value='1'>ssdiff</option><option value='2'>stat only</option></select></td></tr><tr><td/><td class='ctrl'><noscript><input type='submit' value='reload'/></noscript></td></tr></table></form></div><table summary='commit info' class='commit-info'> <tr><th>author</th><td>Linus Torvalds <torvalds@linux-foundation.org></td><td class='right'>2016-12-12 21:58:13 -0800</td></tr> <tr><th>committer</th><td>Linus Torvalds <torvalds@linux-foundation.org></td><td class='right'>2016-12-12 21:58:13 -0800</td></tr> <tr><th>commit</th><td colspan='2' class='oid'><a href='/cgit.cgi/linux/net-next.git/commit/Documentation/ABI/stable?id=e7aa8c2eb11ba69b1b69099c3c7bd6be3087b0ba'>e7aa8c2eb11ba69b1b69099c3c7bd6be3087b0ba</a> (<a href='/cgit.cgi/linux/net-next.git/patch/Documentation/ABI/stable?id=e7aa8c2eb11ba69b1b69099c3c7bd6be3087b0ba'>patch</a>)</td></tr> <tr><th>tree</th><td colspan='2' class='oid'><a href='/cgit.cgi/linux/net-next.git/tree/'>f63906f41699c8e38af9d12b063e2ceab0286ef2</a> /<a href='/cgit.cgi/linux/net-next.git/tree/Documentation/ABI/stable'>Documentation/ABI/stable</a></td></tr> <tr><th>parent</th><td colspan='2' class='oid'><a href='/cgit.cgi/linux/net-next.git/commit/Documentation/ABI/stable?id=e34bac726d27056081d0250c0e173e4b155aa340'>e34bac726d27056081d0250c0e173e4b155aa340</a> (<a href='/cgit.cgi/linux/net-next.git/diff/Documentation/ABI/stable?id2=e34bac726d27056081d0250c0e173e4b155aa340'>diff</a>)</td></tr><tr><th>parent</th><td colspan='2' class='oid'><a href='/cgit.cgi/linux/net-next.git/commit/Documentation/ABI/stable?id=868c97a846a73e937d835b09b8c885a69df50ec8'>868c97a846a73e937d835b09b8c885a69df50ec8</a> (<a href='/cgit.cgi/linux/net-next.git/diff/Documentation/ABI/stable?id2=868c97a846a73e937d835b09b8c885a69df50ec8'>diff</a>)</td></tr></table> <div class='commit-subject'>Merge tag 'docs-4.10' of git://git.lwn.net/linux<span class='decoration'><a class='deco' href='/cgit.cgi/linux/net-next.git/commit/Documentation/ABI/stable?id=e7aa8c2eb11ba69b1b69099c3c7bd6be3087b0ba'>HEAD</a><a class='branch-deco' href='/cgit.cgi/linux/net-next.git/log/Documentation/ABI/stable'>master</a></span></div><div class='commit-msg'>Pull documentation update from Jonathan Corbet: "These are the documentation changes for 4.10. It's another busy cycle for the docs tree, as the sphinx conversion continues. Highlights include: - Further work on PDF output, which remains a bit of a pain but should be more solid now. - Five more DocBook template files converted to Sphinx. Only 27 to go... Lots of plain-text files have also been converted and integrated. - Images in binary formats have been replaced with more source-friendly versions. - Various bits of organizational work, including the renaming of various files discussed at the kernel summit. - New documentation for the device_link mechanism. ... and, of course, lots of typo fixes and small updates" * tag 'docs-4.10' of git://git.lwn.net/linux: (193 commits) dma-buf: Extract dma-buf.rst Update Documentation/00-INDEX docs: 00-INDEX: document directories/files with no docs docs: 00-INDEX: remove non-existing entries docs: 00-INDEX: add missing entries for documentation files/dirs docs: 00-INDEX: consolidate process/ and admin-guide/ description scripts: add a script to check if Documentation/00-INDEX is sane Docs: change sh -> awk in REPORTING-BUGS Documentation/core-api/device_link: Add initial documentation core-api: remove an unexpected unident ppc/idle: Add documentation for powersave=off Doc: Correct typo, "Introdution" => "Introduction" Documentation/atomic_ops.txt: convert to ReST markup Documentation/local_ops.txt: convert to ReST markup Documentation/assoc_array.txt: convert to ReST markup docs-rst: parse-headers.pl: cleanup the documentation docs-rst: fix media cleandocs target docs-rst: media/Makefile: reorganize the rules docs-rst: media: build SVG from graphviz files docs-rst: replace bayer.png by a SVG image ... </div><div class='diffstat-header'><a href='/cgit.cgi/linux/net-next.git/diff/'>Diffstat</a> (limited to 'Documentation/ABI/stable')</div><table summary='diffstat' class='diffstat'>