tools/sched_ext: fix getopt not re-parsed on restart
authorDavid Carlier <devnexen@gmail.com>
Wed, 18 Feb 2026 19:22:35 +0000 (19:22 +0000)
committerTejun Heo <tj@kernel.org>
Sat, 21 Feb 2026 03:17:38 +0000 (17:17 -1000)
After goto restart, optind retains its advanced position from the
previous getopt loop, causing getopt() to immediately return -1.
This silently drops all command-line options on the restarted skeleton.

Reset optind to 1 at the restart label so options are re-parsed.

Affected schedulers: scx_simple, scx_central, scx_flatcg, scx_pair,
scx_sdt, scx_cpu0.

Signed-off-by: David Carlier <devnexen@gmail.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
tools/sched_ext/scx_central.c
tools/sched_ext/scx_cpu0.c
tools/sched_ext/scx_flatcg.c
tools/sched_ext/scx_pair.c
tools/sched_ext/scx_sdt.c
tools/sched_ext/scx_simple.c

index 39f21b0..2a805f1 100644 (file)
@@ -56,6 +56,7 @@ int main(int argc, char **argv)
        signal(SIGINT, sigint_handler);
        signal(SIGTERM, sigint_handler);
 restart:
+       optind = 1;
        skel = SCX_OPS_OPEN(central_ops, scx_central);
 
        skel->rodata->central_cpu = 0;
index 1e4fa4a..a6fba99 100644 (file)
@@ -69,6 +69,7 @@ int main(int argc, char **argv)
        signal(SIGINT, sigint_handler);
        signal(SIGTERM, sigint_handler);
 restart:
+       optind = 1;
        skel = SCX_OPS_OPEN(cpu0_ops, scx_cpu0);
 
        skel->rodata->nr_cpus = libbpf_num_possible_cpus();
index a844650..d865c38 100644 (file)
@@ -141,6 +141,7 @@ int main(int argc, char **argv)
        signal(SIGINT, sigint_handler);
        signal(SIGTERM, sigint_handler);
 restart:
+       optind = 1;
        skel = SCX_OPS_OPEN(flatcg_ops, scx_flatcg);
 
        skel->rodata->nr_cpus = libbpf_num_possible_cpus();
index 2a82d8a..2e50939 100644 (file)
@@ -53,6 +53,7 @@ int main(int argc, char **argv)
        signal(SIGINT, sigint_handler);
        signal(SIGTERM, sigint_handler);
 restart:
+       optind = 1;
        skel = SCX_OPS_OPEN(pair_ops, scx_pair);
 
        skel->rodata->nr_cpu_ids = libbpf_num_possible_cpus();
index b036336..d8ca9aa 100644 (file)
@@ -51,6 +51,7 @@ int main(int argc, char **argv)
        signal(SIGINT, sigint_handler);
        signal(SIGTERM, sigint_handler);
 restart:
+       optind = 1;
        skel = SCX_OPS_OPEN(sdt_ops, scx_sdt);
 
        while ((opt = getopt(argc, argv, "fvh")) != -1) {
index 06d4b13..c3b4861 100644 (file)
@@ -71,6 +71,7 @@ int main(int argc, char **argv)
        signal(SIGINT, sigint_handler);
        signal(SIGTERM, sigint_handler);
 restart:
+       optind = 1;
        skel = SCX_OPS_OPEN(simple_ops, scx_simple);
 
        while ((opt = getopt(argc, argv, "fvh")) != -1) {