aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf/builtin-sched.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/perf/builtin-sched.c')
-rw-r--r--tools/perf/builtin-sched.c41
1 files changed, 18 insertions, 23 deletions
diff --git a/tools/perf/builtin-sched.c b/tools/perf/builtin-sched.c
index 4f5a03e43444..f67bce2a83b4 100644
--- a/tools/perf/builtin-sched.c
+++ b/tools/perf/builtin-sched.c
@@ -22,7 +22,7 @@
22static char const *input_name = "perf.data"; 22static char const *input_name = "perf.data";
23 23
24static char default_sort_order[] = "avg, max, switch, runtime"; 24static char default_sort_order[] = "avg, max, switch, runtime";
25static char *sort_order = default_sort_order; 25static const char *sort_order = default_sort_order;
26 26
27static int profile_cpu = -1; 27static int profile_cpu = -1;
28 28
@@ -68,10 +68,10 @@ enum sched_event_type {
68 68
69struct sched_atom { 69struct sched_atom {
70 enum sched_event_type type; 70 enum sched_event_type type;
71 int specific_wait;
71 u64 timestamp; 72 u64 timestamp;
72 u64 duration; 73 u64 duration;
73 unsigned long nr; 74 unsigned long nr;
74 int specific_wait;
75 sem_t *wait_sem; 75 sem_t *wait_sem;
76 struct task_desc *wakee; 76 struct task_desc *wakee;
77}; 77};
@@ -105,7 +105,7 @@ static u64 sum_runtime;
105static u64 sum_fluct; 105static u64 sum_fluct;
106static u64 run_avg; 106static u64 run_avg;
107 107
108static unsigned long replay_repeat = 10; 108static unsigned int replay_repeat = 10;
109static unsigned long nr_timestamps; 109static unsigned long nr_timestamps;
110static unsigned long nr_unordered_timestamps; 110static unsigned long nr_unordered_timestamps;
111static unsigned long nr_state_machine_bugs; 111static unsigned long nr_state_machine_bugs;
@@ -1641,30 +1641,26 @@ static int process_sample_event(event_t *event, struct perf_session *session)
1641 return 0; 1641 return 0;
1642} 1642}
1643 1643
1644static int process_lost_event(event_t *event __used,
1645 struct perf_session *session __used)
1646{
1647 nr_lost_chunks++;
1648 nr_lost_events += event->lost.lost;
1649
1650 return 0;
1651}
1652
1653static struct perf_event_ops event_ops = { 1644static struct perf_event_ops event_ops = {
1654 .sample = process_sample_event, 1645 .sample = process_sample_event,
1655 .comm = event__process_comm, 1646 .comm = event__process_comm,
1656 .lost = process_lost_event, 1647 .lost = event__process_lost,
1648 .ordered_samples = true,
1657}; 1649};
1658 1650
1659static int read_events(void) 1651static int read_events(void)
1660{ 1652{
1661 int err = -EINVAL; 1653 int err = -EINVAL;
1662 struct perf_session *session = perf_session__new(input_name, O_RDONLY, 0); 1654 struct perf_session *session = perf_session__new(input_name, O_RDONLY, 0, false);
1663 if (session == NULL) 1655 if (session == NULL)
1664 return -ENOMEM; 1656 return -ENOMEM;
1665 1657
1666 if (perf_session__has_traces(session, "record -R")) 1658 if (perf_session__has_traces(session, "record -R")) {
1667 err = perf_session__process_events(session, &event_ops); 1659 err = perf_session__process_events(session, &event_ops);
1660 nr_events = session->hists.stats.nr_events[0];
1661 nr_lost_events = session->hists.stats.total_lost;
1662 nr_lost_chunks = session->hists.stats.nr_events[PERF_RECORD_LOST];
1663 }
1668 1664
1669 perf_session__delete(session); 1665 perf_session__delete(session);
1670 return err; 1666 return err;
@@ -1790,7 +1786,7 @@ static const char * const sched_usage[] = {
1790static const struct option sched_options[] = { 1786static const struct option sched_options[] = {
1791 OPT_STRING('i', "input", &input_name, "file", 1787 OPT_STRING('i', "input", &input_name, "file",
1792 "input file name"), 1788 "input file name"),
1793 OPT_BOOLEAN('v', "verbose", &verbose, 1789 OPT_INCR('v', "verbose", &verbose,
1794 "be more verbose (show symbol address, etc)"), 1790 "be more verbose (show symbol address, etc)"),
1795 OPT_BOOLEAN('D', "dump-raw-trace", &dump_trace, 1791 OPT_BOOLEAN('D', "dump-raw-trace", &dump_trace,
1796 "dump raw trace in ASCII"), 1792 "dump raw trace in ASCII"),
@@ -1805,7 +1801,7 @@ static const char * const latency_usage[] = {
1805static const struct option latency_options[] = { 1801static const struct option latency_options[] = {
1806 OPT_STRING('s', "sort", &sort_order, "key[,key2...]", 1802 OPT_STRING('s', "sort", &sort_order, "key[,key2...]",
1807 "sort by key(s): runtime, switch, avg, max"), 1803 "sort by key(s): runtime, switch, avg, max"),
1808 OPT_BOOLEAN('v', "verbose", &verbose, 1804 OPT_INCR('v', "verbose", &verbose,
1809 "be more verbose (show symbol address, etc)"), 1805 "be more verbose (show symbol address, etc)"),
1810 OPT_INTEGER('C', "CPU", &profile_cpu, 1806 OPT_INTEGER('C', "CPU", &profile_cpu,
1811 "CPU to profile on"), 1807 "CPU to profile on"),
@@ -1820,9 +1816,9 @@ static const char * const replay_usage[] = {
1820}; 1816};
1821 1817
1822static const struct option replay_options[] = { 1818static const struct option replay_options[] = {
1823 OPT_INTEGER('r', "repeat", &replay_repeat, 1819 OPT_UINTEGER('r', "repeat", &replay_repeat,
1824 "repeat the workload replay N times (-1: infinite)"), 1820 "repeat the workload replay N times (-1: infinite)"),
1825 OPT_BOOLEAN('v', "verbose", &verbose, 1821 OPT_INCR('v', "verbose", &verbose,
1826 "be more verbose (show symbol address, etc)"), 1822 "be more verbose (show symbol address, etc)"),
1827 OPT_BOOLEAN('D', "dump-raw-trace", &dump_trace, 1823 OPT_BOOLEAN('D', "dump-raw-trace", &dump_trace,
1828 "dump raw trace in ASCII"), 1824 "dump raw trace in ASCII"),
@@ -1850,7 +1846,6 @@ static const char *record_args[] = {
1850 "record", 1846 "record",
1851 "-a", 1847 "-a",
1852 "-R", 1848 "-R",
1853 "-M",
1854 "-f", 1849 "-f",
1855 "-m", "1024", 1850 "-m", "1024",
1856 "-c", "1", 1851 "-c", "1",