summaryrefslogtreecommitdiffstats
path: root/freebsd/sys/kern
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2018-08-20 15:53:03 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2018-09-21 10:29:39 +0200
commit18fa92c2dcc6c52e0bf27d214d80f0c25a89b47d (patch)
treea3020ac5b1f366f2f0920941b589808e435dbcee /freebsd/sys/kern
parentUpdate to FreeBSD head 2017-12-01 (diff)
downloadrtems-libbsd-18fa92c2dcc6c52e0bf27d214d80f0c25a89b47d.tar.bz2
Update to FreeBSD head 2018-02-01
Git mirror commit d079ae0442af8fa3cfd6d7ede190d04e64a2c0d4. Update #3472.
Diffstat (limited to 'freebsd/sys/kern')
-rw-r--r--freebsd/sys/kern/init_main.c13
-rw-r--r--freebsd/sys/kern/kern_mbuf.c7
-rw-r--r--freebsd/sys/kern/kern_synch.c12
-rw-r--r--freebsd/sys/kern/subr_bus.c69
-rw-r--r--freebsd/sys/kern/subr_hash.c6
-rw-r--r--freebsd/sys/kern/subr_prf.c3
-rw-r--r--freebsd/sys/kern/subr_sleepqueue.c3
-rw-r--r--freebsd/sys/kern/sys_generic.c2
-rw-r--r--freebsd/sys/kern/sys_socket.c2
-rw-r--r--freebsd/sys/kern/uipc_usrreq.c4
10 files changed, 90 insertions, 31 deletions
diff --git a/freebsd/sys/kern/init_main.c b/freebsd/sys/kern/init_main.c
index b8961ab6..ea827ebe 100644
--- a/freebsd/sys/kern/init_main.c
+++ b/freebsd/sys/kern/init_main.c
@@ -91,7 +91,6 @@ __FBSDID("$FreeBSD$");
#include <vm/vm_param.h>
#include <vm/pmap.h>
#include <vm/vm_map.h>
-#include <vm/vm_domain.h>
#include <sys/copyright.h>
#include <ddb/ddb.h>
@@ -235,6 +234,8 @@ mi_startup(void)
int verbose;
#endif
+ TSENTER();
+
#ifndef __rtems__
if (boothowto & RB_VERBOSE)
bootverbose++;
@@ -334,6 +335,8 @@ restart:
#endif /* __rtems__ */
}
+ TSEXIT(); /* Here so we don't overlap with start_init. */
+
mtx_assert(&Giant, MA_OWNED | MA_NOTRECURSED);
mtx_unlock(&Giant);
@@ -517,10 +520,7 @@ proc0_init(void *dummy __unused)
td->td_flags = TDF_INMEM;
td->td_pflags = TDP_KTHREAD;
td->td_cpuset = cpuset_thread0();
- vm_domain_policy_init(&td->td_vm_dom_policy);
- vm_domain_policy_set(&td->td_vm_dom_policy, VM_POLICY_NONE, -1);
- vm_domain_policy_init(&p->p_vm_dom_policy);
- vm_domain_policy_set(&p->p_vm_dom_policy, VM_POLICY_NONE, -1);
+ td->td_domain.dr_policy = td->td_cpuset->cs_domain;
prison0_init();
p->p_peers = 0;
p->p_leader = p;
@@ -730,6 +730,8 @@ start_init(void *dummy)
GIANT_REQUIRED;
+ TSENTER(); /* Here so we don't overlap with mi_startup. */
+
td = curthread;
p = td->td_proc;
@@ -823,6 +825,7 @@ start_init(void *dummy)
*/
if ((error = sys_execve(td, &args)) == EJUSTRETURN) {
mtx_unlock(&Giant);
+ TSEXIT();
return;
}
if (error != ENOENT)
diff --git a/freebsd/sys/kern/kern_mbuf.c b/freebsd/sys/kern/kern_mbuf.c
index 0f46259a..78e3528f 100644
--- a/freebsd/sys/kern/kern_mbuf.c
+++ b/freebsd/sys/kern/kern_mbuf.c
@@ -295,7 +295,7 @@ static void mb_dtor_pack(void *, int, void *);
static int mb_zinit_pack(void *, int, int);
static void mb_zfini_pack(void *, int);
static void mb_reclaim(uma_zone_t, int);
-static void *mbuf_jumbo_alloc(uma_zone_t, vm_size_t, uint8_t *, int);
+static void *mbuf_jumbo_alloc(uma_zone_t, vm_size_t, int, uint8_t *, int);
/* Ensure that MSIZE is a power of 2. */
CTASSERT((((MSIZE - 1) ^ MSIZE) + 1) >> 1 == MSIZE);
@@ -400,13 +400,14 @@ SYSINIT(mbuf, SI_SUB_MBUF, SI_ORDER_FIRST, mbuf_init, NULL);
* pages.
*/
static void *
-mbuf_jumbo_alloc(uma_zone_t zone, vm_size_t bytes, uint8_t *flags, int wait)
+mbuf_jumbo_alloc(uma_zone_t zone, vm_size_t bytes, int domain, uint8_t *flags,
+ int wait)
{
/* Inform UMA that this allocator uses kernel_map/object. */
*flags = UMA_SLAB_KERNEL;
#ifndef __rtems__
- return ((void *)kmem_alloc_contig(kernel_arena, bytes, wait,
+ return ((void *)kmem_alloc_contig_domain(domain, bytes, wait,
(vm_paddr_t)0, ~(vm_paddr_t)0, 1, 0, VM_MEMATTR_DEFAULT));
#else /* __rtems__ */
return ((void *)malloc(bytes, M_TEMP, wait));
diff --git a/freebsd/sys/kern/kern_synch.c b/freebsd/sys/kern/kern_synch.c
index d96954c7..f6485a86 100644
--- a/freebsd/sys/kern/kern_synch.c
+++ b/freebsd/sys/kern/kern_synch.c
@@ -139,18 +139,12 @@ _sleep(void *ident, struct lock_object *lock, int priority,
const char *wmesg, sbintime_t sbt, sbintime_t pr, int flags)
{
struct thread *td;
-#ifndef __rtems__
- struct proc *p;
-#endif /* __rtems__ */
struct lock_class *class;
uintptr_t lock_state;
int catch, pri, rval, sleepq_flags;
WITNESS_SAVE_DECL(lock_witness);
td = curthread;
-#ifndef __rtems__
- p = td->td_proc;
-#endif /* __rtems__ */
#ifdef KTRACE
if (KTRPOINT(td, KTR_CSW))
ktrcsw(1, 0, wmesg);
@@ -198,7 +192,7 @@ _sleep(void *ident, struct lock_object *lock, int priority,
sleepq_lock(ident);
CTR5(KTR_PROC, "sleep: thread %ld (pid %ld, %s) on %s (%p)",
- td->td_tid, p->p_pid, td->td_name, wmesg, ident);
+ td->td_tid, td->td_proc->p_pid, td->td_name, wmesg, ident);
if (lock == &Giant.lock_object)
mtx_assert(&Giant, MA_OWNED);
@@ -263,12 +257,10 @@ msleep_spin_sbt(void *ident, struct mtx *mtx, const char *wmesg,
sbintime_t sbt, sbintime_t pr, int flags)
{
struct thread *td;
- struct proc *p;
int rval;
WITNESS_SAVE_DECL(mtx);
td = curthread;
- p = td->td_proc;
KASSERT(mtx != NULL, ("sleeping without a mutex"));
KASSERT(ident != NULL, ("msleep_spin_sbt: NULL ident"));
KASSERT(TD_IS_RUNNING(td), ("msleep_spin_sbt: curthread not running"));
@@ -278,7 +270,7 @@ msleep_spin_sbt(void *ident, struct mtx *mtx, const char *wmesg,
sleepq_lock(ident);
CTR5(KTR_PROC, "msleep_spin: thread %ld (pid %ld, %s) on %s (%p)",
- td->td_tid, p->p_pid, td->td_name, wmesg, ident);
+ td->td_tid, td->td_proc->p_pid, td->td_name, wmesg, ident);
DROP_GIANT();
mtx_assert(mtx, MA_OWNED | MA_NOTRECURSED);
diff --git a/freebsd/sys/kern/subr_bus.c b/freebsd/sys/kern/subr_bus.c
index 09a459aa..8076e7e3 100644
--- a/freebsd/sys/kern/subr_bus.c
+++ b/freebsd/sys/kern/subr_bus.c
@@ -36,6 +36,7 @@ __FBSDID("$FreeBSD$");
#include <sys/param.h>
#include <sys/conf.h>
+#include <sys/eventhandler.h>
#include <sys/filio.h>
#include <sys/lock.h>
#include <sys/kernel.h>
@@ -149,6 +150,10 @@ static MALLOC_DEFINE(M_BUS, "bus", "Bus data structures");
static MALLOC_DEFINE(M_BUS_SC, "bus-sc", "Bus data structures, softc");
#ifndef __rtems__
+EVENTHANDLER_LIST_DEFINE(device_attach);
+EVENTHANDLER_LIST_DEFINE(device_detach);
+EVENTHANDLER_LIST_DEFINE(dev_lookup);
+
static void devctl2_init(void);
#endif /* __rtems__ */
@@ -2981,6 +2986,7 @@ device_attach(device_t dev)
dev->flags &= ~DF_DONENOMATCH;
#ifndef __rtems__
EVENTHANDLER_INVOKE(device_attach, dev);
+ EVENTHANDLER_DIRECT_INVOKE(device_attach, dev);
#endif /* __rtems__ */
devadded(dev);
return (0);
@@ -3016,16 +3022,18 @@ device_detach(device_t dev)
return (0);
#ifndef __rtems__
- EVENTHANDLER_INVOKE(device_detach, dev, EVHDEV_DETACH_BEGIN);
+ EVENTHANDLER_DIRECT_INVOKE(device_detach, dev, EVHDEV_DETACH_BEGIN);
#endif /* __rtems__ */
if ((error = DEVICE_DETACH(dev)) != 0) {
#ifndef __rtems__
- EVENTHANDLER_INVOKE(device_detach, dev, EVHDEV_DETACH_FAILED);
+ EVENTHANDLER_DIRECT_INVOKE(device_detach, dev,
+ EVHDEV_DETACH_FAILED);
#endif /* __rtems__ */
return (error);
} else {
#ifndef __rtems__
- EVENTHANDLER_INVOKE(device_detach, dev, EVHDEV_DETACH_COMPLETE);
+ EVENTHANDLER_DIRECT_INVOKE(device_detach, dev,
+ EVHDEV_DETACH_COMPLETE);
#endif /* __rtems__ */
}
devremoved(dev);
@@ -5099,7 +5107,7 @@ print_device_short(device_t dev, int indent)
if (!dev)
return;
- indentprintf(("device %d: <%s> %sparent,%schildren,%s%s%s%s%s,%sivars,%ssoftc,busy=%d\n",
+ indentprintf(("device %d: <%s> %sparent,%schildren,%s%s%s%s%s%s,%sivars,%ssoftc,busy=%d\n",
dev->unit, dev->desc,
(dev->parent? "":"no "),
(TAILQ_EMPTY(&dev->children)? "no ":""),
@@ -5108,6 +5116,7 @@ print_device_short(device_t dev, int indent)
(dev->flags&DF_WILDCARD? "wildcard,":""),
(dev->flags&DF_DESCMALLOCED? "descmalloced,":""),
(dev->flags&DF_REBID? "rebiddable,":""),
+ (dev->flags&DF_SUSPENDED? "suspended,":""),
(dev->ivars? "":"no "),
(dev->softc? "":"no "),
dev->busy));
@@ -5388,7 +5397,7 @@ find_device(struct devreq *req, device_t *devp)
/* Finally, give device enumerators a chance. */
dev = NULL;
- EVENTHANDLER_INVOKE(dev_lookup, req->dr_name, &dev);
+ EVENTHANDLER_DIRECT_INVOKE(dev_lookup, req->dr_name, &dev);
if (dev == NULL)
return (ENOENT);
*devp = dev;
@@ -5655,6 +5664,56 @@ devctl2_init(void)
UID_ROOT, GID_WHEEL, 0600, "devctl2");
}
+/*
+ * APIs to manage deprecation and obsolescence.
+ */
+static int obsolete_panic = 0;
+SYSCTL_INT(_debug, OID_AUTO, obsolete_panic, CTLFLAG_RWTUN, &obsolete_panic, 0,
+ "Bus debug level");
+/* 0 - don't panic, 1 - panic if already obsolete, 2 - panic if deprecated */
+static void
+gone_panic(int major, int running, const char *msg)
+{
+
+ switch (obsolete_panic)
+ {
+ case 0:
+ return;
+ case 1:
+ if (running < major)
+ return;
+ /* FALLTHROUGH */
+ default:
+ panic("%s", msg);
+ }
+}
+
+void
+_gone_in(int major, const char *msg)
+{
+
+ gone_panic(major, P_OSREL_MAJOR(__FreeBSD_version), msg);
+ if (P_OSREL_MAJOR(__FreeBSD_version) >= major)
+ printf("Obsolete code will removed soon: %s\n", msg);
+ else if (P_OSREL_MAJOR(__FreeBSD_version) + 1 == major)
+ printf("Deprecated code (to be removed in FreeBSD %d): %s\n",
+ major, msg);
+}
+
+void
+_gone_in_dev(device_t dev, int major, const char *msg)
+{
+
+ gone_panic(major, P_OSREL_MAJOR(__FreeBSD_version), msg);
+ if (P_OSREL_MAJOR(__FreeBSD_version) >= major)
+ device_printf(dev,
+ "Obsolete code will removed soon: %s\n", msg);
+ else if (P_OSREL_MAJOR(__FreeBSD_version) + 1 == major)
+ device_printf(dev,
+ "Deprecated code (to be removed in FreeBSD %d): %s\n",
+ major, msg);
+}
+
#ifdef DDB
DB_SHOW_COMMAND(device, db_show_device)
{
diff --git a/freebsd/sys/kern/subr_hash.c b/freebsd/sys/kern/subr_hash.c
index 488d8bcd..dd442931 100644
--- a/freebsd/sys/kern/subr_hash.c
+++ b/freebsd/sys/kern/subr_hash.c
@@ -59,9 +59,8 @@ void *
hashinit_flags(int elements, struct malloc_type *type, u_long *hashmask,
int flags)
{
- long hashsize;
+ long hashsize, i;
LIST_HEAD(generic, generic) *hashtbl;
- int i;
KASSERT(elements > 0, ("%s: bad elements", __func__));
/* Exactly one of HASH_WAITOK and HASH_NOWAIT must be set. */
@@ -116,9 +115,8 @@ static const int primes[] = { 1, 13, 31, 61, 127, 251, 509, 761, 1021, 1531,
void *
phashinit_flags(int elements, struct malloc_type *type, u_long *nentries, int flags)
{
- long hashsize;
+ long hashsize, i;
LIST_HEAD(generic, generic) *hashtbl;
- int i;
KASSERT(elements > 0, ("%s: bad elements", __func__));
/* Exactly one of HASH_WAITOK and HASH_NOWAIT must be set. */
diff --git a/freebsd/sys/kern/subr_prf.c b/freebsd/sys/kern/subr_prf.c
index 0405b369..12a0825d 100644
--- a/freebsd/sys/kern/subr_prf.c
+++ b/freebsd/sys/kern/subr_prf.c
@@ -137,6 +137,7 @@ static void snprintf_func(int ch, void *arg);
#ifndef __rtems__
static int msgbufmapped; /* Set when safe to use msgbuf */
int msgbuftrigger;
+struct msgbuf *msgbufp;
static int log_console_output = 1;
SYSCTL_INT(_kern, OID_AUTO, log_console_output, CTLFLAG_RWTUN,
@@ -290,6 +291,7 @@ _vprintf(int level, int flags, const char *fmt, va_list ap)
char bufr[PRINTF_BUFR_SIZE];
#endif
+ TSENTER();
pca.tty = NULL;
pca.pri = level;
pca.flags = flags;
@@ -317,6 +319,7 @@ _vprintf(int level, int flags, const char *fmt, va_list ap)
}
#endif
+ TSEXIT();
return (retval);
}
#else /* __rtems__ */
diff --git a/freebsd/sys/kern/subr_sleepqueue.c b/freebsd/sys/kern/subr_sleepqueue.c
index fa33af86..6ecefc70 100644
--- a/freebsd/sys/kern/subr_sleepqueue.c
+++ b/freebsd/sys/kern/subr_sleepqueue.c
@@ -1441,11 +1441,10 @@ sleepq_sbuf_print_stacks(struct sbuf *sb, void *wchan, int queue,
struct stack **st;
struct sbuf **td_infos;
int i, stack_idx, error, stacks_to_allocate;
- bool finished, partial_print;
+ bool finished;
error = 0;
finished = false;
- partial_print = false;
KASSERT(wchan != NULL, ("%s: invalid NULL wait channel", __func__));
MPASS((queue >= 0) && (queue < NR_SLEEPQS));
diff --git a/freebsd/sys/kern/sys_generic.c b/freebsd/sys/kern/sys_generic.c
index 118b4c77..1c46bd29 100644
--- a/freebsd/sys/kern/sys_generic.c
+++ b/freebsd/sys/kern/sys_generic.c
@@ -2004,6 +2004,8 @@ seltdfini(struct thread *td)
if (stp->st_free2)
uma_zfree(selfd_zone, stp->st_free2);
td->td_sel = NULL;
+ cv_destroy(&stp->st_wait);
+ mtx_destroy(&stp->st_mtx);
free(stp, M_SELECT);
}
diff --git a/freebsd/sys/kern/sys_socket.c b/freebsd/sys/kern/sys_socket.c
index 974f7eec..4f4ce99e 100644
--- a/freebsd/sys/kern/sys_socket.c
+++ b/freebsd/sys/kern/sys_socket.c
@@ -585,6 +585,7 @@ soo_fill_kinfo(struct file *fp, struct kinfo_file *kif, struct filedesc *fdp)
kif->kf_type = KF_TYPE_SOCKET;
so = fp->f_data;
+ CURVNET_SET(so->so_vnet);
kif->kf_un.kf_sock.kf_sock_domain0 =
so->so_proto->pr_domain->dom_family;
kif->kf_un.kf_sock.kf_sock_type0 = so->so_type;
@@ -637,6 +638,7 @@ soo_fill_kinfo(struct file *fp, struct kinfo_file *kif, struct filedesc *fdp)
}
strncpy(kif->kf_path, so->so_proto->pr_domain->dom_name,
sizeof(kif->kf_path));
+ CURVNET_RESTORE();
return (0);
}
diff --git a/freebsd/sys/kern/uipc_usrreq.c b/freebsd/sys/kern/uipc_usrreq.c
index 9f7e545f..7849be9d 100644
--- a/freebsd/sys/kern/uipc_usrreq.c
+++ b/freebsd/sys/kern/uipc_usrreq.c
@@ -1724,13 +1724,13 @@ unp_disconnect(struct unpcb *unp, struct unpcb *unp2)
static int
unp_pcblist(SYSCTL_HANDLER_ARGS)
{
- int error, i, n;
- int freeunp;
struct unpcb *unp, **unp_list;
unp_gen_t gencnt;
struct xunpgen *xug;
struct unp_head *head;
struct xunpcb *xu;
+ u_int i;
+ int error, freeunp, n;
switch ((intptr_t)arg1) {
case SOCK_STREAM: