• Home
  • Raw
  • Download

Lines Matching +full:sample +full:- +full:time

1 // SPDX-License-Identifier: GPL-2.0
3 * builtin-kwork.c
25 #include <subcmd/parse-options.h>
26 #include <traceevent/event-parse.h>
61 if (l->cpu > r->cpu) in id_cmp()
63 if (l->cpu < r->cpu) in id_cmp()
64 return -1; in id_cmp()
66 if (l->id > r->id) in id_cmp()
68 if (l->id < r->id) in id_cmp()
69 return -1; in id_cmp()
76 if (l->nr_atoms > r->nr_atoms) in count_cmp()
78 if (l->nr_atoms < r->nr_atoms) in count_cmp()
79 return -1; in count_cmp()
86 if (l->total_runtime > r->total_runtime) in runtime_cmp()
88 if (l->total_runtime < r->total_runtime) in runtime_cmp()
89 return -1; in runtime_cmp()
96 if (l->max_runtime > r->max_runtime) in max_runtime_cmp()
98 if (l->max_runtime < r->max_runtime) in max_runtime_cmp()
99 return -1; in max_runtime_cmp()
108 if (!r->nr_atoms) in avg_latency_cmp()
110 if (!l->nr_atoms) in avg_latency_cmp()
111 return -1; in avg_latency_cmp()
113 avgl = l->total_latency / l->nr_atoms; in avg_latency_cmp()
114 avgr = r->total_latency / r->nr_atoms; in avg_latency_cmp()
119 return -1; in avg_latency_cmp()
126 if (l->max_latency > r->max_latency) in max_latency_cmp()
128 if (l->max_latency < r->max_latency) in max_latency_cmp()
129 return -1; in max_latency_cmp()
166 if (kwork->report == KWORK_REPORT_LATENCY) in sort_dimension__add()
170 if (!strcmp(available_sorts[i]->name, tok)) { in sort_dimension__add()
171 list_add_tail(&available_sorts[i]->list, list); in sort_dimension__add()
176 return -1; in sort_dimension__add()
183 char *tmp, *tok, *str = strdup(kwork->sort_order); in setup_sorting()
187 if (sort_dimension__add(kwork, tok, &kwork->sort_list) < 0) in setup_sorting()
189 "Unknown --sort key: `%s'", tok); in setup_sorting()
192 pr_debug("Sort order: %s\n", kwork->sort_order); in setup_sorting()
197 struct perf_sample *sample) in atom_new() argument
203 list_for_each_entry(page, &kwork->atom_page_list, list) { in atom_new()
204 if (!bitmap_full(page->bitmap, NR_ATOM_PER_PAGE)) { in atom_new()
205 i = find_first_zero_bit(page->bitmap, NR_ATOM_PER_PAGE); in atom_new()
207 atom = &page->atoms[i]; in atom_new()
222 atom = &page->atoms[0]; in atom_new()
223 list_add_tail(&page->list, &kwork->atom_page_list); in atom_new()
226 __set_bit(i, page->bitmap); in atom_new()
227 atom->time = sample->time; in atom_new()
228 atom->prev = NULL; in atom_new()
229 atom->page_addr = page; in atom_new()
230 atom->bit_inpage = i; in atom_new()
236 if (atom->prev != NULL) in atom_free()
237 atom_free(atom->prev); in atom_free()
239 __clear_bit(atom->bit_inpage, in atom_free()
240 ((struct kwork_atom_page *)atom->page_addr)->bitmap); in atom_free()
245 list_del(&atom->list); in atom_del()
258 ret = sort->cmp(l, r); in work_cmp()
272 struct rb_node *node = root->rb_root.rb_node; in work_search()
278 node = node->rb_left; in work_search()
280 node = node->rb_right; in work_search()
282 if (work->name == NULL) in work_search()
283 work->name = key->name; in work_search()
296 struct rb_node **new = &(root->rb_root.rb_node), *parent = NULL; in work_insert()
304 new = &((*new)->rb_left); in work_insert()
306 new = &((*new)->rb_right); in work_insert()
311 rb_link_node(&key->node, parent, new); in work_insert()
312 rb_insert_color_cached(&key->node, root, leftmost); in work_insert()
326 INIT_LIST_HEAD(&work->atom_list[i]); in work_new()
328 work->id = key->id; in work_new()
329 work->cpu = key->cpu; in work_new()
330 work->name = key->name; in work_new()
331 work->class = key->class; in work_new()
352 struct perf_sample *sample) in profile_update_timespan() argument
354 if (!kwork->summary) in profile_update_timespan()
357 if ((kwork->timestart == 0) || (kwork->timestart > sample->time)) in profile_update_timespan()
358 kwork->timestart = sample->time; in profile_update_timespan()
360 if (kwork->timeend < sample->time) in profile_update_timespan()
361 kwork->timeend = sample->time; in profile_update_timespan()
366 struct perf_sample *sample) in profile_event_match() argument
368 int cpu = work->cpu; in profile_event_match()
369 u64 time = sample->time; in profile_event_match() local
370 struct perf_time_interval *ptime = &kwork->ptime; in profile_event_match()
372 if ((kwork->cpu_list != NULL) && !test_bit(cpu, kwork->cpu_bitmap)) in profile_event_match()
375 if (((ptime->start != 0) && (ptime->start > time)) || in profile_event_match()
376 ((ptime->end != 0) && (ptime->end < time))) in profile_event_match()
379 if ((kwork->profile_name != NULL) && in profile_event_match()
380 (work->name != NULL) && in profile_event_match()
381 (strcmp(work->name, kwork->profile_name) != 0)) in profile_event_match()
384 profile_update_timespan(kwork, sample); in profile_event_match()
393 struct perf_sample *sample, in work_push_atom() argument
400 BUG_ON(class->work_init == NULL); in work_push_atom()
401 class->work_init(class, &key, evsel, sample, machine); in work_push_atom()
403 atom = atom_new(kwork, sample); in work_push_atom()
405 return -1; in work_push_atom()
407 work = work_findnew(&class->work_root, &key, &kwork->cmp_id); in work_push_atom()
410 return -1; in work_push_atom()
413 if (!profile_event_match(kwork, work, sample)) { in work_push_atom()
419 dst_atom = list_last_entry_or_null(&work->atom_list[dst_type], in work_push_atom()
422 atom->prev = dst_atom; in work_push_atom()
423 list_del(&dst_atom->list); in work_push_atom()
430 list_add_tail(&atom->list, &work->atom_list[src_type]); in work_push_atom()
440 struct perf_sample *sample, in work_pop_atom() argument
447 BUG_ON(class->work_init == NULL); in work_pop_atom()
448 class->work_init(class, &key, evsel, sample, machine); in work_pop_atom()
450 work = work_findnew(&class->work_root, &key, &kwork->cmp_id); in work_pop_atom()
457 if (!profile_event_match(kwork, work, sample)) in work_pop_atom()
460 atom = list_last_entry_or_null(&work->atom_list[dst_type], in work_pop_atom()
465 src_atom = atom_new(kwork, sample); in work_pop_atom()
467 list_add_tail(&src_atom->list, &work->atom_list[src_type]); in work_pop_atom()
478 struct perf_sample *sample) in report_update_exit_event() argument
481 u64 exit_time = sample->time; in report_update_exit_event()
482 u64 entry_time = atom->time; in report_update_exit_event()
485 delta = exit_time - entry_time; in report_update_exit_event()
486 if ((delta > work->max_runtime) || in report_update_exit_event()
487 (work->max_runtime == 0)) { in report_update_exit_event()
488 work->max_runtime = delta; in report_update_exit_event()
489 work->max_runtime_start = entry_time; in report_update_exit_event()
490 work->max_runtime_end = exit_time; in report_update_exit_event()
492 work->total_runtime += delta; in report_update_exit_event()
493 work->nr_atoms++; in report_update_exit_event()
500 struct perf_sample *sample, in report_entry_event() argument
504 KWORK_TRACE_MAX, evsel, sample, in report_entry_event()
511 struct perf_sample *sample, in report_exit_event() argument
518 KWORK_TRACE_ENTRY, evsel, sample, in report_exit_event()
521 return -1; in report_exit_event()
524 report_update_exit_event(work, atom, sample); in report_exit_event()
533 struct perf_sample *sample) in latency_update_entry_event() argument
536 u64 entry_time = sample->time; in latency_update_entry_event()
537 u64 raise_time = atom->time; in latency_update_entry_event()
540 delta = entry_time - raise_time; in latency_update_entry_event()
541 if ((delta > work->max_latency) || in latency_update_entry_event()
542 (work->max_latency == 0)) { in latency_update_entry_event()
543 work->max_latency = delta; in latency_update_entry_event()
544 work->max_latency_start = raise_time; in latency_update_entry_event()
545 work->max_latency_end = entry_time; in latency_update_entry_event()
547 work->total_latency += delta; in latency_update_entry_event()
548 work->nr_atoms++; in latency_update_entry_event()
555 struct perf_sample *sample, in latency_raise_event() argument
559 KWORK_TRACE_MAX, evsel, sample, in latency_raise_event()
566 struct perf_sample *sample, in latency_entry_event() argument
573 KWORK_TRACE_RAISE, evsel, sample, in latency_entry_event()
576 return -1; in latency_entry_event()
579 latency_update_entry_event(work, atom, sample); in latency_entry_event()
587 struct perf_sample *sample, in timehist_save_callchain() argument
596 if (!kwork->show_callchain || sample->callchain == NULL) in timehist_save_callchain()
599 /* want main thread for process - has maps */ in timehist_save_callchain()
600 thread = machine__findnew_thread(machine, sample->pid, sample->pid); in timehist_save_callchain()
602 pr_debug("Failed to get thread for pid %d\n", sample->pid); in timehist_save_callchain()
608 if (thread__resolve_callchain(thread, cursor, evsel, sample, in timehist_save_callchain()
609 NULL, NULL, kwork->max_stack + 2) != 0) { in timehist_save_callchain()
621 sym = node->ms.sym; in timehist_save_callchain()
623 if (!strcmp(sym->name, "__softirqentry_text_start") || in timehist_save_callchain()
624 !strcmp(sym->name, "__do_softirq")) in timehist_save_callchain()
625 sym->ignore = 1; in timehist_save_callchain()
638 struct perf_sample *sample, in timehist_print_event() argument
647 timestamp__scnprintf_usec(atom->time, in timehist_print_event()
654 timestamp__scnprintf_usec(sample->time, in timehist_print_event()
661 printf(" [%0*d] ", PRINT_CPU_WIDTH, work->cpu); in timehist_print_event()
666 if (work->class && work->class->work_name) { in timehist_print_event()
667 work->class->work_name(work, kwork_name, in timehist_print_event()
669 printf(" %-*s ", PRINT_KWORK_NAME_WIDTH, kwork_name); in timehist_print_event()
671 printf(" %-*s ", PRINT_KWORK_NAME_WIDTH, ""); in timehist_print_event()
678 (double)(sample->time - atom->time) / NSEC_PER_MSEC); in timehist_print_event()
683 if (atom->prev != NULL) in timehist_print_event()
685 (double)(atom->time - atom->prev->time) / NSEC_PER_MSEC); in timehist_print_event()
692 if (kwork->show_callchain) { in timehist_print_event()
700 sample__fprintf_sym(sample, al, 0, in timehist_print_event()
714 struct perf_sample *sample, in timehist_raise_event() argument
718 KWORK_TRACE_MAX, evsel, sample, in timehist_raise_event()
725 struct perf_sample *sample, in timehist_entry_event() argument
732 KWORK_TRACE_RAISE, evsel, sample, in timehist_entry_event()
738 timehist_save_callchain(kwork, sample, evsel, machine); in timehist_entry_event()
746 struct perf_sample *sample, in timehist_exit_event() argument
755 if (machine__resolve(machine, &al, sample) < 0) { in timehist_exit_event()
757 ret = -1; in timehist_exit_event()
762 KWORK_TRACE_ENTRY, evsel, sample, in timehist_exit_event()
765 ret = -1; in timehist_exit_event()
770 work->nr_atoms++; in timehist_exit_event()
771 timehist_print_event(kwork, work, atom, sample, &al); in timehist_exit_event()
783 struct perf_sample *sample, in process_irq_handler_entry_event() argument
788 if (kwork->tp_handler->entry_event) in process_irq_handler_entry_event()
789 return kwork->tp_handler->entry_event(kwork, &kwork_irq, in process_irq_handler_entry_event()
790 evsel, sample, machine); in process_irq_handler_entry_event()
796 struct perf_sample *sample, in process_irq_handler_exit_event() argument
801 if (kwork->tp_handler->exit_event) in process_irq_handler_exit_event()
802 return kwork->tp_handler->exit_event(kwork, &kwork_irq, in process_irq_handler_exit_event()
803 evsel, sample, machine); in process_irq_handler_exit_event()
817 return -1; in irq_class_init()
820 class->work_root = RB_ROOT_CACHED; in irq_class_init()
827 struct perf_sample *sample, in irq_work_init() argument
830 work->class = class; in irq_work_init()
831 work->cpu = sample->cpu; in irq_work_init()
832 work->id = evsel__intval(evsel, sample, "irq"); in irq_work_init()
833 work->name = evsel__strval(evsel, sample, "name"); in irq_work_init()
838 snprintf(buf, len, "%s:%" PRIu64 "", work->name, work->id); in irq_work_name()
854 struct perf_sample *sample, in process_softirq_raise_event() argument
859 if (kwork->tp_handler->raise_event) in process_softirq_raise_event()
860 return kwork->tp_handler->raise_event(kwork, &kwork_softirq, in process_softirq_raise_event()
861 evsel, sample, machine); in process_softirq_raise_event()
868 struct perf_sample *sample, in process_softirq_entry_event() argument
873 if (kwork->tp_handler->entry_event) in process_softirq_entry_event()
874 return kwork->tp_handler->entry_event(kwork, &kwork_softirq, in process_softirq_entry_event()
875 evsel, sample, machine); in process_softirq_entry_event()
882 struct perf_sample *sample, in process_softirq_exit_event() argument
887 if (kwork->tp_handler->exit_event) in process_softirq_exit_event()
888 return kwork->tp_handler->exit_event(kwork, &kwork_softirq, in process_softirq_exit_event()
889 evsel, sample, machine); in process_softirq_exit_event()
906 return -1; in softirq_class_init()
909 class->work_root = RB_ROOT_CACHED; in softirq_class_init()
918 struct tep_print_arg *args = evsel->tp_format->print_fmt.args; in evsel__softirq_name()
920 if ((args == NULL) || (args->next == NULL)) in evsel__softirq_name()
923 /* skip softirq field: "REC->vec" */ in evsel__softirq_name()
924 for (sym = args->next->symbol.symbols; sym != NULL; sym = sym->next) { in evsel__softirq_name()
925 if ((eval_flag(sym->value) == (unsigned long long)num) && in evsel__softirq_name()
926 (strlen(sym->str) != 0)) { in evsel__softirq_name()
935 name = strdup(sym->str); in evsel__softirq_name()
946 struct perf_sample *sample, in softirq_work_init() argument
949 u64 num = evsel__intval(evsel, sample, "vec"); in softirq_work_init()
951 work->id = num; in softirq_work_init()
952 work->class = class; in softirq_work_init()
953 work->cpu = sample->cpu; in softirq_work_init()
954 work->name = evsel__softirq_name(evsel, num); in softirq_work_init()
959 snprintf(buf, len, "(s)%s:%" PRIu64 "", work->name, work->id); in softirq_work_name()
975 struct perf_sample *sample, in process_workqueue_activate_work_event() argument
980 if (kwork->tp_handler->raise_event) in process_workqueue_activate_work_event()
981 return kwork->tp_handler->raise_event(kwork, &kwork_workqueue, in process_workqueue_activate_work_event()
982 evsel, sample, machine); in process_workqueue_activate_work_event()
989 struct perf_sample *sample, in process_workqueue_execute_start_event() argument
994 if (kwork->tp_handler->entry_event) in process_workqueue_execute_start_event()
995 return kwork->tp_handler->entry_event(kwork, &kwork_workqueue, in process_workqueue_execute_start_event()
996 evsel, sample, machine); in process_workqueue_execute_start_event()
1003 struct perf_sample *sample, in process_workqueue_execute_end_event() argument
1008 if (kwork->tp_handler->exit_event) in process_workqueue_execute_end_event()
1009 return kwork->tp_handler->exit_event(kwork, &kwork_workqueue, in process_workqueue_execute_end_event()
1010 evsel, sample, machine); in process_workqueue_execute_end_event()
1027 return -1; in workqueue_class_init()
1030 class->work_root = RB_ROOT_CACHED; in workqueue_class_init()
1037 struct perf_sample *sample, in workqueue_work_init() argument
1042 sample, "function"); in workqueue_work_init()
1044 work->class = class; in workqueue_work_init()
1045 work->cpu = sample->cpu; in workqueue_work_init()
1046 work->id = evsel__intval(evsel, sample, "work"); in workqueue_work_init()
1047 work->name = function_addr == 0 ? NULL : in workqueue_work_init()
1053 if (work->name != NULL) in workqueue_work_name()
1054 snprintf(buf, len, "(w)%s", work->name); in workqueue_work_name()
1056 snprintf(buf, len, "(w)0x%" PRIx64, work->id); in workqueue_work_name()
1092 if (work->class && work->class->work_name) { in report_print_work()
1093 work->class->work_name(work, kwork_name, in report_print_work()
1095 ret += printf(" %-*s |", PRINT_KWORK_NAME_WIDTH, kwork_name); in report_print_work()
1097 ret += printf(" %-*s |", PRINT_KWORK_NAME_WIDTH, ""); in report_print_work()
1103 ret += printf(" %0*d |", PRINT_CPU_WIDTH, work->cpu); in report_print_work()
1108 if (kwork->report == KWORK_REPORT_RUNTIME) { in report_print_work()
1111 (double)work->total_runtime / NSEC_PER_MSEC); in report_print_work()
1112 } else if (kwork->report == KWORK_REPORT_LATENCY) { // avg delay in report_print_work()
1115 (double)work->total_latency / in report_print_work()
1116 work->nr_atoms / NSEC_PER_MSEC); in report_print_work()
1122 ret += printf(" %*" PRIu64 " |", PRINT_COUNT_WIDTH, work->nr_atoms); in report_print_work()
1127 if (kwork->report == KWORK_REPORT_RUNTIME) { in report_print_work()
1128 timestamp__scnprintf_usec(work->max_runtime_start, in report_print_work()
1131 timestamp__scnprintf_usec(work->max_runtime_end, in report_print_work()
1136 (double)work->max_runtime / NSEC_PER_MSEC, in report_print_work()
1143 else if (kwork->report == KWORK_REPORT_LATENCY) { in report_print_work()
1144 timestamp__scnprintf_usec(work->max_latency_start, in report_print_work()
1147 timestamp__scnprintf_usec(work->max_latency_end, in report_print_work()
1152 (double)work->max_latency / NSEC_PER_MSEC, in report_print_work()
1166 ret = printf(" %-*s | %-*s |", in report_print_header()
1170 if (kwork->report == KWORK_REPORT_RUNTIME) { in report_print_header()
1171 ret += printf(" %-*s |", in report_print_header()
1173 } else if (kwork->report == KWORK_REPORT_LATENCY) { in report_print_header()
1174 ret += printf(" %-*s |", in report_print_header()
1178 ret += printf(" %-*s |", PRINT_COUNT_WIDTH, "Count"); in report_print_header()
1180 if (kwork->report == KWORK_REPORT_RUNTIME) { in report_print_header()
1181 ret += printf(" %-*s | %-*s | %-*s |", in report_print_header()
1185 } else if (kwork->report == KWORK_REPORT_LATENCY) { in report_print_header()
1186 ret += printf(" %-*s | %-*s | %-*s |", in report_print_header()
1202 printf(" %-*s %-*s %-*s %-*s %-*s %-*s\n", in timehist_print_header()
1213 printf(" %-*s %-*s %-*s %-*s %-*s %-*s\n", in timehist_print_header()
1235 u64 time = kwork->timeend - kwork->timestart; in print_summary() local
1237 printf(" Total count : %9" PRIu64 "\n", kwork->all_count); in print_summary()
1239 (double)kwork->all_runtime / NSEC_PER_MSEC, in print_summary()
1240 time == 0 ? 0 : (double)kwork->all_runtime / time); in print_summary()
1241 printf(" Total time span (msec) : %9.3f\n", in print_summary()
1242 (double)time / NSEC_PER_MSEC); in print_summary()
1265 if ((kwork->nr_skipped_events[KWORK_TRACE_MAX] != 0) && in print_skipped_events()
1266 (kwork->nr_events != 0)) { in print_skipped_events()
1268 (double)kwork->nr_skipped_events[KWORK_TRACE_MAX] / in print_skipped_events()
1269 (double)kwork->nr_events * 100.0, in print_skipped_events()
1270 kwork->nr_skipped_events[KWORK_TRACE_MAX]); in print_skipped_events()
1274 kwork->nr_skipped_events[i], in print_skipped_events()
1276 (i == KWORK_TRACE_MAX - 1) ? ")\n" : ", "); in print_skipped_events()
1282 nr_list_entry(&kwork->atom_page_list)); in print_skipped_events()
1287 if ((kwork->nr_lost_events != 0) && (kwork->nr_events != 0)) { in print_bad_events()
1289 (double)kwork->nr_lost_events / in print_bad_events()
1290 (double)kwork->nr_events * 100.0, in print_bad_events()
1291 kwork->nr_lost_events, kwork->nr_events, in print_bad_events()
1292 kwork->nr_lost_chunks); in print_bad_events()
1300 struct rb_root_cached *root = &class->work_root; in work_sort()
1302 pr_debug("Sorting %s ...\n", class->name); in work_sort()
1310 work_insert(&kwork->sorted_work_root, in work_sort()
1311 data, &kwork->sort_list); in work_sort()
1319 list_for_each_entry(class, &kwork->class_list, list) in perf_kwork__sort()
1344 switch (kwork->report) { in perf_kwork__check_config()
1346 kwork->tp_handler = &report_ops; in perf_kwork__check_config()
1349 kwork->tp_handler = &latency_ops; in perf_kwork__check_config()
1352 kwork->tp_handler = &timehist_ops; in perf_kwork__check_config()
1355 pr_debug("Invalid report type %d\n", kwork->report); in perf_kwork__check_config()
1356 return -1; in perf_kwork__check_config()
1359 list_for_each_entry(class, &kwork->class_list, list) in perf_kwork__check_config()
1360 if ((class->class_init != NULL) && in perf_kwork__check_config()
1361 (class->class_init(class, session) != 0)) in perf_kwork__check_config()
1362 return -1; in perf_kwork__check_config()
1364 if (kwork->cpu_list != NULL) { in perf_kwork__check_config()
1366 kwork->cpu_list, in perf_kwork__check_config()
1367 kwork->cpu_bitmap); in perf_kwork__check_config()
1370 return -1; in perf_kwork__check_config()
1374 if (kwork->time_str != NULL) { in perf_kwork__check_config()
1375 ret = perf_time__parse_str(&kwork->ptime, kwork->time_str); in perf_kwork__check_config()
1377 pr_err("Invalid time span\n"); in perf_kwork__check_config()
1378 return -1; in perf_kwork__check_config()
1382 list_for_each_entry(evsel, &session->evlist->core.entries, core.node) { in perf_kwork__check_config()
1383 if (kwork->show_callchain && !evsel__has_callchain(evsel)) { in perf_kwork__check_config()
1385 kwork->show_callchain = 0; in perf_kwork__check_config()
1395 int ret = -1; in perf_kwork__read_events()
1401 .force = kwork->force, in perf_kwork__read_events()
1404 session = perf_session__new(&data, &kwork->tool); in perf_kwork__read_events()
1410 symbol__init(&session->header.env); in perf_kwork__read_events()
1415 if (session->tevent.pevent && in perf_kwork__read_events()
1416 tep_set_function_resolver(session->tevent.pevent, in perf_kwork__read_events()
1418 &session->machines.host) < 0) { in perf_kwork__read_events()
1423 if (kwork->report == KWORK_REPORT_TIMEHIST) in perf_kwork__read_events()
1432 kwork->nr_events = session->evlist->stats.nr_events[0]; in perf_kwork__read_events()
1433 kwork->nr_lost_events = session->evlist->stats.total_lost; in perf_kwork__read_events()
1434 kwork->nr_lost_chunks = session->evlist->stats.nr_events[PERF_RECORD_LOST]; in perf_kwork__read_events()
1448 count = nr_list_entry(&work->atom_list[i]); in process_skipped_events()
1449 kwork->nr_skipped_events[i] += count; in process_skipped_events()
1450 kwork->nr_skipped_events[KWORK_TRACE_MAX] += count; in process_skipped_events()
1464 work_insert(&class->work_root, work, &kwork->cmp_id); in perf_kwork_add_work()
1486 return -1; in perf_kwork__report_bpf()
1512 if (kwork->use_bpf) in perf_kwork__report()
1518 return -1; in perf_kwork__report()
1525 next = rb_first_cached(&kwork->sorted_work_root); in perf_kwork__report()
1530 if (work->nr_atoms != 0) { in perf_kwork__report()
1532 if (kwork->summary) { in perf_kwork__report()
1533 kwork->all_runtime += work->total_runtime; in perf_kwork__report()
1534 kwork->all_count += work->nr_atoms; in perf_kwork__report()
1541 if (kwork->summary) { in perf_kwork__report()
1555 struct perf_sample *sample,
1560 struct perf_sample *sample, in perf_kwork__process_tracepoint_sample() argument
1566 if (evsel->handler != NULL) { in perf_kwork__process_tracepoint_sample()
1567 tracepoint_handler f = evsel->handler; in perf_kwork__process_tracepoint_sample()
1569 err = f(tool, evsel, sample, machine); in perf_kwork__process_tracepoint_sample()
1580 kwork->tool.comm = perf_event__process_comm; in perf_kwork__timehist()
1581 kwork->tool.exit = perf_event__process_exit; in perf_kwork__timehist()
1582 kwork->tool.fork = perf_event__process_fork; in perf_kwork__timehist()
1583 kwork->tool.attr = perf_event__process_attr; in perf_kwork__timehist()
1584 kwork->tool.tracing_data = perf_event__process_tracing_data; in perf_kwork__timehist()
1585 kwork->tool.build_id = perf_event__process_build_id; in perf_kwork__timehist()
1586 kwork->tool.ordered_events = true; in perf_kwork__timehist()
1587 kwork->tool.ordering_requires_timestamps = true; in perf_kwork__timehist()
1588 symbol_conf.use_callchain = kwork->show_callchain; in perf_kwork__timehist()
1592 return -1; in perf_kwork__timehist()
1608 if (kwork->event_list_str == NULL) in setup_event_list()
1611 str = strdup(kwork->event_list_str); in setup_event_list()
1616 if (strcmp(tok, class->name) == 0) { in setup_event_list()
1617 list_add_tail(&class->list, &kwork->class_list); in setup_event_list()
1623 "Unknown --event key: `%s'", tok); in setup_event_list()
1632 if (list_empty(&kwork->class_list)) { in setup_event_list()
1634 list_add_tail(&kwork_class_supported_list[i]->list, in setup_event_list()
1635 &kwork->class_list); in setup_event_list()
1640 list_for_each_entry(class, &kwork->class_list, list) in setup_event_list()
1641 pr_debug(" %s", class->name); in setup_event_list()
1654 "-a", in perf_kwork__record()
1655 "-R", in perf_kwork__record()
1656 "-m", "1024", in perf_kwork__record()
1657 "-c", "1", in perf_kwork__record()
1660 rec_argc = ARRAY_SIZE(record_args) + argc - 1; in perf_kwork__record()
1662 list_for_each_entry(class, &kwork->class_list, list) in perf_kwork__record()
1663 rec_argc += 2 * class->nr_tracepoints; in perf_kwork__record()
1667 return -ENOMEM; in perf_kwork__record()
1672 list_for_each_entry(class, &kwork->class_list, list) { in perf_kwork__record()
1673 for (j = 0; j < class->nr_tracepoints; j++) { in perf_kwork__record()
1674 rec_argv[i++] = strdup("-e"); in perf_kwork__record()
1675 rec_argv[i++] = strdup(class->tp_handlers[j].name); in perf_kwork__record()
1699 .sample = perf_kwork__process_tracepoint_sample, in cmd_kwork()
1730 OPT_BOOLEAN('D', "dump-raw-trace", &dump_trace, in cmd_kwork()
1744 OPT_STRING(0, "time", &kwork.time_str, "str", in cmd_kwork()
1745 "Time span for analysis (start,stop)"), in cmd_kwork()
1748 OPT_BOOLEAN('S', "with-summary", &kwork.summary, in cmd_kwork()
1751 OPT_BOOLEAN('b', "use-bpf", &kwork.use_bpf, in cmd_kwork()
1763 OPT_STRING(0, "time", &kwork.time_str, "str", in cmd_kwork()
1764 "Time span for analysis (start,stop)"), in cmd_kwork()
1768 OPT_BOOLEAN('b', "use-bpf", &kwork.use_bpf, in cmd_kwork()
1778 OPT_BOOLEAN('g', "call-graph", &kwork.show_callchain, in cmd_kwork()
1780 OPT_UINTEGER(0, "max-stack", &kwork.max_stack, in cmd_kwork()
1784 OPT_STRING(0, "time", &kwork.time_str, "str", in cmd_kwork()
1785 "Time span for analysis (start,stop)"), in cmd_kwork()