diff options
| author | Konstantin Belousov <kib@FreeBSD.org> | 2026-01-22 05:57:49 +0000 |
|---|---|---|
| committer | Konstantin Belousov <kib@FreeBSD.org> | 2026-01-29 18:11:55 +0000 |
| commit | ba8f429f42ecae1881d0face52df87ad1489af15 (patch) | |
| tree | ceb227c5455db32209fd54faaaf22aaed293900a | |
| parent | 8aa8289d991bc369b6739ce4c4bcd7d5234f48a2 (diff) | |
kern/sched_shim.c: Add sysctl kern.sched.available
Reports all compiled-in schedulers.
Reviewed by: olce
Tested by: pho
Sponsored by: The FreeBSD Foundation
MFC after: 1 week
Differential revision: https://reviews.freebsd.org/D54831
| -rw-r--r-- | sys/kern/sched_shim.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/sys/kern/sched_shim.c b/sys/kern/sched_shim.c index 96c824745815..f25b803bae82 100644 --- a/sys/kern/sched_shim.c +++ b/sys/kern/sched_shim.c @@ -14,6 +14,7 @@ #include <sys/lock.h> #include <sys/proc.h> #include <sys/runq.h> +#include <sys/sbuf.h> #include <sys/sched.h> #include <sys/sysctl.h> #include <machine/ifunc.h> @@ -166,3 +167,33 @@ SYSCTL_NODE(_kern, OID_AUTO, sched, CTLFLAG_RD | CTLFLAG_MPSAFE, 0, SYSCTL_STRING(_kern_sched, OID_AUTO, name, CTLFLAG_RD, sched_name, 0, "Scheduler name"); + +static int +sysctl_kern_sched_available(SYSCTL_HANDLER_ARGS) +{ + struct sched_selection *s, **ss; + struct sbuf *sb, sm; + int error; + bool first; + + sb = sbuf_new_for_sysctl(&sm, NULL, 0, req); + if (sb == NULL) + return (ENOMEM); + first = true; + SET_FOREACH(ss, sched_instance_set) { + s = *ss; + if (first) + first = false; + else + sbuf_cat(sb, ","); + sbuf_cat(sb, s->name); + } + error = sbuf_finish(sb); + sbuf_delete(sb); + return (error); +} + +SYSCTL_PROC(_kern_sched, OID_AUTO, available, + CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, + NULL, 0, sysctl_kern_sched_available, "A", + "List of available schedulers"); |
