hc
2024-02-20 102a0743326a03cd1a1202ceda21e175b7d3575c
kernel/tools/perf/builtin-lock.c
....@@ -4,14 +4,13 @@
44 #include "builtin.h"
55 #include "perf.h"
66
7
-#include "util/evlist.h"
7
+#include "util/evlist.h" // for struct evsel_str_handler
88 #include "util/evsel.h"
9
-#include "util/util.h"
10
-#include "util/cache.h"
119 #include "util/symbol.h"
1210 #include "util/thread.h"
1311 #include "util/header.h"
1412
13
+#include <subcmd/pager.h>
1514 #include <subcmd/parse-options.h>
1615 #include "util/trace-event.h"
1716
....@@ -30,6 +29,8 @@
3029 #include <linux/list.h>
3130 #include <linux/hash.h>
3231 #include <linux/kernel.h>
32
+#include <linux/zalloc.h>
33
+#include <linux/err.h>
3334
3435 static struct perf_session *session;
3536
....@@ -47,7 +48,7 @@
4748 struct rb_node rb; /* used for sorting */
4849
4950 /*
50
- * FIXME: perf_evsel__intval() returns u64,
51
+ * FIXME: evsel__intval() returns u64,
5152 * so address of lockdep_map should be dealed as 64bit.
5253 * Is there more better solution?
5354 */
....@@ -347,16 +348,16 @@
347348 }
348349
349350 struct trace_lock_handler {
350
- int (*acquire_event)(struct perf_evsel *evsel,
351
+ int (*acquire_event)(struct evsel *evsel,
351352 struct perf_sample *sample);
352353
353
- int (*acquired_event)(struct perf_evsel *evsel,
354
+ int (*acquired_event)(struct evsel *evsel,
354355 struct perf_sample *sample);
355356
356
- int (*contended_event)(struct perf_evsel *evsel,
357
+ int (*contended_event)(struct evsel *evsel,
357358 struct perf_sample *sample);
358359
359
- int (*release_event)(struct perf_evsel *evsel,
360
+ int (*release_event)(struct evsel *evsel,
360361 struct perf_sample *sample);
361362 };
362363
....@@ -396,16 +397,16 @@
396397 READ_LOCK = 2,
397398 };
398399
399
-static int report_lock_acquire_event(struct perf_evsel *evsel,
400
+static int report_lock_acquire_event(struct evsel *evsel,
400401 struct perf_sample *sample)
401402 {
402403 void *addr;
403404 struct lock_stat *ls;
404405 struct thread_stat *ts;
405406 struct lock_seq_stat *seq;
406
- const char *name = perf_evsel__strval(evsel, sample, "name");
407
- u64 tmp = perf_evsel__intval(evsel, sample, "lockdep_addr");
408
- int flag = perf_evsel__intval(evsel, sample, "flag");
407
+ const char *name = evsel__strval(evsel, sample, "name");
408
+ u64 tmp = evsel__intval(evsel, sample, "lockdep_addr");
409
+ int flag = evsel__intval(evsel, sample, "flags");
409410
410411 memcpy(&addr, &tmp, sizeof(void *));
411412
....@@ -454,7 +455,7 @@
454455 /* broken lock sequence, discard it */
455456 ls->discard = 1;
456457 bad_hist[BROKEN_ACQUIRE]++;
457
- list_del(&seq->list);
458
+ list_del_init(&seq->list);
458459 free(seq);
459460 goto end;
460461 default:
....@@ -468,7 +469,7 @@
468469 return 0;
469470 }
470471
471
-static int report_lock_acquired_event(struct perf_evsel *evsel,
472
+static int report_lock_acquired_event(struct evsel *evsel,
472473 struct perf_sample *sample)
473474 {
474475 void *addr;
....@@ -476,8 +477,8 @@
476477 struct thread_stat *ts;
477478 struct lock_seq_stat *seq;
478479 u64 contended_term;
479
- const char *name = perf_evsel__strval(evsel, sample, "name");
480
- u64 tmp = perf_evsel__intval(evsel, sample, "lockdep_addr");
480
+ const char *name = evsel__strval(evsel, sample, "name");
481
+ u64 tmp = evsel__intval(evsel, sample, "lockdep_addr");
481482
482483 memcpy(&addr, &tmp, sizeof(void *));
483484
....@@ -515,7 +516,7 @@
515516 /* broken lock sequence, discard it */
516517 ls->discard = 1;
517518 bad_hist[BROKEN_ACQUIRED]++;
518
- list_del(&seq->list);
519
+ list_del_init(&seq->list);
519520 free(seq);
520521 goto end;
521522 default:
....@@ -531,15 +532,15 @@
531532 return 0;
532533 }
533534
534
-static int report_lock_contended_event(struct perf_evsel *evsel,
535
+static int report_lock_contended_event(struct evsel *evsel,
535536 struct perf_sample *sample)
536537 {
537538 void *addr;
538539 struct lock_stat *ls;
539540 struct thread_stat *ts;
540541 struct lock_seq_stat *seq;
541
- const char *name = perf_evsel__strval(evsel, sample, "name");
542
- u64 tmp = perf_evsel__intval(evsel, sample, "lockdep_addr");
542
+ const char *name = evsel__strval(evsel, sample, "name");
543
+ u64 tmp = evsel__intval(evsel, sample, "lockdep_addr");
543544
544545 memcpy(&addr, &tmp, sizeof(void *));
545546
....@@ -570,7 +571,7 @@
570571 /* broken lock sequence, discard it */
571572 ls->discard = 1;
572573 bad_hist[BROKEN_CONTENDED]++;
573
- list_del(&seq->list);
574
+ list_del_init(&seq->list);
574575 free(seq);
575576 goto end;
576577 default:
....@@ -586,15 +587,15 @@
586587 return 0;
587588 }
588589
589
-static int report_lock_release_event(struct perf_evsel *evsel,
590
+static int report_lock_release_event(struct evsel *evsel,
590591 struct perf_sample *sample)
591592 {
592593 void *addr;
593594 struct lock_stat *ls;
594595 struct thread_stat *ts;
595596 struct lock_seq_stat *seq;
596
- const char *name = perf_evsel__strval(evsel, sample, "name");
597
- u64 tmp = perf_evsel__intval(evsel, sample, "lockdep_addr");
597
+ const char *name = evsel__strval(evsel, sample, "name");
598
+ u64 tmp = evsel__intval(evsel, sample, "lockdep_addr");
598599
599600 memcpy(&addr, &tmp, sizeof(void *));
600601
....@@ -639,7 +640,7 @@
639640
640641 ls->nr_release++;
641642 free_seq:
642
- list_del(&seq->list);
643
+ list_del_init(&seq->list);
643644 free(seq);
644645 end:
645646 return 0;
....@@ -656,32 +657,28 @@
656657
657658 static struct trace_lock_handler *trace_handler;
658659
659
-static int perf_evsel__process_lock_acquire(struct perf_evsel *evsel,
660
- struct perf_sample *sample)
660
+static int evsel__process_lock_acquire(struct evsel *evsel, struct perf_sample *sample)
661661 {
662662 if (trace_handler->acquire_event)
663663 return trace_handler->acquire_event(evsel, sample);
664664 return 0;
665665 }
666666
667
-static int perf_evsel__process_lock_acquired(struct perf_evsel *evsel,
668
- struct perf_sample *sample)
667
+static int evsel__process_lock_acquired(struct evsel *evsel, struct perf_sample *sample)
669668 {
670669 if (trace_handler->acquired_event)
671670 return trace_handler->acquired_event(evsel, sample);
672671 return 0;
673672 }
674673
675
-static int perf_evsel__process_lock_contended(struct perf_evsel *evsel,
676
- struct perf_sample *sample)
674
+static int evsel__process_lock_contended(struct evsel *evsel, struct perf_sample *sample)
677675 {
678676 if (trace_handler->contended_event)
679677 return trace_handler->contended_event(evsel, sample);
680678 return 0;
681679 }
682680
683
-static int perf_evsel__process_lock_release(struct perf_evsel *evsel,
684
- struct perf_sample *sample)
681
+static int evsel__process_lock_release(struct evsel *evsel, struct perf_sample *sample)
685682 {
686683 if (trace_handler->release_event)
687684 return trace_handler->release_event(evsel, sample);
....@@ -774,7 +771,7 @@
774771 pr_info("%10d: %s\n", st->tid, thread__comm_str(t));
775772 node = rb_next(node);
776773 thread__put(t);
777
- };
774
+ }
778775 }
779776
780777 static void dump_map(void)
....@@ -806,13 +803,13 @@
806803 return rc;
807804 }
808805
809
-typedef int (*tracepoint_handler)(struct perf_evsel *evsel,
806
+typedef int (*tracepoint_handler)(struct evsel *evsel,
810807 struct perf_sample *sample);
811808
812809 static int process_sample_event(struct perf_tool *tool __maybe_unused,
813810 union perf_event *event,
814811 struct perf_sample *sample,
815
- struct perf_evsel *evsel,
812
+ struct evsel *evsel,
816813 struct machine *machine)
817814 {
818815 int err = 0;
....@@ -847,11 +844,11 @@
847844 }
848845 }
849846
850
-static const struct perf_evsel_str_handler lock_tracepoints[] = {
851
- { "lock:lock_acquire", perf_evsel__process_lock_acquire, }, /* CONFIG_LOCKDEP */
852
- { "lock:lock_acquired", perf_evsel__process_lock_acquired, }, /* CONFIG_LOCKDEP, CONFIG_LOCK_STAT */
853
- { "lock:lock_contended", perf_evsel__process_lock_contended, }, /* CONFIG_LOCKDEP, CONFIG_LOCK_STAT */
854
- { "lock:lock_release", perf_evsel__process_lock_release, }, /* CONFIG_LOCKDEP */
847
+static const struct evsel_str_handler lock_tracepoints[] = {
848
+ { "lock:lock_acquire", evsel__process_lock_acquire, }, /* CONFIG_LOCKDEP */
849
+ { "lock:lock_acquired", evsel__process_lock_acquired, }, /* CONFIG_LOCKDEP, CONFIG_LOCK_STAT */
850
+ { "lock:lock_contended", evsel__process_lock_contended, }, /* CONFIG_LOCKDEP, CONFIG_LOCK_STAT */
851
+ { "lock:lock_release", evsel__process_lock_release, }, /* CONFIG_LOCKDEP */
855852 };
856853
857854 static bool force;
....@@ -866,17 +863,15 @@
866863 .ordered_events = true,
867864 };
868865 struct perf_data data = {
869
- .file = {
870
- .path = input_name,
871
- },
872
- .mode = PERF_DATA_MODE_READ,
873
- .force = force,
866
+ .path = input_name,
867
+ .mode = PERF_DATA_MODE_READ,
868
+ .force = force,
874869 };
875870
876871 session = perf_session__new(&data, false, &eops);
877
- if (!session) {
872
+ if (IS_ERR(session)) {
878873 pr_err("Initializing perf session failed\n");
879
- return -1;
874
+ return PTR_ERR(session);
880875 }
881876
882877 symbol__init(&session->header.env);