#
279b9aab |
| 21-Oct-2019 |
Gleb Smirnoff <glebius@FreeBSD.org> |
Remove epoch tracker from struct thread. It was an ugly crutch to emulate locking semantics for if_addr_rlock() and if_maddr_rlock().
|
#
f6eccf96 |
| 14-Oct-2019 |
Gleb Smirnoff <glebius@FreeBSD.org> |
Since EPOCH_TRACE had been moved to opt_global.h, we don't need to waste extra space in struct thread.
|
#
668ee101 |
| 26-Sep-2019 |
Dimitry Andric <dim@FreeBSD.org> |
Merge ^/head r352587 through r352763.
|
#
dd902d01 |
| 25-Sep-2019 |
Gleb Smirnoff <glebius@FreeBSD.org> |
Add debugging facility EPOCH_TRACE that checks that epochs entered are properly nested and warns about recursive entrances. Unlike with locks, there is nothing fundamentally wrong with such use, the
Add debugging facility EPOCH_TRACE that checks that epochs entered are properly nested and warns about recursive entrances. Unlike with locks, there is nothing fundamentally wrong with such use, the intent of tracer is to help to review complex epoch-protected code paths, and we mean the network stack here.
Reviewed by: hselasky Sponsored by: Netflix Pull Request: https://reviews.freebsd.org/D21610
show more ...
|
#
a63915c2 |
| 28-Jul-2019 |
Alan Somers <asomers@FreeBSD.org> |
MFHead @r350386
Sponsored by: The FreeBSD Foundation
|
#
1af9474b |
| 15-Jul-2019 |
John Baldwin <jhb@FreeBSD.org> |
Always set td_errno to the error value of a system call.
Early errors prior to a system call did not set td_errno. This commit sets td_errno for all errors during syscallenter(). As a result, sysc
Always set td_errno to the error value of a system call.
Early errors prior to a system call did not set td_errno. This commit sets td_errno for all errors during syscallenter(). As a result, syscallret() can now always use td_errno without checking TDP_NERRNO.
Reviewed by: kib MFC after: 1 month Sponsored by: DARPA Differential Revision: https://reviews.freebsd.org/D20898
show more ...
|
Revision tags: release/11.3.0 |
|
#
0269ae4c |
| 06-Jun-2019 |
Alan Somers <asomers@FreeBSD.org> |
MFHead @348740
Sponsored by: The FreeBSD Foundation
|
#
4d3b28bc |
| 16-May-2019 |
Konstantin Belousov <kib@FreeBSD.org> |
amd64 pmap: rework delayed invalidation, removing global mutex.
For machines having cmpxcgh16b instruction, i.e. everything but very early Athlons, provide lockless implementation of delayed invalid
amd64 pmap: rework delayed invalidation, removing global mutex.
For machines having cmpxcgh16b instruction, i.e. everything but very early Athlons, provide lockless implementation of delayed invalidation.
The implementation maintains lock-less single-linked list with the trick from the T.L. Harris article about volatile mark of the elements being removed. Double-CAS is used to atomically update both link and generation. New thread starting DI appends itself to the end of the queue, setting the generation to the generation of the last element +1. On DI finish, thread donates its generation to the previous element. The generation of the fake head of the list is the last passed DI generation. Basically, the implementation is a queued spinlock but without spinlock.
Many thanks both to Peter Holm and Mark Johnson for keeping with me while I produced intermediate versions of the patch.
Reviewed by: markj Tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 1 month MFC note: td_md.md_invl_gen should go to the end of struct thread Differential revision: https://reviews.freebsd.org/D19630
show more ...
|
#
7648bc9f |
| 13-May-2019 |
Alan Somers <asomers@FreeBSD.org> |
MFHead @347527
Sponsored by: The FreeBSD Foundation
|
#
83bf5ec3 |
| 25-Apr-2019 |
John Baldwin <jhb@FreeBSD.org> |
Remove p_code from struct proc.
Contrary to the comments, it was never used by core dumps or debuggers. Instead, it used to hold the signal code of a pending signal, but that was replaced by the 'k
Remove p_code from struct proc.
Contrary to the comments, it was never used by core dumps or debuggers. Instead, it used to hold the signal code of a pending signal, but that was replaced by the 'ksi_code' member of ksiginfo_t when signal information was reworked in 7.0.
Reviewed by: kib Differential Revision: https://reviews.freebsd.org/D20047
show more ...
|
#
2aaf9152 |
| 18-Mar-2019 |
Alan Somers <asomers@FreeBSD.org> |
MFHead@r345275
|
#
6f1fe330 |
| 16-Mar-2019 |
Konstantin Belousov <kib@FreeBSD.org> |
amd64: Add md process flags and first P_MD_PTI flag.
PTI mode for the process pmap on exec is activated iff P_MD_PTI is set.
On exec, the existing vmspace can be reused only if pti mode of the pmap
amd64: Add md process flags and first P_MD_PTI flag.
PTI mode for the process pmap on exec is activated iff P_MD_PTI is set.
On exec, the existing vmspace can be reused only if pti mode of the pmap matches the P_MD_PTI flag of the process. Add MD cpu_exec_vmspace_reuse() callback for exec_new_vmspace() which can vetoed reuse of the existing vmspace.
MFC note: md_flags change struct proc KBI.
Reviewed by: jhb, markj Tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D19514
show more ...
|
#
be860eae |
| 12-Jan-2019 |
Andrew Turner <andrew@FreeBSD.org> |
Fix the check for the offset of td_frame and td_emuldata in struct thread.
Pointy hat: andrew Sponsored by: DARPA, AFRL
|
#
b3c0d957 |
| 12-Jan-2019 |
Andrew Turner <andrew@FreeBSD.org> |
Add support for the Clang Coverage Sanitizer in the kernel (KCOV).
When building with KCOV enabled the compiler will insert function calls to probes allowing us to trace the execution of the kernel
Add support for the Clang Coverage Sanitizer in the kernel (KCOV).
When building with KCOV enabled the compiler will insert function calls to probes allowing us to trace the execution of the kernel from userspace. These probes are on function entry (trace-pc) and on comparison operations (trace-cmp).
Userspace can enable the use of these probes on a single kernel thread with an ioctl interface. It can allocate space for the probe with KIOSETBUFSIZE, then mmap the allocated buffer and enable tracing with KIOENABLE, with the trace mode being passed in as the int argument. When complete KIODISABLE is used to disable tracing.
The first item in the buffer is the number of trace event that have happened. Userspace can write 0 to this to reset the tracing, and is expected to do so on first use.
The format of the buffer depends on the trace mode. When in PC tracing just the return address of the probe is stored. Under comparison tracing the comparison type, the two arguments, and the return address are traced. The former method uses on entry per trace event, while the later uses 4. As such they are incompatible so only a single mode may be enabled.
KCOV is expected to help fuzzing the kernel, and while in development has already found a number of issues. It is required for the syzkaller system call fuzzer [1]. Other kernel fuzzers could also make use of it, either with the current interface, or by extending it with new modes.
A man page is currently being worked on and is expected to be committed soon, however having the code in the kernel now is useful for other developers to use.
[1] https://github.com/google/syzkaller
Submitted by: Mitchell Horne <mhorne063@gmail.com> (Earlier version) Reviewed by: kib Testing by: tuexen Sponsored by: DARPA, AFRL Sponsored by: The FreeBSD Foundation (Mitchell Horne) Differential Revision: https://reviews.freebsd.org/D14599
show more ...
|
#
893405b4 |
| 11-Dec-2018 |
Dimitry Andric <dim@FreeBSD.org> |
Merge ^/head r341764 through r341812.
|
#
94dd54b9 |
| 11-Dec-2018 |
Konstantin Belousov <kib@FreeBSD.org> |
Free bootstacks after AP startup.
Bootstacks are unused after APs executed sched_throw() in init_secondary_tail() and started executing on proper idle thread stack. Add sysinit that detects that th
Free bootstacks after AP startup.
Bootstacks are unused after APs executed sched_throw() in init_secondary_tail() and started executing on proper idle thread stack. Add sysinit that detects that the idle thread for each CPU was scheduled at least once, and free corresponding bootstack.
Slight addition of the code (~200 bytes) is compensated by the saving, because even on typical small modern desktop CPU we leak 128K of memory otherwise (4 pages x 8 threads).
Reviewed by: jhb MFC after: 1 week Differential revision: https://reviews.freebsd.org/D18486
show more ...
|
Revision tags: release/12.0.0 |
|
#
3d5db455 |
| 24-Nov-2018 |
Dimitry Andric <dim@FreeBSD.org> |
Merge ^/head r340427 through r340868.
|
#
f5cf7589 |
| 24-Nov-2018 |
Konstantin Belousov <kib@FreeBSD.org> |
Provide storage for the process feature control flags in struct proc.
The flags are cleared on exec, it is up to the image activator to set them.
Sponsored by: The FreeBSD Foundation MFC after: 2 w
Provide storage for the process feature control flags in struct proc.
The flags are cleared on exec, it is up to the image activator to set them.
Sponsored by: The FreeBSD Foundation MFC after: 2 weeks
show more ...
|
#
6149ed01 |
| 14-Nov-2018 |
Dimitry Andric <dim@FreeBSD.org> |
Merge ^/head r340368 through r340426.
|
#
6febf180 |
| 14-Nov-2018 |
Gleb Smirnoff <glebius@FreeBSD.org> |
Fix build on some architectures after r340413. On amd64 epoch.h appeared to be included implicitly.
|
#
b79aa45e |
| 13-Nov-2018 |
Gleb Smirnoff <glebius@FreeBSD.org> |
For compatibility KPI functions like if_addr_rlock() that used to have mutexes but now are converted to epoch(9) use thread-private epoch_tracker. Embedding tracker into ifnet(9) or ifnet derived str
For compatibility KPI functions like if_addr_rlock() that used to have mutexes but now are converted to epoch(9) use thread-private epoch_tracker. Embedding tracker into ifnet(9) or ifnet derived structures creates a non reentrable function, that will fail miserably if called simultaneously from two different contexts. A thread private tracker will provide a single tracker that would allow to call these functions safely. It doesn't allow nested call, but this is not expected from compatibility KPIs.
Reviewed by: markj
show more ...
|
#
3af64f03 |
| 11-Sep-2018 |
Dimitry Andric <dim@FreeBSD.org> |
Merge ^/head r338392 through r338594.
|
#
1565fb29 |
| 02-Sep-2018 |
Konstantin Belousov <kib@FreeBSD.org> |
Add amd64 mdthread fields needed for the upcoming EFI RT exception handling.
This is split into a separate commit from the main change to make it easier to handle possible revert after upcoming KBI
Add amd64 mdthread fields needed for the upcoming EFI RT exception handling.
This is split into a separate commit from the main change to make it easier to handle possible revert after upcoming KBI freeze.
Reviewed by: kevans Sponsored by: The FreeBSD Foundation MFC after: 1 week Approved by: re (rgrimes) Differential revision: https://reviews.freebsd.org/D16972
show more ...
|
#
8a894c1a |
| 11-Jul-2018 |
Alan Somers <asomers@FreeBSD.org> |
Don't acquire evclass_lock with a spinlock held
When the "pc" audit class is enabled and auditd is running, witness will panic during thread exit because au_event_class tries to lock an rwlock while
Don't acquire evclass_lock with a spinlock held
When the "pc" audit class is enabled and auditd is running, witness will panic during thread exit because au_event_class tries to lock an rwlock while holding a spinlock acquired upstack by thread_exit.
To fix this, move AUDIT_SYSCALL_EXIT futher upstack, before the spinlock is acquired. Of thread_exit's 16 callers, it's only necessary to call AUDIT_SYSCALL_EXIT from two, exit1 (for exiting processes) and kern_thr_exit (for exiting threads). The other callers are all kernel threads, which needen't call AUDIT_SYSCALL_EXIT because since they can't make syscalls there will be nothing to audit. And exit1 already does call AUDIT_SYSCALL_EXIT, making the second call in thread_exit redundant for that case.
PR: 228444 Reported by: aniketp Reviewed by: aniketp, kib MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D16210
show more ...
|
Revision tags: release/11.2.0 |
|
#
ebfaf69c |
| 05-Jun-2018 |
Matt Macy <mmacy@FreeBSD.org> |
hwpmc: log name->pid, name->tid mappings
By logging all threads and processes 'pmc filter' can now filter on process or thread name, relieving the user of the burden of determining which tid or pid
hwpmc: log name->pid, name->tid mappings
By logging all threads and processes 'pmc filter' can now filter on process or thread name, relieving the user of the burden of determining which tid or pid was which when the sample was taken.
% pmc filter -T if_io_tqg -P nginx pmc.log pmc-iflib.log
% pmc filter -x -T idle pmc.log pmc-noidle.log
show more ...
|