1a828cd18SDaniel Bristot de Oliveira // SPDX-License-Identifier: GPL-2.0
2a828cd18SDaniel Bristot de Oliveira /*
3a828cd18SDaniel Bristot de Oliveira * Copyright (C) 2021 Red Hat Inc, Daniel Bristot de Oliveira <bristot@kernel.org>
4a828cd18SDaniel Bristot de Oliveira */
5a828cd18SDaniel Bristot de Oliveira #include <sys/types.h>
6a828cd18SDaniel Bristot de Oliveira #include <sys/stat.h>
7a828cd18SDaniel Bristot de Oliveira #include <pthread.h>
8a828cd18SDaniel Bristot de Oliveira #include <stdlib.h>
9a828cd18SDaniel Bristot de Oliveira #include <string.h>
10a828cd18SDaniel Bristot de Oliveira #include <unistd.h>
11a828cd18SDaniel Bristot de Oliveira #include <errno.h>
12a828cd18SDaniel Bristot de Oliveira #include <fcntl.h>
13a828cd18SDaniel Bristot de Oliveira #include <stdio.h>
14a828cd18SDaniel Bristot de Oliveira
15a828cd18SDaniel Bristot de Oliveira #include "timerlat.h"
16a828cd18SDaniel Bristot de Oliveira
timerlat_usage(int err)17*4c687437SJohn Kacur static void timerlat_usage(int err)
18a828cd18SDaniel Bristot de Oliveira {
19a828cd18SDaniel Bristot de Oliveira int i;
20a828cd18SDaniel Bristot de Oliveira
21a828cd18SDaniel Bristot de Oliveira static const char * const msg[] = {
22a828cd18SDaniel Bristot de Oliveira "",
23a828cd18SDaniel Bristot de Oliveira "timerlat version " VERSION,
24a828cd18SDaniel Bristot de Oliveira "",
25a828cd18SDaniel Bristot de Oliveira " usage: [rtla] timerlat [MODE] ...",
26a828cd18SDaniel Bristot de Oliveira "",
27a828cd18SDaniel Bristot de Oliveira " modes:",
28a828cd18SDaniel Bristot de Oliveira " top - prints the summary from timerlat tracer",
291eeb6328SDaniel Bristot de Oliveira " hist - prints a histogram of timer latencies",
30a828cd18SDaniel Bristot de Oliveira "",
31a828cd18SDaniel Bristot de Oliveira "if no MODE is given, the top mode is called, passing the arguments",
32a828cd18SDaniel Bristot de Oliveira NULL,
33a828cd18SDaniel Bristot de Oliveira };
34a828cd18SDaniel Bristot de Oliveira
35a828cd18SDaniel Bristot de Oliveira for (i = 0; msg[i]; i++)
36a828cd18SDaniel Bristot de Oliveira fprintf(stderr, "%s\n", msg[i]);
37*4c687437SJohn Kacur exit(err);
38a828cd18SDaniel Bristot de Oliveira }
39a828cd18SDaniel Bristot de Oliveira
timerlat_main(int argc,char * argv[])40a828cd18SDaniel Bristot de Oliveira int timerlat_main(int argc, char *argv[])
41a828cd18SDaniel Bristot de Oliveira {
42a828cd18SDaniel Bristot de Oliveira if (argc == 0)
43a828cd18SDaniel Bristot de Oliveira goto usage;
44a828cd18SDaniel Bristot de Oliveira
45a828cd18SDaniel Bristot de Oliveira /*
46a828cd18SDaniel Bristot de Oliveira * if timerlat was called without any argument, run the
47a828cd18SDaniel Bristot de Oliveira * default cmdline.
48a828cd18SDaniel Bristot de Oliveira */
49a828cd18SDaniel Bristot de Oliveira if (argc == 1) {
50a828cd18SDaniel Bristot de Oliveira timerlat_top_main(argc, argv);
51a828cd18SDaniel Bristot de Oliveira exit(0);
52a828cd18SDaniel Bristot de Oliveira }
53a828cd18SDaniel Bristot de Oliveira
54a828cd18SDaniel Bristot de Oliveira if ((strcmp(argv[1], "-h") == 0) || (strcmp(argv[1], "--help") == 0)) {
55*4c687437SJohn Kacur timerlat_usage(0);
56a828cd18SDaniel Bristot de Oliveira } else if (strncmp(argv[1], "-", 1) == 0) {
57a828cd18SDaniel Bristot de Oliveira /* the user skipped the tool, call the default one */
58a828cd18SDaniel Bristot de Oliveira timerlat_top_main(argc, argv);
59a828cd18SDaniel Bristot de Oliveira exit(0);
60a828cd18SDaniel Bristot de Oliveira } else if (strcmp(argv[1], "top") == 0) {
61a828cd18SDaniel Bristot de Oliveira timerlat_top_main(argc-1, &argv[1]);
62a828cd18SDaniel Bristot de Oliveira exit(0);
631eeb6328SDaniel Bristot de Oliveira } else if (strcmp(argv[1], "hist") == 0) {
641eeb6328SDaniel Bristot de Oliveira timerlat_hist_main(argc-1, &argv[1]);
651eeb6328SDaniel Bristot de Oliveira exit(0);
66a828cd18SDaniel Bristot de Oliveira }
67a828cd18SDaniel Bristot de Oliveira
68a828cd18SDaniel Bristot de Oliveira usage:
69*4c687437SJohn Kacur timerlat_usage(1);
70a828cd18SDaniel Bristot de Oliveira exit(1);
71a828cd18SDaniel Bristot de Oliveira }
72