summaryrefslogtreecommitdiff
path: root/sys/kern
AgeCommit message (Collapse)Author
2021-02-27Replace stray direct call of f_event with filter_event().Visa Hankala
This does not change the current behaviour, but filterops should be invoked through filter_*() for consistency.
2021-02-25let m_copydata use a void * instead of caddr_tDavid Gwynne
i'm not a fan of having to cast to caddr_t when we have modern inventions like void *s we can take advantage of. ok claudio@ mvs@ bluhm@
2021-02-24kqueue: Revise filterops interfaceVisa Hankala
Extend kqueue's filterops interface with new callbacks so that it becomes easier to use with fine-grained locking. The new interface delegates the serialization of kn_event access to event sources. Now kqueue uses filterops callbacks to read or write kn_event. This hides event sources' locking patterns from kqueue, and allows clean implementation of atomic read-and-clear for EV_CLEAR, for instance. There are so many existing filterops instances that converting all of them in one go is tricky. This patch adds a wrapper mechanism that kqueue uses when the new callbacks are missing. The new filterops interface has been influenced by XNU's kqueue. OK mpi@ semarie@
2021-02-24In sorflush() use m_purge() instead of handrolling it.Alexander Bluhm
no objections mvs@
2021-02-23remove unused malloc_roundup()Jonathan Gray
2021-02-23timecounting: use C99-style initialization for all timecounter structscheloha
The timecounter struct is large and I think it may change in the future. Changing it later will be easier if we use C99-style initialization for all timecounter structs. It also makes reading the code a bit easier. For reasons I cannot explain, switching to C99-style initialization sometimes changes the hash of the resulting object file, even though the resulting struct should be the same. So there is a binary change here, but only sometimes. No behavior should change in either case. I can't compile-test this everywhere but I have been staring at the diff for days now and I'm relatively confident this will not break compilation. Fingers crossed. ok gnezdo@
2021-02-22Move UNIX socket's garbage collector to `systqmp'. It touches nothingmvs
which requires kernel lock to be held. ok mpi@
2021-02-18Release mbuf(9) chain with a simple m_freem(9) loop in sorflush().mvs
Passing local copy of socket to sbrelease() is too complicated to just free receive buffer. We don't allocate large object on the stack. Also we don't pass unlocked socket to soassertlocked() within sbdrop(). This was not triggered because we lock the whole layer with one lock. Also sorflush() is now private to kern/uipc_socket.c, so it's definition was made to be in accordance. ok claudio@ mpi@
2021-02-15Move single_thread_set() out of KERNEL_LOCK().Martin Pieuchot
Use the SCHED_LOCK() to ensure `ps_thread' isn't being modified by a sibling when entering tsleep(9) w/o KERNEL_LOCK(). ok visa@
2021-02-11sbdrop(): use NULL instead of 0 in pointer assignmentmvs
ok bluhm@
2021-02-11"proc: table is full" actually means thread table is full; ok mpi@ sthen@Otto Moerbeek
2021-02-11In the various open functions reduce the fdplock() to only span over theClaudio Jeker
function which need the lock (falloc, fdinsert, fdremove). In most cases it is not correct to hold the lock while calling VFS functions or e.g. closef since those aquire or release long lived VFS locks. OK visa@ mvs@
2021-02-10Move UNIX domain sockets out of kernel lock. The new `unp_lock' rwlock(9)mvs
used as solock()'s backend to protect the whole layer. With feedback from mpi@. ok bluhm@ claudio@
2021-02-08Revert the convertion of per-process thread into a SMR_TAILQ.Martin Pieuchot
We did not reach a consensus about using SMR to unlock single_thread_set() so there's no point in keeping this change.
2021-02-08Do not hold onto the fdplock longer then needed. Release the lock afterClaudio Jeker
the initial falloc() calls and then regrab it for the fdinsert() or fdremove() calls respectiviely. Also move closef() outside of the lock. This replaces the previously reverted lock order change that was reverted. OK mvs@ visa@
2021-02-08Simplify sleep_setup API to two operations in preparation for splittingMartin Pieuchot
the SCHED_LOCK(). Putting a thread on a sleep queue is reduce to the following: sleep_setup(); /* check condition or release lock */ sleep_finish(); Previous version ok cheloha@, jmatthew@, ok claudio@
2021-02-04Revert previous commit. The vnode returned by ptm_vn_open() is open andClaudio Jeker
can not simply be vrele()-ed on error. The code currently depends on closef() to do the cleanup. Reported-by: syzbot+b0e18235e96adf81883d@syzkaller.appspotmail.com
2021-02-04Prevent a lock order issue by shuffling code around. Instead of allocatingClaudio Jeker
the file descriptors early do it late. This way the fdplock is not held during the VFS operations. OK mvs@
2021-02-03Add SIOCAIFADDR_IN and SIOCDIFADDR_IN to the wroute pledgetobhe
to allow setting and removing IPv4 addresses. Needed for future iked(8) improvements. Discussed with sthen@ and florian@ ok bluhm@ deraadt@
2021-01-29Use NULL instead of 0 to clear v_socket pointer (which actually clears allClaudio Jeker
of the v_un pointers). OK jsg@ mvs@
2021-01-29Whitespace.rob
2021-01-28Show when witness(4) has run out of lock order data entries.Visa Hankala
This makes it clearer why lock order traces are sometimes not displayed. Prompted by a question from, and OK anton@
2021-01-27kqueue: Fix termination assertVisa Hankala
When a kqueue file is closed, the kqueue can still have threads scanning it. Consequently, kqueue_terminate() can see scan markers in the event queue. These markers are removed when the scanning threads leave the kqueue. Take this into account when checking the queue's state, to avoid a panic when kqueue is closed from under a thread. OK anton@ Reported-by: syzbot+757c60a2aa1125137cce@syzkaller.appspotmail.com
2021-01-20If pledge "wroute" is missing for setsockopt SO_RTABLE, print failureAlexander Bluhm
message "wroute" into dmesg. Since revision 1.263 pledge "wroute" allows to change the routing table of a socket. OK florian@ semarie@
2021-01-19kern/subr_disk.c: convert ifunit() to if_unit(9)mvs
ok dlg@
2021-01-19/etc/malloc.conf path-approval in pledge is no longer needed since 6.5Theo de Raadt
moved option control into a sysctl. reminder that we can delete this from benjamin baier
2021-01-18regenmvs
2021-01-18Unlock getppid(2).mvs
ok mpi@
2021-01-17Cache parent's pid as `ps_ppid' and use it instead of `ps_pptr->ps_pid'.mvs
This allows us to unlock getppid(2). ok mpi@
2021-01-17kqueue: Revise fd close notificationVisa Hankala
Deliver file descriptor close notification for __EV_POLL knotes through struct kevent that kqueue_scan() returns. This replaces the previous way of returning EBADF from kqueue_scan(), making it easier to determine what exactly has changed. When a file descriptor is closed, its __EV_POLL knotes are turned into one-shot events and queued for delivery. These knotes are "unregistered" as they are reachable only through the queue of active events. This reduces interference with the normal workings of kqueue. However, more care is needed to avoid leaking knotes. In addition, the unregistering removes a limit on the number of issued knotes. To prevent accumulation of pending fd close notifications, kqpoll_init() flushes the active queue at the start of a kqpoll scan. OK mpi@
2021-01-17Replace SB_KNOTE and sb_flagsintr with direct checking of klist.Visa Hankala
OK mpi@ as part of a larger diff
2021-01-14syncer_thread: sleep without lboltcheloha
The syncer_thread() uses lbolt to perform periodic execution. We can do this without lbolt. - Adding a local wakeup(9) channel (syncer_chan) and sleep on it. - Use a local copy of getnsecuptime() to get 1/hz resolution for time measurements. This is much better than using gettime(9), which is wholly unsuitable for this use case. Measure how long we spend in the loop and use this to calculate how long to sleep until the next execution. NB: getnsecuptime() is probably ready to be moved to kern_tc.c and documented. - Using the system uptime instead of the UTC time avoids issues with time jumps. ok mpi@
2021-01-13kernel, sysctl(8): remove dead variable: tickadjcheloha
The global "tickadj" variable is a remnant of the old NTP adjustment code we used in the kernel before the current timecounter subsystem was imported from FreeBSD circa 2004 or 2005. Fifteen years hence it is completely vestigial and we can remove it. We probably should have removed it long ago but I guess it slipped through the cracks. FreeBSD removed it in 2002: https://cgit.freebsd.org/src/commit/?id=e1d970f1811e5e1e9c912c032acdcec6521b2a6d NetBSD and DragonflyBSD can probably remove it, too. We export tickadj via the kern.clockrate sysctl(2), so update sysctl.2 and sysctl(8) accordingly. Hypothetically this change could break someone's sysctl(8) parsing script. I don't think that's very likely. ok mvs@
2021-01-13Convert mbuf type KDASSERT() to a proper KASSERT() in m_get(9).Alexander Bluhm
Should prevent to use uninitialized value as bogus counter index. OK mvs@ claudio@ anton@
2021-01-11New rw_obj_init() API providing reference-counted rwlock.Martin Pieuchot
Original port from NetBSD by guenther@, required for upcoming amap & anon locking. ok kettenis@
2021-01-11Simplify sleep signal handling a bit by introducing sleep_signal_check().Claudio Jeker
The common code is moved to sleep_signal_check() and instead of multiple state variables for sls_sig and sls_unwind only one sls_sigerr is set. This simplifies the checks in sleep_finish_signal() a great bit. Idea from and OK mpi@
2021-01-09Split hierarchical calls into kern_sysctl_dirsgnezdo
Removed a rash of +/-1 and made both functions shorter and more focused. OK millert@
2021-01-09Reduce case duplication in kern_sysctlgnezdo
This changes amd64 GENERIC.MP .text size of kern_sysctl.o from 6440 to 6400. Surprisingly, RAMDISK grows from 1645 to 1678. OK millert@, mglocker@
2021-01-09Enforce range with sysctl_int_bounded in sysctl_wdoggnezdo
OK millert@
2021-01-09Enforce range with sysctl_int_bounded in witness_sysctl_watchgnezdo
Makes previously explicit checking less verbose. OK millert@
2021-01-09Use sysctl_int_bounded in sysctl_hwsmtgnezdo
Prefer error reporting is to silent clipping. OK millert@
2021-01-09If the loop check in somove(9) goes to release without setting anAlexander Bluhm
error, a broadcast mbuf will stay in the socket buffer forever. This is bad as multiple mbufs can use up all the space. Better report ELOOP, dissolve splicing, and let userland handle it. OK anton@
2021-01-09Replace a custom linked list with SLIST.Visa Hankala
2021-01-09Replace SIMPLEQ with SLIST because the code does not need a queue.Visa Hankala
2021-01-09Remove unnecessary relocking of w_mtx as panic() should not return.Visa Hankala
2021-01-08Lock kernel before raising SPL in klist_lock()Visa Hankala
This prevents unwanted spinning with interrupts disabled. At the moment, this code is only invoked through klist_invalidate() and the callers should already hold the kernel lock. Also, one could argue that in MP-unsafe contexts klist_lock() should only assert for the kernel lock.
2021-01-08Fix boot-time crash on sparc64Visa Hankala
On sparc64, initmsgbuf() is invoked before curcpu() is usable on the boot processor. Consequently, it is unsafe to use mutexes during the message buffer initialization. Avoid such use by skipping log_mtx when appending a newline from initmsgbuf(). Use mbp instead of msgbufp as the buffer argument to the putchar routine for consistency. Bug reported and fix suggested by miod@
2021-01-08Revert "Implement select(2) and pselect(2) on top of kqueue."Visa Hankala
The use of kqueue as backend has introduced a significant regression in the performance of select(2), so go back to using the original code. Some additional management overhead is to be expected when using kqueue. However, the overhead of the current implementation is too high. Reported by bluhm@ on bugs@
2021-01-07Adjust comment about klist_invalidate()Visa Hankala
2021-01-06Add dt(4) TRACEPOINTs for pool_get() and pool_put(), this is simmilar to theClaudio Jeker
ones added to malloc() and free(). Pass the struct pool pointer as argv1 since it is currently not possible to pass the pool name to btrace. OK mpi@