sync code with last improvements from OpenBSD
This commit is contained in:
parent
f463301edc
commit
96ee847eba
36 changed files with 904 additions and 117 deletions
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: rkclock.c,v 1.82 2023/07/09 16:33:49 patrick Exp $ */
|
||||
/* $OpenBSD: rkclock.c,v 1.83 2023/09/29 15:51:48 kettenis Exp $ */
|
||||
/*
|
||||
* Copyright (c) 2017, 2018 Mark Kettenis <kettenis@openbsd.org>
|
||||
*
|
||||
|
@ -2952,6 +2952,24 @@ rk3399_enable(void *cookie, uint32_t *cells, int on)
|
|||
}
|
||||
|
||||
switch (idx) {
|
||||
case RK3399_CLK_USB2PHY0_REF:
|
||||
HWRITE4(sc, RK3399_CRU_CLKGATE_CON(6), (5 << 0) << 16);
|
||||
break;
|
||||
case RK3399_CLK_USB2PHY1_REF:
|
||||
HWRITE4(sc, RK3399_CRU_CLKGATE_CON(6), (6 << 0) << 16);
|
||||
break;
|
||||
case RK3399_CLK_UPHY0_TCPDPHY_REF:
|
||||
HWRITE4(sc, RK3399_CRU_CLKGATE_CON(13), (4 << 0) << 16);
|
||||
break;
|
||||
case RK3399_CLK_UPHY0_TCPDCORE:
|
||||
HWRITE4(sc, RK3399_CRU_CLKGATE_CON(13), (5 << 0) << 16);
|
||||
break;
|
||||
case RK3399_CLK_UPHY1_TCPDPHY_REF:
|
||||
HWRITE4(sc, RK3399_CRU_CLKGATE_CON(13), (6 << 0) << 16);
|
||||
break;
|
||||
case RK3399_CLK_UPHY1_TCPDCORE:
|
||||
HWRITE4(sc, RK3399_CRU_CLKGATE_CON(13), (7 << 0) << 16);
|
||||
break;
|
||||
case RK3399_ACLK_GMAC:
|
||||
HWRITE4(sc, RK3399_CRU_CLKGATE_CON(32), (1 << 0) << 16);
|
||||
break;
|
||||
|
|
|
@ -187,7 +187,11 @@
|
|||
#define RK3399_CLK_MAC_RX 103
|
||||
#define RK3399_CLK_MAC_TX 104
|
||||
#define RK3399_CLK_MAC 105
|
||||
#define RK3399_CLK_USB2PHY0_REF 123
|
||||
#define RK3399_CLK_USB2PHY1_REF 124
|
||||
#define RK3399_CLK_UPHY0_TCPDPHY_REF 125
|
||||
#define RK3399_CLK_UPHY0_TCPDCORE 126
|
||||
#define RK3399_CLK_UPHY1_TCPDPHY_REF 127
|
||||
#define RK3399_CLK_UPHY1_TCPDCORE 128
|
||||
#define RK3399_CLK_USB3OTG0_REF 129
|
||||
#define RK3399_CLK_USB3OTG1_REF 130
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: rkusbphy.c,v 1.2 2023/04/03 01:21:31 dlg Exp $ */
|
||||
/* $OpenBSD: rkusbphy.c,v 1.4 2023/09/29 17:30:35 kettenis Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2023 David Gwynne <dlg@openbsd.org>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: kern_exec.c,v 1.250 2023/07/10 03:31:57 guenther Exp $ */
|
||||
/* $OpenBSD: kern_exec.c,v 1.251 2023/09/29 12:47:34 claudio Exp $ */
|
||||
/* $NetBSD: kern_exec.c,v 1.75 1996/02/09 18:59:28 christos Exp $ */
|
||||
|
||||
/*-
|
||||
|
@ -284,7 +284,7 @@ sys_execve(struct proc *p, void *v, register_t *retval)
|
|||
}
|
||||
|
||||
/* get other threads to stop */
|
||||
if ((error = single_thread_set(p, SINGLE_UNWIND, 1)))
|
||||
if ((error = single_thread_set(p, SINGLE_UNWIND | SINGLE_DEEP)))
|
||||
return (error);
|
||||
|
||||
/*
|
||||
|
@ -444,7 +444,7 @@ sys_execve(struct proc *p, void *v, register_t *retval)
|
|||
* we're committed: any further errors will kill the process, so
|
||||
* kill the other threads now.
|
||||
*/
|
||||
single_thread_set(p, SINGLE_EXIT, 1);
|
||||
single_thread_set(p, SINGLE_EXIT);
|
||||
|
||||
/*
|
||||
* Prepare vmspace for remapping. Note that uvmspace_exec can replace
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: kern_exit.c,v 1.216 2023/09/21 13:49:25 claudio Exp $ */
|
||||
/* $OpenBSD: kern_exit.c,v 1.217 2023/09/29 12:47:34 claudio Exp $ */
|
||||
/* $NetBSD: kern_exit.c,v 1.39 1996/04/22 01:38:25 christos Exp $ */
|
||||
|
||||
/*
|
||||
|
@ -131,7 +131,7 @@ exit1(struct proc *p, int xexit, int xsig, int flags)
|
|||
} else {
|
||||
/* nope, multi-threaded */
|
||||
if (flags == EXIT_NORMAL)
|
||||
single_thread_set(p, SINGLE_EXIT, 1);
|
||||
single_thread_set(p, SINGLE_EXIT);
|
||||
else if (flags == EXIT_THREAD)
|
||||
single_thread_check(p, 0);
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: kern_pledge.c,v 1.308 2023/09/19 10:43:33 claudio Exp $ */
|
||||
/* $OpenBSD: kern_pledge.c,v 1.309 2023/09/29 12:47:34 claudio Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2015 Nicholas Marriott <nicm@openbsd.org>
|
||||
|
@ -578,9 +578,9 @@ pledge_fail(struct proc *p, int error, uint64_t code)
|
|||
p->p_p->ps_comm, p->p_p->ps_pid, codes, p->p_pledge_syscall);
|
||||
p->p_p->ps_acflag |= APLEDGE;
|
||||
|
||||
/* Stop threads immediately, because this process is suspect */
|
||||
/* Try to stop threads immediately, because this process is suspect */
|
||||
if (P_HASSIBLING(p))
|
||||
single_thread_set(p, SINGLE_UNWIND, 1);
|
||||
single_thread_set(p, SINGLE_UNWIND | SINGLE_DEEP);
|
||||
|
||||
/* Send uncatchable SIGABRT for coredump */
|
||||
sigabort(p);
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: kern_sig.c,v 1.318 2023/09/19 10:43:33 claudio Exp $ */
|
||||
/* $OpenBSD: kern_sig.c,v 1.319 2023/09/29 12:47:34 claudio Exp $ */
|
||||
/* $NetBSD: kern_sig.c,v 1.54 1996/04/22 01:38:32 christos Exp $ */
|
||||
|
||||
/*
|
||||
|
@ -840,7 +840,7 @@ trapsignal(struct proc *p, int signum, u_long trapno, int code,
|
|||
signum != SIGKILL && (p->p_sigmask & mask) != 0) {
|
||||
int s;
|
||||
|
||||
single_thread_set(p, SINGLE_SUSPEND, 0);
|
||||
single_thread_set(p, SINGLE_SUSPEND | SINGLE_NOWAIT);
|
||||
pr->ps_xsig = signum;
|
||||
|
||||
SCHED_LOCK(s);
|
||||
|
@ -1290,7 +1290,7 @@ cursig(struct proc *p, struct sigctx *sctx)
|
|||
*/
|
||||
if (((pr->ps_flags & (PS_TRACED | PS_PPWAIT)) == PS_TRACED) &&
|
||||
signum != SIGKILL) {
|
||||
single_thread_set(p, SINGLE_SUSPEND, 0);
|
||||
single_thread_set(p, SINGLE_SUSPEND | SINGLE_NOWAIT);
|
||||
pr->ps_xsig = signum;
|
||||
|
||||
SCHED_LOCK(s);
|
||||
|
@ -1559,7 +1559,7 @@ sigexit(struct proc *p, int signum)
|
|||
|
||||
/* if there are other threads, pause them */
|
||||
if (P_HASSIBLING(p))
|
||||
single_thread_set(p, SINGLE_UNWIND, 1);
|
||||
single_thread_set(p, SINGLE_UNWIND);
|
||||
|
||||
if (coredump(p) == 0)
|
||||
signum |= WCOREFLAG;
|
||||
|
@ -2066,16 +2066,16 @@ single_thread_check(struct proc *p, int deep)
|
|||
* - SINGLE_EXIT: unwind to kernel boundary and exit
|
||||
*/
|
||||
int
|
||||
single_thread_set(struct proc *p, enum single_thread_mode mode, int wait)
|
||||
single_thread_set(struct proc *p, int flags)
|
||||
{
|
||||
struct process *pr = p->p_p;
|
||||
struct proc *q;
|
||||
int error, s;
|
||||
int error, s, mode = flags & SINGLE_MASK;
|
||||
|
||||
KASSERT(curproc == p);
|
||||
|
||||
SCHED_LOCK(s);
|
||||
error = single_thread_check_locked(p, (mode == SINGLE_UNWIND), s);
|
||||
error = single_thread_check_locked(p, flags & SINGLE_DEEP, s);
|
||||
if (error) {
|
||||
SCHED_UNLOCK(s);
|
||||
return error;
|
||||
|
@ -2146,7 +2146,7 @@ single_thread_set(struct proc *p, enum single_thread_mode mode, int wait)
|
|||
}
|
||||
SCHED_UNLOCK(s);
|
||||
|
||||
if (wait)
|
||||
if ((flags & SINGLE_NOWAIT) == 0)
|
||||
single_thread_wait(pr, 1);
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: pfkeyv2.c,v 1.257 2023/08/07 03:35:06 dlg Exp $ */
|
||||
/* $OpenBSD: pfkeyv2.c,v 1.258 2023/09/29 18:40:08 tobhe Exp $ */
|
||||
|
||||
/*
|
||||
* @(#)COPYRIGHT 1.1 (NRL) 17 January 1995
|
||||
|
@ -1162,6 +1162,10 @@ pfkeyv2_dosend(struct socket *so, void *message, int len)
|
|||
|
||||
rdomain = kp->kcb_rdomain;
|
||||
|
||||
/* Validate message format */
|
||||
if ((rval = pfkeyv2_parsemessage(message, len, headers)) != 0)
|
||||
goto ret;
|
||||
|
||||
/* If we have any promiscuous listeners, send them a copy of the message */
|
||||
if (promisc) {
|
||||
struct mbuf *packet;
|
||||
|
@ -1208,10 +1212,6 @@ pfkeyv2_dosend(struct socket *so, void *message, int len)
|
|||
freeme_sz = 0;
|
||||
}
|
||||
|
||||
/* Validate message format */
|
||||
if ((rval = pfkeyv2_parsemessage(message, len, headers)) != 0)
|
||||
goto ret;
|
||||
|
||||
/* use specified rdomain */
|
||||
srdomain = (struct sadb_x_rdomain *) headers[SADB_X_EXT_RDOMAIN];
|
||||
if (srdomain) {
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: pfkeyv2_parsemessage.c,v 1.61 2023/08/07 03:35:06 dlg Exp $ */
|
||||
/* $OpenBSD: pfkeyv2_parsemessage.c,v 1.62 2023/09/29 18:45:42 tobhe Exp $ */
|
||||
|
||||
/*
|
||||
* @(#)COPYRIGHT 1.1 (NRL) 17 January 1995
|
||||
|
@ -327,16 +327,8 @@ pfkeyv2_parsemessage(void *p, int len, void **headers)
|
|||
}
|
||||
|
||||
if (sadb_msg->sadb_msg_errno) {
|
||||
if (left) {
|
||||
DPRINTF("too-large error message");
|
||||
return (EINVAL);
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
if (sadb_msg->sadb_msg_type == SADB_X_PROMISC) {
|
||||
DPRINTF("message type promiscuous");
|
||||
return (0);
|
||||
DPRINTF("errno set");
|
||||
return (EINVAL);
|
||||
}
|
||||
|
||||
allow = sadb_exts_allowed_in[sadb_msg->sadb_msg_type];
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: proc.h,v 1.351 2023/09/13 14:25:49 claudio Exp $ */
|
||||
/* $OpenBSD: proc.h,v 1.352 2023/09/29 12:47:34 claudio Exp $ */
|
||||
/* $NetBSD: proc.h,v 1.44 1996/04/22 01:23:21 christos Exp $ */
|
||||
|
||||
/*-
|
||||
|
@ -571,12 +571,15 @@ refreshcreds(struct proc *p)
|
|||
dorefreshcreds(pr, p);
|
||||
}
|
||||
|
||||
enum single_thread_mode {
|
||||
SINGLE_SUSPEND, /* other threads to stop wherever they are */
|
||||
SINGLE_UNWIND, /* other threads to unwind and stop */
|
||||
SINGLE_EXIT /* other threads to unwind and then exit */
|
||||
};
|
||||
int single_thread_set(struct proc *, enum single_thread_mode, int);
|
||||
#define SINGLE_SUSPEND 0x01 /* other threads to stop wherever they are */
|
||||
#define SINGLE_UNWIND 0x02 /* other threads to unwind and stop */
|
||||
#define SINGLE_EXIT 0x03 /* other threads to unwind and then exit */
|
||||
#define SINGLE_MASK 0x0f
|
||||
/* extra flags for single_thread_set */
|
||||
#define SINGLE_DEEP 0x10 /* call is in deep */
|
||||
#define SINGLE_NOWAIT 0x20 /* do not wait for other threads to stop */
|
||||
|
||||
int single_thread_set(struct proc *, int);
|
||||
int single_thread_wait(struct process *, int);
|
||||
void single_thread_clear(struct proc *, int);
|
||||
int single_thread_check(struct proc *, int);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue