From 19a2737148609f0b40ea31cf5cd0cb809b60722f Mon Sep 17 00:00:00 2001 From: Ophestra Date: Mon, 9 Mar 2026 18:33:49 +0900 Subject: container: sched policy string representation This also uses priority obtained via sched_get_priority_min, and improves bounds checking. Signed-off-by: Ophestra --- container/container.go | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) (limited to 'container/container.go') diff --git a/container/container.go b/container/container.go index 8b5ec01d..e7fd8cee 100644 --- a/container/container.go +++ b/container/container.go @@ -40,7 +40,7 @@ type ( AllowOrphan bool // Scheduling policy to set via sched_setscheduler(2). The zero value // skips this call. Supported policies are [SCHED_BATCH], [SCHED_IDLE]. - SchedPolicy int + SchedPolicy SchedPolicy // Cgroup fd, nil to disable. Cgroup *int // ExtraFiles passed through to initial process in the container, with @@ -373,12 +373,23 @@ func (p *Container) Start() error { // sched_setscheduler: thread-directed but acts on all processes // created from the calling thread - if p.SchedPolicy > 0 { + if p.SchedPolicy > 0 && p.SchedPolicy <= _SCHED_LAST { + var param schedParam + if priority, err := p.SchedPolicy.GetPriorityMin(); err != nil { + return &StartError{ + Fatal: true, + Step: "get minimum priority", + Err: err, + } + } else { + param.priority = priority + } + p.msg.Verbosef("setting scheduling policy %d", p.SchedPolicy) if err := schedSetscheduler( 0, // calling thread p.SchedPolicy, - &schedParam{0}, + ¶m, ); err != nil { return &StartError{ Fatal: true, -- cgit v1.3.1