sync with OpenBSD -current

This commit is contained in:
purplerain 2024-06-03 17:41:29 +00:00
parent 0d61274b26
commit bef867f8da
Signed by: purplerain
GPG key ID: F42C07F07E2E35B7
81 changed files with 6365 additions and 372 deletions

View file

@ -1,4 +1,4 @@
/* $OpenBSD: acpi.c,v 1.429 2024/05/29 12:21:33 kettenis Exp $ */
/* $OpenBSD: acpi.c,v 1.430 2024/06/02 11:08:41 kettenis Exp $ */
/*
* Copyright (c) 2005 Thorsten Lockert <tholo@sigmasoft.com>
* Copyright (c) 2005 Jordan Hargrave <jordan@openbsd.org>
@ -611,6 +611,10 @@ acpi_getpci(struct aml_node *node, void *arg)
aml_nodename(node));
/* Collect device power state information. */
if (aml_evalinteger(sc, node, "_S0W", 0, NULL, &val) == 0)
pci->_s0w = val;
else
pci->_s0w = -1;
if (aml_evalinteger(sc, node, "_S3D", 0, NULL, &val) == 0)
pci->_s3d = val;
else
@ -721,6 +725,10 @@ acpi_pci_min_powerstate(pci_chipset_tag_t pc, pcitag_t tag)
TAILQ_FOREACH(pdev, &acpi_pcidevs, next) {
if (pdev->bus == bus && pdev->dev == dev && pdev->fun == fun) {
switch (acpi_softc->sc_state) {
case ACPI_STATE_S0:
defaultstate = PCI_PMCSR_STATE_D3;
state = pdev->_s0w;
break;
case ACPI_STATE_S3:
defaultstate = PCI_PMCSR_STATE_D3;
state = MAX(pdev->_s3d, pdev->_s3w);

View file

@ -1,4 +1,4 @@
/* $OpenBSD: amltypes.h,v 1.49 2022/09/12 17:42:31 kettenis Exp $ */
/* $OpenBSD: amltypes.h,v 1.50 2024/06/02 11:08:41 kettenis Exp $ */
/*
* Copyright (c) 2005 Jordan Hargrave <jordan@openbsd.org>
*
@ -358,6 +358,7 @@ struct acpi_pci {
int dev;
int fun;
int _s0w;
int _s3d;
int _s3w;
int _s4d;

View file

@ -1,4 +1,4 @@
/* $OpenBSD: nvme.c,v 1.115 2024/05/28 00:24:44 jsg Exp $ */
/* $OpenBSD: nvme.c,v 1.116 2024/06/03 12:01:57 mglocker Exp $ */
/*
* Copyright (c) 2014 David Gwynne <dlg@openbsd.org>
@ -1742,8 +1742,6 @@ nvme_hibernate_io(dev_t dev, daddr_t blkno, vaddr_t addr, size_t size,
my->cq_head = 0;
my->cqe_phase = NVME_CQE_PHASE;
pmap_extract(pmap_kernel(), (vaddr_t)page, &page_phys);
memset(&qsqe, 0, sizeof(qsqe));
qsqe.opcode = NVM_ADMIN_ADD_IOCQ;
htolem64(&qsqe.prp1,

View file

@ -1,4 +1,4 @@
/* $OpenBSD: drm_linux.c,v 1.112 2024/03/30 13:33:20 mpi Exp $ */
/* $OpenBSD: drm_linux.c,v 1.113 2024/06/03 12:48:25 claudio Exp $ */
/*
* Copyright (c) 2013 Jonathan Gray <jsg@openbsd.org>
* Copyright (c) 2015, 2016 Mark Kettenis <kettenis@openbsd.org>
@ -114,14 +114,13 @@ void
__set_current_state(int state)
{
struct proc *p = curproc;
int s;
KASSERT(state == TASK_RUNNING);
SCHED_LOCK(s);
SCHED_LOCK();
unsleep(p);
p->p_stat = SONPROC;
atomic_clearbits_int(&p->p_flag, P_WSLEEP);
SCHED_UNLOCK(s);
SCHED_UNLOCK();
}
void
@ -159,11 +158,11 @@ schedule_timeout_uninterruptible(long timeout)
int
wake_up_process(struct proc *p)
{
int s, rv;
int rv;
SCHED_LOCK(s);
SCHED_LOCK();
rv = wakeup_proc(p, 0);
SCHED_UNLOCK(s);
SCHED_UNLOCK();
return rv;
}

View file

@ -1,4 +1,4 @@
/* $OpenBSD: kern_exit.c,v 1.221 2024/05/20 10:32:20 claudio Exp $ */
/* $OpenBSD: kern_exit.c,v 1.222 2024/06/03 12:48:25 claudio Exp $ */
/* $NetBSD: kern_exit.c,v 1.39 1996/04/22 01:38:25 christos Exp $ */
/*
@ -119,7 +119,6 @@ exit1(struct proc *p, int xexit, int xsig, int flags)
struct process *pr, *qr, *nqr;
struct rusage *rup;
struct timespec ts;
int s;
atomic_setbits_int(&p->p_flag, P_WEXIT);
@ -329,9 +328,9 @@ exit1(struct proc *p, int xexit, int xsig, int flags)
timespecclear(&ts);
else
timespecsub(&ts, &curcpu()->ci_schedstate.spc_runtime, &ts);
SCHED_LOCK(s);
SCHED_LOCK();
tuagg_locked(pr, p, &ts);
SCHED_UNLOCK(s);
SCHED_UNLOCK();
/*
* clear %cpu usage during swap

View file

@ -1,4 +1,4 @@
/* $OpenBSD: kern_fork.c,v 1.259 2024/05/29 18:55:45 claudio Exp $ */
/* $OpenBSD: kern_fork.c,v 1.260 2024/06/03 12:48:25 claudio Exp $ */
/* $NetBSD: kern_fork.c,v 1.29 1996/02/09 18:59:34 christos Exp $ */
/*
@ -329,14 +329,13 @@ static inline void
fork_thread_start(struct proc *p, struct proc *parent, int flags)
{
struct cpu_info *ci;
int s;
SCHED_LOCK(s);
SCHED_LOCK();
ci = sched_choosecpu_fork(parent, flags);
TRACEPOINT(sched, fork, p->p_tid + THREAD_PID_OFFSET,
p->p_p->ps_pid, CPU_INFO_UNIT(ci));
setrunqueue(ci, p, p->p_usrpri);
SCHED_UNLOCK(s);
SCHED_UNLOCK();
}
int

View file

@ -1,4 +1,4 @@
/* $OpenBSD: kern_pledge.c,v 1.314 2024/05/18 05:20:22 guenther Exp $ */
/* $OpenBSD: kern_pledge.c,v 1.316 2024/06/03 03:41:47 deraadt Exp $ */
/*
* Copyright (c) 2015 Nicholas Marriott <nicm@openbsd.org>
@ -574,7 +574,7 @@ pledge_fail(struct proc *p, int error, uint64_t code)
return (ENOSYS);
KERNEL_LOCK();
log(LOG_ERR, "%s[%d]: pledge \"%s\", syscall %d\n",
uprintf("%s[%d]: pledge \"%s\", syscall %d\n",
p->p_p->ps_comm, p->p_p->ps_pid, codes, p->p_pledge_syscall);
p->p_p->ps_acflag |= APLEDGE;
@ -1002,10 +1002,10 @@ pledge_sysctl(struct proc *p, int miblen, int *mib, void *new)
snprintf(buf, sizeof(buf), "%s(%d): pledge sysctl %d:",
p->p_p->ps_comm, p->p_p->ps_pid, miblen);
for (i = 0; i < miblen; i++) {
char *p = buf + strlen(buf);
snprintf(p, sizeof(buf) - (p - buf), " %d", mib[i]);
char *s = buf + strlen(buf);
snprintf(s, sizeof(buf) - (s - buf), " %d", mib[i]);
}
log(LOG_ERR, "%s\n", buf);
uprintf("%s\n", buf);
return pledge_fail(p, EINVAL, 0);
}

View file

@ -1,4 +1,4 @@
/* $OpenBSD: kern_resource.c,v 1.83 2024/05/22 09:20:22 claudio Exp $ */
/* $OpenBSD: kern_resource.c,v 1.84 2024/06/03 12:48:25 claudio Exp $ */
/* $NetBSD: kern_resource.c,v 1.38 1996/10/23 07:19:38 matthias Exp $ */
/*-
@ -198,7 +198,6 @@ donice(struct proc *curp, struct process *chgpr, int n)
{
struct ucred *ucred = curp->p_ucred;
struct proc *p;
int s;
if (ucred->cr_uid != 0 && ucred->cr_ruid != 0 &&
ucred->cr_uid != chgpr->ps_ucred->cr_uid &&
@ -213,11 +212,11 @@ donice(struct proc *curp, struct process *chgpr, int n)
return (EACCES);
chgpr->ps_nice = n;
mtx_enter(&chgpr->ps_mtx);
SCHED_LOCK(s);
SCHED_LOCK();
TAILQ_FOREACH(p, &chgpr->ps_threads, p_thr_link) {
setpriority(p, p->p_estcpu, n);
}
SCHED_UNLOCK(s);
SCHED_UNLOCK();
mtx_leave(&chgpr->ps_mtx);
return (0);
}
@ -396,11 +395,9 @@ tuagg_locked(struct process *pr, struct proc *p, const struct timespec *ts)
void
tuagg(struct process *pr, struct proc *p)
{
int s;
SCHED_LOCK(s);
SCHED_LOCK();
tuagg_locked(pr, p, NULL);
SCHED_UNLOCK(s);
SCHED_UNLOCK();
}
/*
@ -537,13 +534,12 @@ rucheck(void *arg)
struct rlimit rlim;
struct process *pr = arg;
time_t runtime;
int s;
KERNEL_ASSERT_LOCKED();
SCHED_LOCK(s);
SCHED_LOCK();
runtime = pr->ps_tu.tu_runtime.tv_sec;
SCHED_UNLOCK(s);
SCHED_UNLOCK();
mtx_enter(&pr->ps_mtx);
rlim = pr->ps_limit->pl_rlimit[RLIMIT_CPU];

View file

@ -1,4 +1,4 @@
/* $OpenBSD: kern_sched.c,v 1.95 2024/02/28 13:43:44 mpi Exp $ */
/* $OpenBSD: kern_sched.c,v 1.96 2024/06/03 12:48:25 claudio Exp $ */
/*
* Copyright (c) 2007, 2008 Artur Grabowski <art@openbsd.org>
*
@ -137,7 +137,6 @@ sched_idle(void *v)
struct schedstate_percpu *spc;
struct proc *p = curproc;
struct cpu_info *ci = v;
int s;
KERNEL_UNLOCK();
@ -147,14 +146,14 @@ sched_idle(void *v)
* First time we enter here, we're not supposed to idle,
* just go away for a while.
*/
SCHED_LOCK(s);
SCHED_LOCK();
cpuset_add(&sched_idle_cpus, ci);
p->p_stat = SSLEEP;
p->p_cpu = ci;
atomic_setbits_int(&p->p_flag, P_CPUPEG);
mi_switch();
cpuset_del(&sched_idle_cpus, ci);
SCHED_UNLOCK(s);
SCHED_UNLOCK();
KASSERT(ci == curcpu());
KASSERT(curproc == spc->spc_idleproc);
@ -163,10 +162,10 @@ sched_idle(void *v)
while (!cpu_is_idle(curcpu())) {
struct proc *dead;
SCHED_LOCK(s);
SCHED_LOCK();
p->p_stat = SSLEEP;
mi_switch();
SCHED_UNLOCK(s);
SCHED_UNLOCK();
while ((dead = LIST_FIRST(&spc->spc_deadproc))) {
LIST_REMOVE(dead, p_hash);
@ -185,10 +184,10 @@ sched_idle(void *v)
if (spc->spc_schedflags & SPCF_SHOULDHALT &&
(spc->spc_schedflags & SPCF_HALTED) == 0) {
cpuset_del(&sched_idle_cpus, ci);
SCHED_LOCK(s);
SCHED_LOCK();
atomic_setbits_int(&spc->spc_schedflags,
spc->spc_whichqs ? 0 : SPCF_HALTED);
SCHED_UNLOCK(s);
SCHED_UNLOCK();
wakeup(spc);
}
#endif
@ -226,7 +225,6 @@ sched_toidle(void)
{
struct schedstate_percpu *spc = &curcpu()->ci_schedstate;
struct proc *idle;
int s;
#ifdef MULTIPROCESSOR
/* This process no longer needs to hold the kernel lock. */
@ -245,8 +243,7 @@ sched_toidle(void)
atomic_clearbits_int(&spc->spc_schedflags, SPCF_SWITCHCLEAR);
SCHED_LOCK(s);
SCHED_LOCK();
idle = spc->spc_idleproc;
idle->p_stat = SRUN;
@ -627,14 +624,13 @@ void
sched_peg_curproc(struct cpu_info *ci)
{
struct proc *p = curproc;
int s;
SCHED_LOCK(s);
SCHED_LOCK();
atomic_setbits_int(&p->p_flag, P_CPUPEG);
setrunqueue(ci, p, p->p_usrpri);
p->p_ru.ru_nvcsw++;
mi_switch();
SCHED_UNLOCK(s);
SCHED_UNLOCK();
}
#ifdef MULTIPROCESSOR

View file

@ -1,4 +1,4 @@
/* $OpenBSD: kern_sig.c,v 1.329 2024/05/22 09:22:55 claudio Exp $ */
/* $OpenBSD: kern_sig.c,v 1.330 2024/06/03 12:48:25 claudio Exp $ */
/* $NetBSD: kern_sig.c,v 1.54 1996/04/22 01:38:32 christos Exp $ */
/*
@ -843,14 +843,12 @@ trapsignal(struct proc *p, int signum, u_long trapno, int code,
*/
if (((pr->ps_flags & (PS_TRACED | PS_PPWAIT)) == PS_TRACED) &&
signum != SIGKILL && (p->p_sigmask & mask) != 0) {
int s;
single_thread_set(p, SINGLE_SUSPEND | SINGLE_NOWAIT);
pr->ps_xsig = signum;
SCHED_LOCK(s);
SCHED_LOCK();
proc_stop(p, 1);
SCHED_UNLOCK(s);
SCHED_UNLOCK();
signum = pr->ps_xsig;
single_thread_clear(p, 0);
@ -920,7 +918,7 @@ psignal(struct proc *p, int signum)
void
ptsignal(struct proc *p, int signum, enum signal_type type)
{
int s, prop;
int prop;
sig_t action, altaction = SIG_DFL;
sigset_t mask, sigmask;
int *siglist;
@ -1063,7 +1061,7 @@ ptsignal(struct proc *p, int signum, enum signal_type type)
if (q != p)
ptsignal(q, signum, SPROPAGATED);
SCHED_LOCK(s);
SCHED_LOCK();
switch (p->p_stat) {
@ -1252,7 +1250,7 @@ out:
atomic_clearbits_int(&p->p_flag, P_CONTINUED);
}
SCHED_UNLOCK(s);
SCHED_UNLOCK();
if (wakeparent)
wakeup(pr->ps_pptr);
}
@ -1299,7 +1297,6 @@ cursig(struct proc *p, struct sigctx *sctx)
struct process *pr = p->p_p;
int signum, mask, prop;
sigset_t ps_siglist;
int s;
KASSERT(p == curproc);
@ -1340,9 +1337,9 @@ cursig(struct proc *p, struct sigctx *sctx)
single_thread_set(p, SINGLE_SUSPEND | SINGLE_NOWAIT);
pr->ps_xsig = signum;
SCHED_LOCK(s);
SCHED_LOCK();
proc_stop(p, 1);
SCHED_UNLOCK(s);
SCHED_UNLOCK();
/*
* re-take the signal before releasing
@ -1415,9 +1412,9 @@ cursig(struct proc *p, struct sigctx *sctx)
prop & SA_TTYSTOP))
break; /* == ignore */
pr->ps_xsig = signum;
SCHED_LOCK(s);
SCHED_LOCK();
proc_stop(p, 1);
SCHED_UNLOCK(s);
SCHED_UNLOCK();
break;
} else if (prop & SA_IGNORE) {
/*
@ -2064,7 +2061,6 @@ int
single_thread_check_locked(struct proc *p, int deep)
{
struct process *pr = p->p_p;
int s;
MUTEX_ASSERT_LOCKED(&pr->ps_mtx);
@ -2093,10 +2089,10 @@ single_thread_check_locked(struct proc *p, int deep)
/* not exiting and don't need to unwind, so suspend */
mtx_leave(&pr->ps_mtx);
SCHED_LOCK(s);
SCHED_LOCK();
p->p_stat = SSTOP;
mi_switch();
SCHED_UNLOCK(s);
SCHED_UNLOCK();
mtx_enter(&pr->ps_mtx);
} while (pr->ps_single != NULL);
@ -2129,7 +2125,7 @@ single_thread_set(struct proc *p, int flags)
{
struct process *pr = p->p_p;
struct proc *q;
int error, s, mode = flags & SINGLE_MASK;
int error, mode = flags & SINGLE_MASK;
KASSERT(curproc == p);
@ -2161,7 +2157,7 @@ single_thread_set(struct proc *p, int flags)
TAILQ_FOREACH(q, &pr->ps_threads, p_thr_link) {
if (q == p)
continue;
SCHED_LOCK(s);
SCHED_LOCK();
atomic_setbits_int(&q->p_flag, P_SUSPSINGLE);
switch (q->p_stat) {
case SIDL:
@ -2194,7 +2190,7 @@ single_thread_set(struct proc *p, int flags)
case SRUN:
break;
}
SCHED_UNLOCK(s);
SCHED_UNLOCK();
}
/* count ourselfs out */
@ -2235,7 +2231,6 @@ single_thread_clear(struct proc *p, int flag)
{
struct process *pr = p->p_p;
struct proc *q;
int s;
KASSERT(pr->ps_single == p);
KASSERT(curproc == p);
@ -2254,7 +2249,7 @@ single_thread_clear(struct proc *p, int flag)
* then clearing that either makes it runnable or puts
* it back into some sleep queue
*/
SCHED_LOCK(s);
SCHED_LOCK();
if (q->p_stat == SSTOP && (q->p_flag & flag) == 0) {
if (q->p_wchan == NULL)
setrunnable(q);
@ -2263,7 +2258,7 @@ single_thread_clear(struct proc *p, int flag)
q->p_stat = SSLEEP;
}
}
SCHED_UNLOCK(s);
SCHED_UNLOCK();
}
mtx_leave(&pr->ps_mtx);
}

View file

@ -1,4 +1,4 @@
/* $OpenBSD: kern_synch.c,v 1.204 2024/05/22 09:24:11 claudio Exp $ */
/* $OpenBSD: kern_synch.c,v 1.205 2024/06/03 12:48:25 claudio Exp $ */
/* $NetBSD: kern_synch.c,v 1.37 1996/04/22 01:38:37 christos Exp $ */
/*
@ -332,7 +332,6 @@ void
sleep_setup(const volatile void *ident, int prio, const char *wmesg)
{
struct proc *p = curproc;
int s;
#ifdef DIAGNOSTIC
if (p->p_flag & P_CANTSLEEP)
@ -346,7 +345,7 @@ sleep_setup(const volatile void *ident, int prio, const char *wmesg)
if (p->p_flag & P_WEXIT)
CLR(prio, PCATCH);
SCHED_LOCK(s);
SCHED_LOCK();
TRACEPOINT(sched, sleep, NULL);
@ -360,14 +359,14 @@ sleep_setup(const volatile void *ident, int prio, const char *wmesg)
atomic_setbits_int(&p->p_flag, P_SINTR);
p->p_stat = SSLEEP;
SCHED_UNLOCK(s);
SCHED_UNLOCK();
}
int
sleep_finish(int timo, int do_sleep)
{
struct proc *p = curproc;
int s, catch, error = 0, error1 = 0;
int catch, error = 0, error1 = 0;
catch = p->p_flag & P_SINTR;
@ -392,7 +391,7 @@ sleep_finish(int timo, int do_sleep)
}
}
SCHED_LOCK(s);
SCHED_LOCK();
/*
* If the wakeup happens while going to sleep, p->p_wchan
* will be NULL. In that case unwind immediately but still
@ -419,7 +418,7 @@ sleep_finish(int timo, int do_sleep)
#endif
p->p_cpu->ci_schedstate.spc_curpriority = p->p_usrpri;
SCHED_UNLOCK(s);
SCHED_UNLOCK();
/*
* Even though this belongs to the signal handling part of sleep,
@ -503,11 +502,10 @@ void
endtsleep(void *arg)
{
struct proc *p = arg;
int s;
SCHED_LOCK(s);
SCHED_LOCK();
wakeup_proc(p, P_TIMEOUT);
SCHED_UNLOCK(s);
SCHED_UNLOCK();
}
/*
@ -536,11 +534,10 @@ wakeup_n(const volatile void *ident, int n)
struct slpque *qp, wakeq;
struct proc *p;
struct proc *pnext;
int s;
TAILQ_INIT(&wakeq);
SCHED_LOCK(s);
SCHED_LOCK();
qp = &slpque[LOOKUP(ident)];
for (p = TAILQ_FIRST(qp); p != NULL && n != 0; p = pnext) {
pnext = TAILQ_NEXT(p, p_runq);
@ -564,7 +561,7 @@ wakeup_n(const volatile void *ident, int n)
if (p->p_stat == SSLEEP)
setrunnable(p);
}
SCHED_UNLOCK(s);
SCHED_UNLOCK();
}
/*
@ -581,7 +578,6 @@ sys_sched_yield(struct proc *p, void *v, register_t *retval)
{
struct proc *q;
uint8_t newprio;
int s;
/*
* If one of the threads of a multi-threaded process called
@ -594,11 +590,11 @@ sys_sched_yield(struct proc *p, void *v, register_t *retval)
newprio = max(newprio, q->p_runpri);
mtx_leave(&p->p_p->ps_mtx);
SCHED_LOCK(s);
SCHED_LOCK();
setrunqueue(p->p_cpu, p, newprio);
p->p_ru.ru_nvcsw++;
mi_switch();
SCHED_UNLOCK(s);
SCHED_UNLOCK();
return (0);
}

View file

@ -1,4 +1,4 @@
/* $OpenBSD: sched_bsd.c,v 1.92 2024/05/29 18:55:45 claudio Exp $ */
/* $OpenBSD: sched_bsd.c,v 1.93 2024/06/03 12:48:25 claudio Exp $ */
/* $NetBSD: kern_synch.c,v 1.37 1996/04/22 01:38:37 christos Exp $ */
/*-
@ -230,7 +230,6 @@ schedcpu(void *unused)
static struct timeout to = TIMEOUT_INITIALIZER(schedcpu, NULL);
fixpt_t loadfac = loadfactor(averunnable.ldavg[0]);
struct proc *p;
int s;
unsigned int newcpu;
LIST_FOREACH(p, &allproc, p_list) {
@ -253,7 +252,7 @@ schedcpu(void *unused)
*/
if (p->p_slptime > 1)
continue;
SCHED_LOCK(s);
SCHED_LOCK();
/*
* p_pctcpu is only for diagnostic tools such as ps.
*/
@ -275,7 +274,7 @@ schedcpu(void *unused)
remrunqueue(p);
setrunqueue(p->p_cpu, p, p->p_usrpri);
}
SCHED_UNLOCK(s);
SCHED_UNLOCK();
}
wakeup(&lbolt);
timeout_add_sec(&to, 1);
@ -313,13 +312,12 @@ void
yield(void)
{
struct proc *p = curproc;
int s;
SCHED_LOCK(s);
SCHED_LOCK();
setrunqueue(p->p_cpu, p, p->p_usrpri);
p->p_ru.ru_nvcsw++;
mi_switch();
SCHED_UNLOCK(s);
SCHED_UNLOCK();
}
/*
@ -332,13 +330,12 @@ void
preempt(void)
{
struct proc *p = curproc;
int s;
SCHED_LOCK(s);
SCHED_LOCK();
setrunqueue(p->p_cpu, p, p->p_usrpri);
p->p_ru.ru_nivcsw++;
mi_switch();
SCHED_UNLOCK(s);
SCHED_UNLOCK();
}
void
@ -349,7 +346,7 @@ mi_switch(void)
struct proc *nextproc;
struct process *pr = p->p_p;
struct timespec ts;
int oldipl, s;
int oldipl;
#ifdef MULTIPROCESSOR
int hold_count;
#endif
@ -427,7 +424,7 @@ mi_switch(void)
/* Restore proc's IPL. */
MUTEX_OLDIPL(&sched_lock) = oldipl;
SCHED_UNLOCK(s);
SCHED_UNLOCK();
SCHED_ASSERT_UNLOCKED();
@ -463,7 +460,7 @@ mi_switch(void)
if (hold_count)
__mp_acquire_count(&kernel_lock, hold_count);
#endif
SCHED_LOCK(s);
SCHED_LOCK();
}
/*
@ -551,15 +548,14 @@ schedclock(struct proc *p)
struct cpu_info *ci = curcpu();
struct schedstate_percpu *spc = &ci->ci_schedstate;
uint32_t newcpu;
int s;
if (p == spc->spc_idleproc || spc->spc_spinning)
return;
SCHED_LOCK(s);
SCHED_LOCK();
newcpu = ESTCPULIM(p->p_estcpu + 1);
setpriority(p, newcpu, p->p_p->ps_nice);
SCHED_UNLOCK(s);
SCHED_UNLOCK();
}
void (*cpu_setperf)(int);

View file

@ -1,4 +1,4 @@
/* $OpenBSD: subr_witness.c,v 1.52 2024/05/03 13:47:31 visa Exp $ */
/* $OpenBSD: subr_witness.c,v 1.53 2024/06/03 14:34:19 claudio Exp $ */
/*-
* Copyright (c) 2008 Isilon Systems, Inc.
@ -438,11 +438,6 @@ static struct lock_class lock_class_kernel_lock = {
.lc_flags = LC_SLEEPLOCK | LC_RECURSABLE | LC_SLEEPABLE
};
static struct lock_class lock_class_sched_lock = {
.lc_name = "sched_lock",
.lc_flags = LC_SPINLOCK | LC_RECURSABLE
};
static struct lock_class lock_class_mutex = {
.lc_name = "mutex",
.lc_flags = LC_SPINLOCK
@ -461,7 +456,6 @@ static struct lock_class lock_class_rrwlock = {
static struct lock_class *lock_classes[] = {
&lock_class_kernel_lock,
&lock_class_sched_lock,
&lock_class_mutex,
&lock_class_rwlock,
&lock_class_rrwlock,

View file

@ -1,4 +1,4 @@
/* $OpenBSD: sys_process.c,v 1.97 2024/04/02 08:27:22 deraadt Exp $ */
/* $OpenBSD: sys_process.c,v 1.98 2024/06/03 12:48:25 claudio Exp $ */
/* $NetBSD: sys_process.c,v 1.55 1996/05/15 06:17:47 tls Exp $ */
/*-
@ -283,7 +283,6 @@ ptrace_ctrl(struct proc *p, int req, pid_t pid, caddr_t addr, int data)
struct proc *t; /* target thread */
struct process *tr; /* target process */
int error = 0;
int s;
switch (req) {
case PT_TRACE_ME:
@ -492,10 +491,10 @@ ptrace_ctrl(struct proc *p, int req, pid_t pid, caddr_t addr, int data)
/* Finally, deliver the requested signal (or none). */
if (t->p_stat == SSTOP) {
tr->ps_xsig = data;
SCHED_LOCK(s);
SCHED_LOCK();
unsleep(t);
setrunnable(t);
SCHED_UNLOCK(s);
SCHED_UNLOCK();
} else {
if (data != 0)
psignal(t, data);

View file

@ -1,4 +1,4 @@
/* $OpenBSD: _lock.h,v 1.4 2019/04/23 13:35:12 visa Exp $ */
/* $OpenBSD: _lock.h,v 1.5 2024/06/03 12:46:59 claudio Exp $ */
/*-
* Copyright (c) 1997 Berkeley Software Design, Inc. All rights reserved.
@ -50,7 +50,6 @@
enum lock_class_index {
LO_CLASS_KERNEL_LOCK,
LO_CLASS_SCHED_LOCK,
LO_CLASS_MUTEX,
LO_CLASS_RWLOCK,
LO_CLASS_RRWLOCK

View file

@ -1,4 +1,4 @@
/* $OpenBSD: sched.h,v 1.71 2024/05/29 18:55:45 claudio Exp $ */
/* $OpenBSD: sched.h,v 1.72 2024/06/03 12:48:25 claudio Exp $ */
/* $NetBSD: sched.h,v 1.2 1999/02/28 18:14:58 ross Exp $ */
/*-
@ -201,28 +201,12 @@ void remrunqueue(struct proc *);
extern struct mutex sched_lock;
#define SCHED_ASSERT_LOCKED() \
do { \
MUTEX_ASSERT_LOCKED(&sched_lock); \
} while (0)
#define SCHED_ASSERT_UNLOCKED() \
do { \
MUTEX_ASSERT_UNLOCKED(&sched_lock); \
} while (0)
#define SCHED_ASSERT_LOCKED() MUTEX_ASSERT_LOCKED(&sched_lock)
#define SCHED_ASSERT_UNLOCKED() MUTEX_ASSERT_UNLOCKED(&sched_lock)
#define SCHED_LOCK_INIT() mtx_init(&sched_lock, IPL_SCHED)
#define SCHED_LOCK(s) \
do { \
(s) = 0; /* XXX cleanup useless argument */ \
mtx_enter(&sched_lock); \
} while (/* CONSTCOND */ 0)
#define SCHED_UNLOCK(s) \
do { \
(void)s; /* XXX cleanup useless argument */ \
mtx_leave(&sched_lock); \
} while (/* CONSTCOND */ 0)
#define SCHED_LOCK() mtx_enter(&sched_lock)
#define SCHED_UNLOCK() mtx_leave(&sched_lock)
#endif /* _KERNEL */
#endif /* _SYS_SCHED_H_ */

View file

@ -1,4 +1,4 @@
/* $OpenBSD: syscall_mi.h,v 1.33 2024/04/01 12:00:15 deraadt Exp $ */
/* $OpenBSD: syscall_mi.h,v 1.34 2024/06/02 15:31:57 deraadt Exp $ */
/*
* Copyright (c) 1982, 1986, 1989, 1993
@ -105,9 +105,8 @@ die:
ktrpinsyscall(p, error, code, addr);
#endif
KERNEL_LOCK();
/* XXX remove or simplify this log() call after SecBSD 1.5 release */
log(LOG_ERR,
"%s[%d]: pinsyscalls addr %lx code %ld, pinoff 0x%x "
/* XXX remove or simplify this uprintf() call after OpenBSD 7.5 release */
uprintf("%s[%d]: pinsyscalls addr %lx code %ld, pinoff 0x%x "
"(pin%s %d %lx-%lx %lx) (libcpin%s %d %lx-%lx %lx) error %d\n",
p->p_p->ps_comm, p->p_p->ps_pid, addr, code,
(pin && code < pin->pn_npins) ? pin->pn_pins[code] : -1,

View file

@ -1,4 +1,4 @@
/* $OpenBSD: uvm_map.c,v 1.328 2024/04/02 08:39:17 deraadt Exp $ */
/* $OpenBSD: uvm_map.c,v 1.329 2024/06/02 15:31:57 deraadt Exp $ */
/* $NetBSD: uvm_map.c,v 1.86 2000/11/27 08:40:03 chs Exp $ */
/*
@ -1659,7 +1659,7 @@ uvm_map_inentry(struct proc *p, struct p_inentry *ie, vaddr_t addr,
ok = uvm_map_inentry_fix(p, ie, addr, fn, serial);
if (!ok) {
KERNEL_LOCK();
printf(fmt, p->p_p->ps_comm, p->p_p->ps_pid, p->p_tid,
uprintf(fmt, p->p_p->ps_comm, p->p_p->ps_pid, p->p_tid,
addr, ie->ie_start, ie->ie_end-1);
p->p_p->ps_acflag |= AMAP;
sv.sival_ptr = (void *)PROC_PC(p);
@ -1685,11 +1685,8 @@ uvm_map_is_stack_remappable(struct vm_map *map, vaddr_t addr, vaddr_t sz,
vm_map_assert_anylock(map);
if (!uvm_map_lookup_entry(map, addr, &first)) {
printf("map stack 0x%lx-0x%lx of map %p failed: no mapping\n",
addr, end, map);
if (!uvm_map_lookup_entry(map, addr, &first))
return FALSE;
}
/*
* Check that the address range exists and is contiguous.
@ -1707,16 +1704,10 @@ uvm_map_is_stack_remappable(struct vm_map *map, vaddr_t addr, vaddr_t sz,
}
#endif
if (prev != NULL && prev->end != iter->start) {
printf("map stack 0x%lx-0x%lx of map %p failed: "
"hole in range\n", addr, end, map);
if (prev != NULL && prev->end != iter->start)
return FALSE;
}
if (iter->start == iter->end || UVM_ET_ISHOLE(iter)) {
printf("map stack 0x%lx-0x%lx of map %p failed: "
"hole in range\n", addr, end, map);
if (iter->start == iter->end || UVM_ET_ISHOLE(iter))
return FALSE;
}
if (sigaltstack_check) {
if (iter->protection != (PROT_READ | PROT_WRITE))
return FALSE;
@ -1740,7 +1731,6 @@ uvm_map_remap_as_stack(struct proc *p, vaddr_t addr, vaddr_t sz)
{
vm_map_t map = &p->p_vmspace->vm_map;
vaddr_t start, end;
int error;
int flags = UVM_MAPFLAG(PROT_READ | PROT_WRITE,
PROT_READ | PROT_WRITE | PROT_EXEC,
MAP_INHERIT_COPY, MADV_NORMAL,
@ -1767,11 +1757,7 @@ uvm_map_remap_as_stack(struct proc *p, vaddr_t addr, vaddr_t sz)
* placed upon the region, which prevents an attacker from pivoting
* into pre-placed MAP_STACK space.
*/
error = uvm_mapanon(map, &start, end - start, 0, flags);
if (error != 0)
printf("map stack for pid %d failed\n", p->p_p->ps_pid);
return error;
return uvm_mapanon(map, &start, end - start, 0, flags);
}
/*