Revision tags: release/14.2.0 |
|
#
928864a9 |
| 27-Nov-2024 |
Kristof Provost <kp@FreeBSD.org> |
fix build with LOCK_PROFILING but without KDTRACE_HOOKS
Reviewed by: kib, markj Sponsored by: Rubicon Communications, LLC ("Netgate") Differential Revision: https://reviews.freebsd.org/D47822
|
#
73da0265 |
| 14-Nov-2024 |
John Baldwin <jhb@FreeBSD.org> |
locks: Use %p to print uintptr_t values
Pointers are not the same shape as sizes on CHERI architectures. Cast to void * and print with %p instead.
Obtained from: CheriBSD Sponsored by: AFRL, DARPA
locks: Use %p to print uintptr_t values
Pointers are not the same shape as sizes on CHERI architectures. Cast to void * and print with %p instead.
Obtained from: CheriBSD Sponsored by: AFRL, DARPA Differential Revision: https://reviews.freebsd.org/D47342
show more ...
|
#
656991b0 |
| 24-Oct-2024 |
Gleb Smirnoff <glebius@FreeBSD.org> |
locks: augment lock_class with lc_trylock method
Implement for mutex(9) and rwlock(9).
Reviewed by: jtl Differential Revision: https://reviews.freebsd.org/D45745
|
Revision tags: release/13.4.0 |
|
#
87ee63ba |
| 11-Jul-2024 |
Mateusz Guzik <mjg@FreeBSD.org> |
locks: add a runtime check for missing turnstile
There are sometimes bugs which result in the unlock fast path failing, which in turns causes a not-helpful crash report when dereferencing a NULL tur
locks: add a runtime check for missing turnstile
There are sometimes bugs which result in the unlock fast path failing, which in turns causes a not-helpful crash report when dereferencing a NULL turnstile. Help debugging such cases by pointing out what happened along with some debug.
Sponsored by: Rubicon Communications, LLC ("Netgate")
show more ...
|
#
3c84b4b3 |
| 24-Jun-2024 |
Ryan Libby <rlibby@FreeBSD.org> |
kern: move __always_inline to canonical position
Ahead of including inline in __always_inline, move __always_inline to where inline goes.
Reviewed by: kib, olce Sponsored by: Dell EMC Isilon Differ
kern: move __always_inline to canonical position
Ahead of including inline in __always_inline, move __always_inline to where inline goes.
Reviewed by: kib, olce Sponsored by: Dell EMC Isilon Differential Revision: https://reviews.freebsd.org/D45708
show more ...
|
#
aaef18e6 |
| 20-Jun-2024 |
Gleb Smirnoff <glebius@FreeBSD.org> |
rwlock: add static qualifier to implementations previously declared static
|
Revision tags: release/14.1.0, release/13.3.0 |
|
#
6b353101 |
| 18-Jan-2024 |
Olivier Certner <olce@FreeBSD.org> |
SCHEDULER_STOPPED(): Rely on a global variable
A commit from 2012 (5d7380f8e34f0083, r228424) introduced 'td_stopsched', on the ground that a global variable would cause all CPUs to have a copy of i
SCHEDULER_STOPPED(): Rely on a global variable
A commit from 2012 (5d7380f8e34f0083, r228424) introduced 'td_stopsched', on the ground that a global variable would cause all CPUs to have a copy of it in their cache, and consequently of all other variables sharing the same cache line.
This is really a problem only if that cache line sees relatively frequent modifications. This was unlikely to be the case back then because nearby variables are almost never modified as well. In any case, today we have a new tool at our disposal to ensure that this variable goes into a read-mostly section containing frequently-accessed variables ('__read_frequently'). Most of the cache lines covering this section are likely to always be in every CPU cache. This makes the second reason stated in the commit message (ensuring the field is in the same cache line as some lock-related fields, since these are accessed in close proximity) moot, as well as the second order effect of requiring an additional line to be present in the cache (the one containing the new 'scheduler_stopped' boolean, see below).
From a pure logical point of view, whether the scheduler is stopped is a global state and is certainly not a per-thread quality.
Consequently, remove 'td_stopsched', which immediately frees a byte in 'struct thread'. Currently, the latter's size (and layout) stays unchanged, but some of the later re-orderings will probably benefit from this removal. Available bytes at the original position for 'td_stopsched' have been made explicit with the addition of the '_td_pad0' member.
Store the global state in the new 'scheduler_stopped' boolean, which is annotated with '__read_frequently'.
Replace uses of SCHEDULER_STOPPED_TD() with SCHEDULER_STOPPER() and remove the former as it is now unnecessary.
Reviewed by: markj, kib Approved by: markj (mentor) MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D43572
show more ...
|
Revision tags: release/14.0.0 |
|
#
7530de77 |
| 22-Oct-2023 |
Mateusz Guzik <mjg@FreeBSD.org> |
thread: add td_wantedlock
This enables obtaining lock information threads are actively waiting for while sampling. Without the change one would only see a bunch of calls to lock_delay(), where the s
thread: add td_wantedlock
This enables obtaining lock information threads are actively waiting for while sampling. Without the change one would only see a bunch of calls to lock_delay(), where the stacktrace often does not reveal what the lock might be.
Note this is not the same as lock profiling, which only produces data for cases which wait for locks.
struct thread already has a td_lockname field, but I did not use it because it has different semantics -- denotes when the thread is off cpu. At the same time it could not be converted to hold a lock_object pointer because non-curthread access would no longer be guaranteed to be safe -- by the time it reads the pointer the lock might have been taken, released and the object containing it freed.
Sample usage with dtrace: rm /tmp/out.kern_stacks ; dtrace -x stackframes=100 -n 'profile-997 { @[curthread->td_wantedlock != NULL ? stringof(curthread->td_wantedlock->lo_name) : stringof("\n"), stack()] = count(); }' -o /tmp/out.kern_stacks
This also facilitates addition of lock information to traces produced by hwpmc.
Note: spinlocks are not supported at the moment.
Sponsored by: Rubicon Communications, LLC ("Netgate")
show more ...
|
#
685dc743 |
| 16-Aug-2023 |
Warner Losh <imp@FreeBSD.org> |
sys: Remove $FreeBSD$: one-line .c pattern
Remove /^[\s*]*__FBSDID\("\$FreeBSD\$"\);?\s*\n/
|
#
4d846d26 |
| 10-May-2023 |
Warner Losh <imp@FreeBSD.org> |
spdx: The BSD-2-Clause-FreeBSD identifier is obsolete, drop -FreeBSD
The SPDX folks have obsoleted the BSD-2-Clause-FreeBSD identifier. Catch up to that fact and revert to their recommended match of
spdx: The BSD-2-Clause-FreeBSD identifier is obsolete, drop -FreeBSD
The SPDX folks have obsoleted the BSD-2-Clause-FreeBSD identifier. Catch up to that fact and revert to their recommended match of BSD-2-Clause.
Discussed with: pfg MFC After: 3 days Sponsored by: Netflix
show more ...
|
Revision tags: release/13.2.0, release/12.4.0, release/13.1.0, release/12.3.0 |
|
#
6a467cc5 |
| 23-May-2021 |
Mateusz Guzik <mjg@FreeBSD.org> |
lockprof: pass lock type as an argument instead of reading the spin flag
|
Revision tags: release/13.0.0 |
|
#
f90d57b8 |
| 24-Nov-2020 |
Mateusz Guzik <mjg@FreeBSD.org> |
locks: push lock_delay_arg_init calls down
Minor cleanup to skip doing them when recursing on locks and so that they can act on found lock value if need be.
|
Revision tags: release/12.2.0 |
|
#
c7aa572c |
| 31-Jul-2020 |
Glen Barber <gjb@FreeBSD.org> |
MFH
Sponsored by: Rubicon Communications, LLC (netgate.com)
|
#
c795344f |
| 23-Jul-2020 |
Mateusz Guzik <mjg@FreeBSD.org> |
locks: fix a long standing bug for primitives with kdtrace but without spinning
In such a case the second argument to lock_delay_arg_init was NULL which was immediately causing a null pointer deref.
locks: fix a long standing bug for primitives with kdtrace but without spinning
In such a case the second argument to lock_delay_arg_init was NULL which was immediately causing a null pointer deref.
Since the sructure is only used for spin count, provide a dedicate routine initializing it.
Reported by: andrew
show more ...
|
Revision tags: release/11.4.0 |
|
#
75dfc66c |
| 27-Feb-2020 |
Dimitry Andric <dim@FreeBSD.org> |
Merge ^/head r358269 through r358399.
|
#
7029da5c |
| 26-Feb-2020 |
Pawel Biernacki <kaktus@FreeBSD.org> |
Mark more nodes as CTLFLAG_MPSAFE or CTLFLAG_NEEDGIANT (17 of many)
r357614 added CTLFLAG_NEEDGIANT to make it easier to find nodes that are still not MPSAFE (or already are but aren’t properly mark
Mark more nodes as CTLFLAG_MPSAFE or CTLFLAG_NEEDGIANT (17 of many)
r357614 added CTLFLAG_NEEDGIANT to make it easier to find nodes that are still not MPSAFE (or already are but aren’t properly marked). Use it in preparation for a general review of all nodes.
This is non-functional change that adds annotations to SYSCTL_NODE and SYSCTL_PROC nodes using one of the soon-to-be-required flags.
Mark all obvious cases as MPSAFE. All entries that haven't been marked as MPSAFE before are by default marked as NEEDGIANT
Approved by: kib (mentor, blanket) Commented by: kib, gallatin, melifaro Differential Revision: https://reviews.freebsd.org/D23718
show more ...
|
#
2e77cad1 |
| 05-Jan-2020 |
Mateusz Guzik <mjg@FreeBSD.org> |
locks: add default delay struct
Use it for all primitives. This makes everything fit in 8 bytes.
|
#
6b8dd26e |
| 05-Jan-2020 |
Mateusz Guzik <mjg@FreeBSD.org> |
locks: convert delay times to u_short
int is just a waste of space for this purpose.
|
Revision tags: release/12.1.0, release/11.3.0 |
|
#
2aaf9152 |
| 18-Mar-2019 |
Alan Somers <asomers@FreeBSD.org> |
MFHead@r345275
|
#
ff511f1f |
| 11-Mar-2019 |
Enji Cooper <ngie@FreeBSD.org> |
MFhead@r344996
|
#
2e43efd0 |
| 06-Mar-2019 |
John Baldwin <jhb@FreeBSD.org> |
Drop "All rights reserved" from my copyright statements.
Reviewed by: rgrimes MFC after: 1 month Differential Revision: https://reviews.freebsd.org/D19485
|
Revision tags: release/12.0.0 |
|
#
6149ed01 |
| 14-Nov-2018 |
Dimitry Andric <dim@FreeBSD.org> |
Merge ^/head r340368 through r340426.
|
#
f183fb16 |
| 13-Nov-2018 |
Mateusz Guzik <mjg@FreeBSD.org> |
locks: plug warnings about unitialized variables
They only showed up after I redefined LOCKSTAT_ENABLED to 0.
doing_lockprof in mutex.c is a real (but harmless) bug. Should the value be non-zero it
locks: plug warnings about unitialized variables
They only showed up after I redefined LOCKSTAT_ENABLED to 0.
doing_lockprof in mutex.c is a real (but harmless) bug. Should the value be non-zero it will do checks for lock profiling which would otherwise be skipped.
state in rwlock.c is a wart from the compiler, the value can't be used if lock profiling is not enabled.
Sponsored by: The FreeBSD Foundation
show more ...
|
#
d54474e6 |
| 13-Nov-2018 |
Eric van Gyzen <vangyzen@FreeBSD.org> |
Make no assertions about lock state when the scheduler is stopped.
Change the assert paths in rm, rw, and sx locks to match the lock and unlock paths. I did this for mutexes in r306346.
Reported b
Make no assertions about lock state when the scheduler is stopped.
Change the assert paths in rm, rw, and sx locks to match the lock and unlock paths. I did this for mutexes in r306346.
Reported by: Travis Lane <tlane@isilon.com> MFC after: 2 weeks Sponsored by: Dell EMC Isilon
show more ...
|
Revision tags: release/11.2.0 |
|
#
d0a22279 |
| 03-Jun-2018 |
Mateusz Guzik <mjg@FreeBSD.org> |
Remove an unused argument to turnstile_unpend.
PR: 228694 Submitted by: Julian Pszczołowski <julian.pszczolowski@gmail.com>
|