Use getopt_long to parse long version of the commands. Change the 'a/affinity' option to handle all cases including what '-c' did. We still keep '-c' silently supported to avoid breaking existing users. Signed-off-by: Daniel Wagner <dwagner@xxxxxxx> --- src/sched_deadline/cyclicdeadline.8 | 17 +++++------- src/sched_deadline/cyclicdeadline.c | 42 ++++++++++++++++++++--------- 2 files changed, 36 insertions(+), 23 deletions(-) diff --git a/src/sched_deadline/cyclicdeadline.8 b/src/sched_deadline/cyclicdeadline.8 index 6df7faf445f9..def42f77044a 100644 --- a/src/sched_deadline/cyclicdeadline.8 +++ b/src/sched_deadline/cyclicdeadline.8 @@ -17,7 +17,7 @@ cyclicdeadline \- This program is used to test the deadline scheduler (SCHED_DEA .PP .SH SYNOPSIS .B cyclicdeadline -.RI "[-ha] [-c CPUSET] [-D TIME] [-i INTV] [-s STEP] [-t NUM]" +.RI "[-a [CPUSET]] [-D TIME] [-h] [-i INTV] [-s STEP] [-t NUM]" .PP .SH DESCRIPTION .B cyclicdeadline @@ -25,26 +25,23 @@ is a cyclictest style program for testing the deadline scheduler .PP .SH OPTIONS .TP -.B \-a -Use all CPUs -.TP -.B \-c CPUSET +.B \-a \-\-affinity [CPUSET] Comma / hypen separated list of CPUs to run deadline tasks on .TP -.B \-D TIME +.B \-D \-\-duration TIME Specify a length for the test to run Append 'm', 'h', or 'd' to specify minutes, hours, or days .TP -.B \-h +.B \-h \-\-help Show this help menu .TP -.B \-i INTV +.B \-i \-\-interval INTV The shortest deadline for the tasks in us. (default 1000us) .TP -.B \-s STEP +.B \-s \-\-step STEP The amount to increase the deadline for each task in us. (default 500us) .TP -.B \-t NUM +.B \-t \-\-threads NUM The number of threads to run as deadline (default 1) .br .SH AUTHOR diff --git a/src/sched_deadline/cyclicdeadline.c b/src/sched_deadline/cyclicdeadline.c index 310880805553..5f5cdfa08f14 100644 --- a/src/sched_deadline/cyclicdeadline.c +++ b/src/sched_deadline/cyclicdeadline.c @@ -17,6 +17,7 @@ #include <ctype.h> #include <errno.h> #include <signal.h> +#include <getopt.h> #include <sys/syscall.h> #include <sys/types.h> @@ -635,18 +636,19 @@ static void usage(int error) printf("cyclicdeadline V %1.2f\n", VERSION); printf("Usage:\n" "cyclicdeadline <options>\n\n" - "-a Use all CPUs\n" - "-c CPUSET Comma/hyphen separated list of CPUs to run deadline\n" - " tasks on.\n" - "-D TIME Specify a length for the test run.\n" + "-a [CPUSET] --affinity Comma/hyphen separated list of CPUs to run deadline\n" + " tasks on. An empty CPUSET runs on all CPUs a deadline\n" + " task.\n" + " on CPU 4, and thread #5 on CPU 5.\n" + "-D TIME --duration Specify a length for the test run.\n" " Append 'm', 'h', or 'd' to specify minutes, hours or\n" " days\n" - "-h Show this help menu.\n" - "-i INTV The shortest deadline for the tasks in us\n" + "-h --help Show this help menu.\n" + "-i INTV --interval The shortest deadline for the tasks in us\n" " (default 1000us).\n" - "-s STEP The amount to increase the deadline for each task in us\n" + "-s STEP --step The amount to increase the deadline for each task in us\n" " (default 500us).\n" - "-t NUM The number of threads to run as deadline (default 1).\n" + "-t NUM --threads The number of threads to run as deadline (default 1).\n" ); exit(error); } @@ -1033,15 +1035,29 @@ int main (int argc, char **argv) exit(-1); } - while ((c = getopt(argc, argv, "+hac:i:s:t:D:")) >= 0) { + for (;;) { + static struct option options[] = { + { "affinity", optional_argument, NULL, 'a' }, + { "duration", required_argument, NULL, 'D' }, + { "help", no_argument, NULL, 'h' }, + { "interval", required_argument, NULL, 'i' }, + { "threads", required_argument, NULL, 't' }, + { NULL, 0, NULL, 0 }, + }; + c = getopt_long(argc, argv, "a::c:D:hi:t:", options, NULL); + if (c == -1) + break; switch (c) { case 'a': - all_cpus = 1; + case 'c': if (!nr_threads) nr_threads = cpu_count; - break; - case 'c': - setcpu = optarg; + if (optarg) + setcpu = optarg; + else if (optind < argc) + setcpu = argv[optind]; + else + all_cpus = 1; break; case 'i': interval = atoi(optarg); -- 2.28.0