diff options
author | 2009-04-03 09:29:15 +0000 | |
---|---|---|
committer | 2009-04-03 09:29:15 +0000 | |
commit | 6026e1a6e4519762d57b034550cdf30087e40d68 (patch) | |
tree | 4065dcf99ffa81ce0db04801f08c8d533da2b774 /sys/kern/kern_sched.c | |
parent | my last commit to diff.c broke diffing in some cases, (diff) | |
download | wireguard-openbsd-6026e1a6e4519762d57b034550cdf30087e40d68.tar.xz wireguard-openbsd-6026e1a6e4519762d57b034550cdf30087e40d68.zip |
sched_peg_curproc_to_cpu() - function to force a proc to stay on a cpu
forever.
Diffstat (limited to 'sys/kern/kern_sched.c')
-rw-r--r-- | sys/kern/kern_sched.c | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/sys/kern/kern_sched.c b/sys/kern/kern_sched.c index 1b921159985..29dd5793efe 100644 --- a/sys/kern/kern_sched.c +++ b/sys/kern/kern_sched.c @@ -1,4 +1,4 @@ -/* $OpenBSD: kern_sched.c,v 1.9 2009/03/23 13:25:11 art Exp $ */ +/* $OpenBSD: kern_sched.c,v 1.10 2009/04/03 09:29:15 art Exp $ */ /* * Copyright (c) 2007, 2008 Artur Grabowski <art@openbsd.org> * @@ -291,6 +291,12 @@ sched_choosecpu(struct proc *p) struct cpu_info *ci; struct cpuset set; + /* + * If pegged to a cpu, don't allow it to move. + */ + if (p->p_flag & P_CPUPEG) + return; + sched_choose++; /* @@ -482,6 +488,26 @@ sched_proc_to_cpu_cost(struct cpu_info *ci, struct proc *p) } /* + * Peg a proc to a cpu. + */ +void +sched_peg_curproc(struct cpu_info *ci) +{ + struct proc *p = curproc; + int s; + + SCHED_LOCK(s); + p->p_priority = p->p_usrpri; + p->p_stat = SRUN; + p->p_cpu = ci; + atomic_setbits_int(&p->p_flag, P_CPUPEG); + setrunqueue(p); + p->p_stats->p_ru.ru_nvcsw++; + mi_switch(); + SCHED_UNLOCK(s); +} + +/* * Functions to manipulate cpu sets. */ struct cpu_info *cpuset_infos[MAXCPUS]; |