xref: /openbmc/linux/tools/tracing/rtla/src/timerlat.c (revision 4c687437)
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