#include <linux/types.h> #include <unistd.h> #include <sys/prctl.h> #include "parse-events.h" #include "evlist.h" #include "evsel.h" #include "thread_map.h" #include "cpumap.h" #include "tests.h" #define CHECK__(x) { \ while ((x) < 0) { \ pr_debug(#x " failed!\n"); \ goto out_err; \ } \ } #define CHECK_NOT_NULL__(x) { \ while ((x) == NULL) { \ pr_debug(#x " failed!\n"); \ goto out_err; \ } \ } static int find_comm(struct perf_evlist *evlist, const char *comm) { union perf_event *event; int i, found; found = 0; for (i = 0; i < evlist->nr_mmaps; i++) { while ((event = perf_evlist__mmap_read(evlist, i)) != NULL) { if (event->header.type == PERF_RECORD_COMM && (pid_t)event->comm.pid == getpid() && (pid_t)event->comm.tid == getpid() && strcmp(event->comm.comm, comm) == 0) found += 1; perf_evlist__mmap_consume(evlist, i); } } return found; } /** * test__keep_tracking - test using a dummy software event to keep tracking. * * This function implements a test that checks that tracking events continue * when an event is disabled but a dummy software event is not disabled. If the * test passes %0 is returned, otherwise %-1 is returned. */ int test__keep_tracking(int subtest __maybe_unused) { struct record_opts opts = { .mmap_pages = UINT_MAX, .user_freq = UINT_MAX, .user_interval = ULLONG_MAX, .target = { .uses_mmap = true, }, }; struct thread_map *threads = NULL; struct cpu_map *cpus = NULL; struct perf_evlist *evlist = NULL; struct perf_evsel *evsel = NULL; int found, err = -1; const char *comm; threads = thread_map__new(-1, getpid(), UINT_MAX); CHECK_NOT_NULL__(threads); cpus = cpu_map__new(NULL); CHECK_NOT_NULL__(cpus); evlist = perf_evlist__new(); CHECK_NOT_NULL__(evlist); perf_evlist__set_maps(evlist, cpus, threads); CHECK__(parse_events(evlist, "dummy:u", NULL)); CHECK__(parse_events(evlist, "cycles:u", NULL)); perf_evlist__config(evlist, &opts, NULL); evsel = perf_evlist__first(evlist); evsel->attr.comm = 1; evsel->attr.disabled = 1; evsel->attr.enable_on_exec = 0; if (perf_evlist__open(evlist) < 0) { pr_debug("Unable to open dummy and cycles event\n"); err = TEST_SKIP; goto out_err; } CHECK__(perf_evlist__mmap(evlist, UINT_MAX, false)); /* * First, test that a 'comm' event can be found when the event is * enabled. */ perf_evlist__enable(evlist); comm = "Test COMM 1"; CHECK__(prctl(PR_SET_NAME, (unsigned long)comm, 0, 0, 0)); perf_evlist__disable(evlist); found = find_comm(evlist, comm); if (found != 1) { pr_debug("First time, failed to find tracking event.\n"); goto out_err; } /* * Secondly, test that a 'comm' event can be found when the event is * disabled with the dummy event still enabled. */ perf_evlist__enable(evlist); evsel = perf_evlist__last(evlist); CHECK__(perf_evsel__disable(evsel)); comm = "Test COMM 2"; CHECK__(prctl(PR_SET_NAME, (unsigned long)comm, 0, 0, 0)); perf_evlist__disable(evlist); found = find_comm(evlist, comm); if (found != 1) { pr_debug("Seconf time, failed to find tracking event.\n"); goto out_err; } err = 0; out_err: if (evlist) { perf_evlist__disable(evlist); perf_evlist__delete(evlist); } else { cpu_map__put(cpus); thread_map__put(threads); } return err; } ove&id=24d615a694d649aa2e167c3f97f62bdad07e3f84'>util</a>/<a href='/cgit.cgi/linux/net-next.git/commit/tools/perf/util/debug.c?h=nds-private-remove&id=24d615a694d649aa2e167c3f97f62bdad07e3f84'>debug.c</a></div><div class='content'><div class='cgit-panel'><b>diff options</b><form method='get'><input type='hidden' name='h' value='nds-private-remove'/><input type='hidden' name='id' value='24d615a694d649aa2e167c3f97f62bdad07e3f84'/><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>Aleksander Morgado <aleksander@aleksander.es></td><td class='right'>2017-01-18 21:31:31 +0100</td></tr> <tr><th>committer</th><td>Johan Hovold <johan@kernel.org></td><td class='right'>2017-01-19 09:08:37 +0100</td></tr> <tr><th>commit</th><td colspan='2' class='oid'><a href='/cgit.cgi/linux/net-next.git/commit/tools/perf/util/debug.c?h=nds-private-remove&id=24d615a694d649aa2e167c3f97f62bdad07e3f84'>24d615a694d649aa2e167c3f97f62bdad07e3f84</a> (<a href='/cgit.cgi/linux/net-next.git/patch/tools/perf/util/debug.c?id=24d615a694d649aa2e167c3f97f62bdad07e3f84'>patch</a>)</td></tr> <tr><th>tree</th><td colspan='2' class='oid'><a href='/cgit.cgi/linux/net-next.git/tree/?h=nds-private-remove&id=24d615a694d649aa2e167c3f97f62bdad07e3f84'>2fe33c115bdec6bf4b01e27afd90bb16fa668e22</a> /<a href='/cgit.cgi/linux/net-next.git/tree/tools/perf/util/debug.c?h=nds-private-remove&id=24d615a694d649aa2e167c3f97f62bdad07e3f84'>tools/perf/util/debug.c</a></td></tr> <tr><th>parent</th><td colspan='2' class='oid'><a href='/cgit.cgi/linux/net-next.git/commit/tools/perf/util/debug.c?h=nds-private-remove&id=49def1853334396f948dcb4cedb9347abb318df5'>49def1853334396f948dcb4cedb9347abb318df5</a> (<a href='/cgit.cgi/linux/net-next.git/diff/tools/perf/util/debug.c?h=nds-private-remove&id=24d615a694d649aa2e167c3f97f62bdad07e3f84&id2=49def1853334396f948dcb4cedb9347abb318df5'>diff</a>)</td></tr></table> <div class='commit-subject'>USB: serial: qcserial: add Dell DW5570 QDL</div><div class='commit-msg'>The Dell DW5570 is a re-branded Sierra Wireless MC8805 which will by default boot with vid 0x413c and pid 0x81a3. When triggered QDL download mode, the device switches to pid 0x81a6 and provides the standard TTY used for firmware upgrade. Cc: <stable@vger.kernel.org> Signed-off-by: Aleksander Morgado <aleksander@aleksander.es> Signed-off-by: Johan Hovold <johan@kernel.org> </div><div class='diffstat-header'><a href='/cgit.cgi/linux/net-next.git/diff/?h=nds-private-remove&id=24d615a694d649aa2e167c3f97f62bdad07e3f84'>Diffstat</a> (limited to 'tools/perf/util/debug.c')</div><table summary='diffstat' class='diffstat'>