Skip to main content

strat9_kernel/shell/commands/sys/
silo_limit.rs

1use super::*;
2
3/// Dynamically adjust silo resource limits.
4///
5/// Usage: `silo limit <id|label|name> <key> <value>`
6///
7/// Keys: `mem_max`, `mem_min`, `max_tasks`, `cpu_shares`.
8pub(super) fn cmd_silo_limit(args: &[String]) -> Result<(), ShellError> {
9    if args.len() < 4 {
10        shell_println!("Usage: silo limit <id|label|name> <key> <value>");
11        shell_println!("  Keys: mem_max, mem_min, max_tasks, cpu_shares");
12        return Err(ShellError::InvalidArguments);
13    }
14    let selector = normalize_current_silo_selector(args[1].as_str());
15    let key = args[2].as_str();
16    let value: u64 = args[3].parse().map_err(|_| {
17        shell_println!("silo limit: invalid value '{}'", args[3]);
18        ShellError::InvalidArguments
19    })?;
20
21    match silo::kernel_limit_silo(selector.as_str(), key, value) {
22        Ok(sid) => {
23            shell_println!("silo limit: {}={} for sid={}", key, value, sid);
24            Ok(())
25        }
26        Err(e) => {
27            shell_println!("silo limit failed: {:?}", e);
28            Err(ShellError::ExecutionFailed)
29        }
30    }
31}