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 17a828cd18SDaniel Bristot de Oliveira static void timerlat_usage(void) 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", 29*1eeb6328SDaniel 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]); 37a828cd18SDaniel Bristot de Oliveira exit(1); 38a828cd18SDaniel Bristot de Oliveira } 39a828cd18SDaniel Bristot de Oliveira 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)) { 55a828cd18SDaniel Bristot de Oliveira timerlat_usage(); 56a828cd18SDaniel Bristot de Oliveira exit(0); 57a828cd18SDaniel Bristot de Oliveira } else if (strncmp(argv[1], "-", 1) == 0) { 58a828cd18SDaniel Bristot de Oliveira /* the user skipped the tool, call the default one */ 59a828cd18SDaniel Bristot de Oliveira timerlat_top_main(argc, argv); 60a828cd18SDaniel Bristot de Oliveira exit(0); 61a828cd18SDaniel Bristot de Oliveira } else if (strcmp(argv[1], "top") == 0) { 62a828cd18SDaniel Bristot de Oliveira timerlat_top_main(argc-1, &argv[1]); 63a828cd18SDaniel Bristot de Oliveira exit(0); 64*1eeb6328SDaniel Bristot de Oliveira } else if (strcmp(argv[1], "hist") == 0) { 65*1eeb6328SDaniel Bristot de Oliveira timerlat_hist_main(argc-1, &argv[1]); 66*1eeb6328SDaniel Bristot de Oliveira exit(0); 67a828cd18SDaniel Bristot de Oliveira } 68a828cd18SDaniel Bristot de Oliveira 69a828cd18SDaniel Bristot de Oliveira usage: 70a828cd18SDaniel Bristot de Oliveira timerlat_usage(); 71a828cd18SDaniel Bristot de Oliveira exit(1); 72a828cd18SDaniel Bristot de Oliveira } 73