From 0b65b09f15783b067343f7a2dcf67ae1f1e27dc7 Mon Sep 17 00:00:00 2001 From: Daniel Borkmann Date: Tue, 4 Jun 2013 11:02:20 +0200 Subject: proc: move out process specific management functions Move them out of xutils, so that we can maintain them separately. Also simplify things a bit. Signed-off-by: Daniel Borkmann --- proc.c | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 proc.c (limited to 'proc.c') diff --git a/proc.c b/proc.c new file mode 100644 index 0000000..39d661e --- /dev/null +++ b/proc.c @@ -0,0 +1,66 @@ +#define _GNU_SOURCE +#include +#include +#include +#include +#include +#include + +#include "proc.h" +#include "die.h" + +void cpu_affinity(int cpu) +{ + int ret; + cpu_set_t cpu_bitmask; + + CPU_ZERO(&cpu_bitmask); + CPU_SET(cpu, &cpu_bitmask); + + ret = sched_setaffinity(getpid(), sizeof(cpu_bitmask), + &cpu_bitmask); + if (ret) + panic("Can't set this cpu affinity!\n"); +} + +int set_proc_prio(int priority) +{ + int ret = setpriority(PRIO_PROCESS, getpid(), priority); + if (ret) + panic("Can't set nice val to %i!\n", priority); + + return 0; +} + +int set_sched_status(int policy, int priority) +{ + int ret, min_prio, max_prio; + struct sched_param sp; + + max_prio = sched_get_priority_max(policy); + min_prio = sched_get_priority_min(policy); + + if (max_prio == -1 || min_prio == -1) + printf("Cannot determine scheduler prio limits!\n"); + else if (priority < min_prio) + priority = min_prio; + else if (priority > max_prio) + priority = max_prio; + + memset(&sp, 0, sizeof(sp)); + sp.sched_priority = priority; + + ret = sched_setscheduler(getpid(), policy, &sp); + if (ret) { + printf("Cannot set scheduler policy!\n"); + return -EINVAL; + } + + ret = sched_setparam(getpid(), &sp); + if (ret) { + printf("Cannot set scheduler prio!\n"); + return -EINVAL; + } + + return 0; +} -- cgit v1.2.3-54-g00ecf