// SPDX-License-Identifier: GPL-2.0 /* * Copyright (C) 2021 Red Hat Inc, Daniel Bristot de Oliveira <bristot@kernel.org> */ #include <getopt.h> #include <stdlib.h> #include <string.h> #include <stdio.h> #include "osnoise.h" #include "timerlat.h" /* * rtla_usage - print rtla usage */ static void rtla_usage(int err) { int i; static const char *msg[] = { "", "rtla version " VERSION, "", " usage: rtla COMMAND ...", "", " commands:", " osnoise - gives information about the operating system noise (osnoise)", " hwnoise - gives information about hardware-related noise", " timerlat - measures the timer irq and thread latency", "", NULL, }; for (i = 0; msg[i]; i++) fprintf(stderr, "%s\n", msg[i]); exit(err); } /* * run_command - try to run a rtla tool command * * It returns 0 if it fails. The tool's main will generally not * return as they should call exit(). */ int run_command(int argc, char **argv, int start_position) { if (strcmp(argv[start_position], "osnoise") == 0) { osnoise_main(argc-start_position, &argv[start_position]); goto ran; } else if (strcmp(argv[start_position], "hwnoise") == 0) { hwnoise_main(argc-start_position, &argv[start_position]); goto ran; } else if (strcmp(argv[start_position], "timerlat") == 0) { timerlat_main(argc-start_position, &argv[start_position]); goto ran; } return 0; ran: return 1; } int main(int argc, char *argv[]) { int retval; /* is it an alias? */ retval = run_command(argc, argv, 0); if (retval) exit(0); if (argc < 2) goto usage; if (strcmp(argv[1], "-h") == 0) { rtla_usage(0); } else if (strcmp(argv[1], "--help") == 0) { rtla_usage(0); } retval = run_command(argc, argv, 1); if (retval) exit(0); usage: rtla_usage(1); exit(1); }