Home | History | Annotate | Download | only in rumpkern
History log of /src/sys/rump/librump/rumpkern/locks.c
RevisionDateAuthorComments
 1.88  02-Nov-2023  martin Back out the following revisions on behalf of core:

sys/sys/lwp.h: revision 1.228
sys/sys/pipe.h: revision 1.40
sys/kern/uipc_socket.c: revision 1.306
sys/kern/kern_sleepq.c: revision 1.84
sys/rump/librump/rumpkern/locks_up.c: revision 1.13
sys/kern/sys_pipe.c: revision 1.165
usr.bin/fstat/fstat.c: revision 1.119
sys/rump/librump/rumpkern/locks.c: revision 1.87
sys/ddb/db_xxx.c: revision 1.78
sys/ddb/db_command.c: revision 1.187
sys/sys/condvar.h: revision 1.18
sys/ddb/db_interface.h: revision 1.42
sys/sys/socketvar.h: revision 1.166
sys/kern/uipc_syscalls.c: revision 1.209
sys/kern/kern_condvar.c: revision 1.60

Add cv_fdrestart() [...]
Use cv_fdrestart() to implement fo_restart.
Simplify/streamline pipes a little bit [...]

This changes have caused regressions and need to be debugged.
The cv_fdrestart() addition needs more discussion.
 1.87  13-Oct-2023  ad Add cv_fdrestart() (better name suggestions welcome):

Like cv_broadcast(), but make any LWPs that share the same file descriptor
table as the caller return ERESTART when resuming. Used to dislodge LWPs
waiting for I/O that prevent a file descriptor from being closed, without
upsetting access to the file (not descriptor) made from another direction.
 1.86  16-Jul-2023  riastradh rump: Fix comment to reflect l_private -> l_sched.info.

Comment was misspelled `l->private', hence didn't come up in grep.
 1.85  16-Jul-2023  riastradh rump: Use l_sched.info, not l_private, for cv waits.

- l_sched is scheduler-private, used only by sched_m2.c, should be safe
- l_private is lwp-private, used by tls in user threads, would like to
reuse for kthreads too
 1.84  12-Apr-2023  riastradh kern: Nix mutex_owner.

There is no valid reason to use this except in assertions of the form

KASSERT(mutex_owner(lock) == curlwp),

which is more obviously spelled as

KASSERT(mutex_owned(lock)).

Exception: There's one horrible kludge in zfs that abuses this, which
should be eliminated.

XXX kernel revbump -- deleting symbol

PR kern/47114
 1.83  26-Oct-2022  riastradh rwlock(9): Nix extern _rw_init in .c; use sys/rwlock.h.
 1.82  26-Oct-2022  riastradh mutex(9): Properly declare _mutex_init in sys/mutex.h.
 1.81  22-Feb-2020  ad rump rw_lock_op
 1.80  05-Feb-2018  ozaki-r branches: 1.80.4; 1.80.10;
Obtain proper initialized addresses of locks allocated by mutex_obj_alloc or rw_obj_alloc

Initialized addresses of locks allocated by mutex_obj_alloc or rw_obj_alloc
were not useful because the addresses were mutex_obj_alloc or rw_obj_alloc
itself. What we want to know are callers of them.

(forgot to commit)
 1.79  27-Dec-2017  ozaki-r rump: check if the mutex is surely owned by the caller in mutex_exit

Unlocking a not-owned mutex wasn't detected well (it could detect if the mutex
is not held by anyone but that's not enough). Let's check it (the check is the
same as normal kernel's mutex).

If LOCKDEBUG is enabled, give the check over LOCKDEBUG because it can provide
better debugging information.
 1.78  27-Dec-2017  ozaki-r Distinguish spin mutex and adaptive mutex on rump kernels for LOCKDEBUG

Formerly rump kernels treated the two types of mutexes as both adaptive for
LOCKDEBUG for some reasons.

Now we can detect violations of mutex restrictions on rump kernels such as
taking an adaptive mutex with holding a spin mutex as well as normal kernels.
 1.77  27-Dec-2017  ozaki-r Tweak LOCKDEBUG macros (NFC)
 1.76  25-Dec-2017  ozaki-r Apply C99-style struct initialization to lockops_t
 1.75  17-Sep-2017  kre As if rump wasn't constipated enough...

Add some more blockages, hopefully allow the build to find a
path all the way to the other end...
 1.74  01-May-2017  pgoyette branches: 1.74.2;
Introduce mutex_ownable() to determine if it is possible for the current
process to acquire a mutex.
 1.73  27-Jan-2017  ozaki-r branches: 1.73.4;
Unbreak builds of rump libraries with RUMP_LOCKDEBUG
 1.72  26-Jan-2016  pooka branches: 1.72.2; 1.72.4;
Put the kernelside rump kernel headers into <rump-sys> instead of
sprinkling them around the faction directories. Avoids having
to add a CPPFLAGS (or several) to pretty much every component
Makefile.

Leave compat headers around in the old locations.

The commit changes some autogenerated files, but I'll fix the
generators shortly and regen.
 1.71  30-Sep-2015  ozaki-r Add lockdebug_barrier

ok pooka@
 1.70  30-Sep-2015  ozaki-r Remove redundant UNLOCKED and LOCKED

UNLOCKED and LOCKED are done inside mutex_exit and mutex_enter respectively
so we don't need to do them outside mutex_exit and mutex_enter.

Reviewed by pooka@
 1.69  25-Apr-2014  pooka branches: 1.69.4;
gardenizing rump.c: move rump_lockdebug to locks.c
 1.68  11-Mar-2014  pooka branches: 1.68.2;
Put the syncobjs in emul.c instead of locks.c so that they are
present for both locks.c and locks_up.c alike.
 1.67  09-Dec-2013  pooka make !LOCKDEBUG work too
 1.66  09-Dec-2013  pooka Support ktrace for rump kernels.

Requested by Justin Cormack on rumpkernel-users.
 1.65  03-Jul-2013  njoly Make RUMP_LOCKDEBUG work again.
With some help from pooka@.
 1.64  15-May-2013  pooka branches: 1.64.2;
Pass enums over the hypercall interface as ints to avoid some
pathological scenarios from arising in setups where enums might be
of a different size in the rump kernel and hypervisor.
 1.63  02-May-2013  pooka Push rwlock upgrade and downgrade into the hypervisor where there's
at least a chance to implement them with minimal fuss.
 1.62  02-May-2013  pooka g/c stale comment
 1.61  02-May-2013  pooka Retry enabling spin mutexes. We should be able to avoid poking the
scheduler by just making wakeup from cv_wait() honor the same locking
order as when a spin mutex is acquired though mutex_enter().
*fingers crossed*
 1.60  30-Apr-2013  pooka Make hypercall calling conventions consistent: iff a hypercall can fail,
it returns an int containing the error value.
 1.59  29-Apr-2013  pooka Disable spin mutexes for now. They need some more work in the case
where a spin mutex is used as an argument to cv_wait(). Plus, it
would be good to sprinkle some asserts to make sure that the cpu
context is not released while holding on to a spin mutex. All in
all, should not be difficult, but needs careful testing and bravery
(the scheduler will bite your legs off).
 1.58  28-Apr-2013  pooka Change rumpuser_cv_timedwait() from absolute time to relative time.
It's then the hypervisor's problem to translate it accordingly.
Now we no longer have to worry about the kernel having to know the
hypervisor's time and vice versa.
 1.57  27-Apr-2013  pooka roll mutex init hypercalls into one (one of them already took a flag anyway)
 1.56  27-Apr-2013  pooka Try to make sure that the appropriate calls to mutex_enter() takes
a spin mutex (i.e. does not relinquish cpu context while trying to
take the mutex).

Bump the hypercall interface version number. I'll be doing a bunch
of other cleanups to simplify the interface for the benefit of
alternative hypervisor implementations. I'll be riding this bump
and doing a second one only after I'm finished with all of the
changes.
 1.55  06-Dec-2011  njoly branches: 1.55.6;
Do not protect wrong KASSERT by LOCKEDBUG ifdef/endif, the latter uses
its own mecanism. Kill them both.
From discussion with pooka@.
 1.54  21-Mar-2011  pooka branches: 1.54.4; 1.54.8;
Update copyright statements.

no functional change.
 1.53  09-Mar-2011  pooka track lockdebug data even in the special path
 1.52  09-Mar-2011  pooka Mark cv_wait mutex as locked before doing any further dances.
Fixes a LOCKDEBUG panic in case the uncommon condition is hit.
 1.51  08-Mar-2011  pooka Nuke all threads belonging to a process calling exec before allowing
the exec handshake to return.

In addition to being The Right Thing To Do, fixes some nasty
conditions for CLOEXEC fd's (or at least does so in theory, I
couldn't create any problems although I tried).
 1.50  28-Jan-2011  pooka If we are "unsleepable" due to a dying proc, yield() instead of
returning directly. This allows other threads to run possible
setting a condition we are waiting on.

Fixes a busyloop condition which could be entered from vfs_unmountall()
where we were waiting for vrele_pending and the vrele thread could
not run since we were hogging the CPU.
 1.49  28-Jan-2011  pooka Some lwp-walkers expect the correct value for l_stat, so use a flag
in l_flag instead of l_stat for the purpose of flagging lwps in a
dying proc.
 1.48  18-Jan-2011  haad branches: 1.48.2;
Add support for compiling ZFS and Solaris modules as RUMP libraries. Add
some locking and rumpcopy primitives and refactor module building Makefiles
to work with both RUMP and kernel modules. This is first part of adding
support for regular test of zfs on NetBSD to hunt some bugs and make it
stable.

Ok by pooka@.
 1.47  12-Jan-2011  pooka branches: 1.47.2;
When the client and the rump kernel are the same host process, all
threads blocking in the kernel automatically exit when the process
exists. However, for the sysproxy case this does not hold.
Typically it's ~harmless, but e.g. in the case of socket binding
following by poll it gets annoying.

Introduce sysproxy procexit, which wakes up all threads blocking
on a condition when a process's communication socket is closed.
The code is a little different from the regular kernel simply
because in a rump kernel l_mutex is not available at all times
(this is because scheduling happens on every kernel entry and exit,
and that path must be kept lockless for any reasonable performance).
Instead, use gating which makes sure all threads are either out of
the cv code or suspended in a well-known state. Then, wake up the
threads and tell them to get the hell out of our galaxy.
 1.46  06-Jan-2011  pooka antipasto
 1.45  06-Jan-2011  pooka Support LOCKDEBUG. To use it, compile sys/rump with RUMP_LOCKDEBUG=yes.

requested by martin (sparc64 gdb cannot reliably produce a stack trace)
 1.44  01-Dec-2010  pooka implement mutex_owner()
 1.43  01-Dec-2010  pooka Track lwp as the rumpuser mutex owner instead of pthread_t (this
is done in rumpuser for simplicity, since on the kernel side things
we assume we have only one pointer of space). As a side-effect,
we can no longer know if the current thread is holding on to a
mutex locked without curlwp context (basically all mutexes inited
outside of mutex_init()). The only thing that called rumpuser_mutex_held()
for a non-kmutex was the giant lock. So, instead implement recursive
locking for the giant lock in the rump kernel and get rid of the
now-unused recursive pthread mutex in the hypercall interface.
 1.42  09-Jun-2010  pooka Similarly to cv_wait, fail if trying to cv_wait_sig() without threads.
 1.41  18-May-2010  pooka Move routines related to kernel locking and scheduling from
locks.c to klock.c.

No functional change.
 1.40  18-May-2010  pooka Make it possible to use the scheduler lock as the rumpuser condvar
interlock. This is applicable in cases where the actual interlock
is the CPU the currently running thread is scheduled on. Borrowing
the scheduler lock as the mutex mandated by pthread_cond_wait()
does away with need to have an additional mutex. This both optimizes
runtime execution and simplifies code, as the extra lock typically
lead to quite some trickeries to avoid the dungeon collapsing due
to zaps from the wand of deadlock.
 1.39  14-Apr-2010  pooka Add comment about clock mismatch.
 1.38  31-Jan-2010  snj branches: 1.38.2; 1.38.4;
Some might argue that it is benefi_c_ial to spell words correctly.
 1.37  03-Dec-2009  pooka Remove last remnants of the long-ago-properly-fixed RUMP_LMUTEX_MAGIC hack.
 1.36  01-Dec-2009  pooka Almost there for virtual CPU MP support:
* support bound kernel threads
* bind softint threads to specific virtual cpus
+ remove now-unnecessary locks from softint code

Now, if we only had MI CPU_INFO_FOREACH() .... (hi rmind ;)
 1.35  26-Nov-2009  pooka Provide some sort of cv_is_valid(). What a silly routine.
 1.34  11-Nov-2009  pooka Make rumpuser_cv_timedwait take two int64's instead timespec to
uncouple it from the timespec layout. Also, change return value
to zero for "timeout didn't expire" and non-zero for "timeout
expired". This decouples the interface from errno assignments.
 1.33  04-Nov-2009  pooka Use kern_mutex_obj.c directly instead of copypasting code.
 1.32  16-Oct-2009  pooka Include sys_select.c for proper select()/poll() support.
 1.31  15-Oct-2009  pooka When allocating the temporary lwp we must have an lwp context. So
take turns using lwp0 for this purpose, nothing else uses it.
 1.30  15-Oct-2009  pooka Give lwp usage some much-needed love: stop treating lwp0 as the
all-sink and make sure each separate thread in rump has its own
lwp. Happy-go-lucky callers will get scheduled a temporary lwp
on entry, while true lwp connoisseurs may request a stable lwp
for their purposes. Some more love may be required later down the
road, but for now different threads will stepping on each others
toes.
 1.29  15-Oct-2009  pooka Add initial work on a rump virtual cpu scheduler. This is necessary
for kernel code which has been written to avoid MP contention by
using cpu-local storage (most prominently, select and pool_cache).

Instead of always assuming rump_cpu, the scheduler must now be run
(and unrun) on all entry points into rump. Likewise, rumpuser
unruns and re-runs the scheduler around each potentially blocking
operation. As an optimization, I modified some locking primitives
to try to get the lock without blocking before releasing the cpu.

Also, ltsleep was modified to assume that it is never called without
the biglock held and made to use the biglock as the sleep interlock.
Otherwise there is just too much drama with deadlocks. If some
kernel code wants to call ltsleep without the biglock, then, *snif*,
it's no longer supported and rump and should be modified to support
newstyle locks anyway.
 1.28  02-Oct-2009  pooka panic if cv_wait() is called in non-threaded mode
 1.27  07-Feb-2009  pooka Make the clock interrupt tick based on absolute time instead of
relative time. This prevents drifting. Also, keep track of time
within userspace, so we do not have to make a syscall to get the
clock value. This is approximately 7 times cheaper, but on the
negative side is limited to the clock interrupt frequency.
 1.26  13-Jan-2009  pooka misc cleanup, mainly header polish
 1.25  19-Dec-2008  pooka CTASSERT kcondvar size
 1.24  19-Dec-2008  pooka fix build

(hi thorpej! the first one is always free ;)
 1.23  18-Dec-2008  pooka __KERNEL_RCSID
 1.22  13-Dec-2008  pooka Get rid of local machine/{mutex,rwlock}.h files by treating the
object storage as a single pointer (all archs have at least one
uintptr_t in the objects).
 1.21  10-Dec-2008  pooka Make kernel biglock recursecount volatile.
 1.20  10-Oct-2008  pooka branches: 1.20.2;
Support callouts and call callout_hardclock() from the timer
interrupt thread.

The sleepq implementation required for callouts is horrible, kludged
only for callouts, and generally unacceptable. It needs revisiting,
but I'm not sure yet should rump or kern_timeout be improved. It's
almost untested as of now, but committing this will give me some
maneuvering space while letting application compile.
 1.19  09-Oct-2008  pooka Rewrite kernel lockus maximus handling to be correct.
 1.18  29-Jul-2008  pooka Install rump libraries and utilities to the base system and remove the
private non-installed build infrastructure from sys/rump.

breakdown of commit:
* install relevant headers into /usr/include/rump
* build sys/rump/librump/rumpuser and sys/rump/librump/rumpkern
from src/lib and install as librumpuser and librump, respectively
+ this retains the ability to test a librump build with just the
kernel sources at hand
* move sys/rump/fs/lib/libukfs and sys/rump/fs/lib/libp2k to src/lib
for general consumption, they are not kernel-space dwellers anyway
* build and install sys/rump/fs/lib/lib$fs as librumpfs_$fs
* add chapter 3 manual pages for rump, rumpuser, ukfs and p2k
* build and install userspace kernel file system daemons if MKPUFFS=yes
is spexified
* retire fsconsole for now, it will make a comeback with an actually
implemented version shortly
 1.17  18-Jul-2008  pooka support cv_has_waiters()
 1.16  31-May-2008  ad branches: 1.16.2; 1.16.4;
Turn off DIAGNOSTIC so it builds.
 1.15  28-Apr-2008  martin branches: 1.15.2;
Remove clause 3 and 4 from TNF licenses
 1.14  11-Apr-2008  ad branches: 1.14.2; 1.14.4;
More stubs.
 1.13  01-Apr-2008  drochner remove useless passing of the lwp from the KERNEL_LOCK() ABI
(not the API; this would be easy as well)
agreed (a while ago) by ad
 1.12  11-Mar-2008  pooka Backup some fixes for recent breakage from local tree. Also some
other improvements such as exporting the real kernel namei and
using that in ukfs instead of the homegrown heap'o hacks namei.
"etcetc".
 1.11  30-Jan-2008  ad branches: 1.11.2; 1.11.6;
Fix pasto. Spotted by pooka@
 1.10  30-Jan-2008  ad Replace struct lock on vnodes with a simpler lock object built on
krwlock_t. This is a step towards removing lockmgr and simplifying
vnode locking. Discussed on tech-kern.
 1.9  21-Jan-2008  pooka In case cv_timedwait() gets ticks == 0, make sure we sleep eternally
(or at least until wakeup) instead of immediately waking up.

In other words, fix this after it broke when another piece of the
code was fixed. Ain't programming fun?
 1.8  02-Jan-2008  ad Fix merge error.
 1.7  02-Jan-2008  ad Merge vmlocking2 to head.
 1.6  01-Jan-2008  pooka emulate a couple more locking interfaces
 1.5  30-Dec-2007  pooka steal 1.4.2.1 from vmlocking2: cv_xwait_sig()
 1.4  19-Nov-2007  pooka branches: 1.4.2; 1.4.6;
support cv_broadcast()
 1.3  17-Nov-2007  pooka Implement cv_timedwait(), requested by Reinoud.
 1.2  07-Nov-2007  pooka branches: 1.2.2; 1.2.4;
implement _kernel_lock{,_unlock}()
 1.1  31-Oct-2007  pooka branches: 1.1.2; 1.1.4; 1.1.6;
Make it possible to run rumps multithreaded. This brings real
locking and makes it possible to run file systems which create
threads. It also makes rump file system behaviour better match
file system behaviour in the kernel.
 1.1.6.5  23-Mar-2008  matt sync with HEAD
 1.1.6.4  09-Jan-2008  matt sync with HEAD
 1.1.6.3  08-Nov-2007  matt sync with -HEAD
 1.1.6.2  06-Nov-2007  matt sync with HEAD
 1.1.6.1  31-Oct-2007  matt file locks.c was added on branch matt-armv6 on 2007-11-06 23:34:36 +0000
 1.1.4.3  18-Feb-2008  mjf Sync with HEAD.
 1.1.4.2  08-Dec-2007  mjf Sync with HEAD.
 1.1.4.1  19-Nov-2007  mjf Sync with HEAD.
 1.1.2.4  21-Nov-2007  joerg Sync with HEAD.
 1.1.2.3  11-Nov-2007  joerg Sync with HEAD.
 1.1.2.2  31-Oct-2007  joerg Sync with HEAD.
 1.1.2.1  31-Oct-2007  joerg file locks.c was added on branch jmcneill-pm on 2007-10-31 23:14:16 +0000
 1.2.4.6  17-Mar-2008  yamt sync with head.
 1.2.4.5  04-Feb-2008  yamt sync with head.
 1.2.4.4  21-Jan-2008  yamt sync with head
 1.2.4.3  07-Dec-2007  yamt sync with head
 1.2.4.2  15-Nov-2007  yamt sync with head.
 1.2.4.1  07-Nov-2007  yamt file locks.c was added on branch yamt-lazymbuf on 2007-11-15 11:45:26 +0000
 1.2.2.4  21-Nov-2007  bouyer Sync with HEAD
 1.2.2.3  18-Nov-2007  bouyer Sync with HEAD
 1.2.2.2  13-Nov-2007  bouyer Sync with HEAD
 1.2.2.1  07-Nov-2007  bouyer file locks.c was added on branch bouyer-xenamd64 on 2007-11-13 16:03:14 +0000
 1.4.6.2  23-Jan-2008  bouyer Sync with HEAD.
 1.4.6.1  02-Jan-2008  bouyer Sync with HEAD
 1.4.2.1  28-Dec-2007  ad Make rump build.
 1.11.6.4  17-Jan-2009  mjf Sync with HEAD.
 1.11.6.3  28-Sep-2008  mjf Sync with HEAD.
 1.11.6.2  02-Jun-2008  mjf Sync with HEAD.
 1.11.6.1  03-Apr-2008  mjf Sync with HEAD.
 1.11.2.1  24-Mar-2008  keiichi sync with head.
 1.14.4.4  11-Aug-2010  yamt sync with head.
 1.14.4.3  11-Mar-2010  yamt sync with head
 1.14.4.2  04-May-2009  yamt sync with head.
 1.14.4.1  16-May-2008  yamt sync with head.
 1.14.2.2  04-Jun-2008  yamt sync with head
 1.14.2.1  18-May-2008  yamt sync with head.
 1.15.2.3  10-Oct-2008  skrll Sync with HEAD.
 1.15.2.2  18-Sep-2008  wrstuden Sync with wrstuden-revivesa-base-2.
 1.15.2.1  23-Jun-2008  wrstuden Sync w/ -current. 34 merge conflicts to follow.
 1.16.4.2  13-Dec-2008  haad Update haad-dm branch to haad-dm-base2.
 1.16.4.1  19-Oct-2008  haad Sync with HEAD.
 1.16.2.2  31-Jul-2008  simonb Sync with head.
 1.16.2.1  21-Jul-2008  simonb Sync with head.
 1.20.2.2  03-Mar-2009  skrll Sync with HEAD.
 1.20.2.1  19-Jan-2009  skrll Sync with HEAD.
 1.38.4.4  21-Apr-2011  rmind sync with head
 1.38.4.3  05-Mar-2011  rmind sync with head
 1.38.4.2  03-Jul-2010  rmind sync with head
 1.38.4.1  30-May-2010  rmind sync with head
 1.38.2.2  17-Aug-2010  uebayasi Sync with HEAD.
 1.38.2.1  30-Apr-2010  uebayasi Sync with HEAD.
 1.47.2.1  06-Jun-2011  jruoho Sync with HEAD.
 1.48.2.1  08-Feb-2011  bouyer Sync with HEAD
 1.54.8.1  18-Feb-2012  mrg merge to -current.
 1.54.4.2  22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.54.4.1  17-Apr-2012  yamt sync with head
 1.55.6.3  03-Dec-2017  jdolecek update from HEAD
 1.55.6.2  20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.55.6.1  23-Jun-2013  tls resync from head
 1.64.2.2  18-May-2014  rmind sync with head
 1.64.2.1  28-Aug-2013  rmind sync with head
 1.68.2.1  10-Aug-2014  tls Rebase.
 1.69.4.4  28-Aug-2017  skrll Sync with HEAD
 1.69.4.3  05-Feb-2017  skrll Sync with HEAD
 1.69.4.2  19-Mar-2016  skrll Sync with HEAD
 1.69.4.1  27-Dec-2015  skrll Sync with HEAD (as of 26th Dec)
 1.72.4.1  21-Apr-2017  bouyer Sync with HEAD
 1.72.2.1  20-Mar-2017  pgoyette Sync with HEAD
 1.73.4.3  02-May-2017  pgoyette Sync with HEAD - tag prg-localcount2-base1
 1.73.4.2  30-Apr-2017  pgoyette Use the right conditional to enable/disable LOCKDEBUG within RUMP
 1.73.4.1  30-Apr-2017  pgoyette Introduce mutex_ownable(9) and use it in localcount_release(9).

Commit of same code to head is awaiting discussion on tech-kern.
 1.74.2.2  02-Apr-2018  martin Pull up following revision(s) (requested by ozaki-r in ticket #687):
sys/kern/kern_rwlock_obj.c: revision 1.4
sys/rump/librump/rumpkern/locks.c: revision 1.80
sys/kern/kern_rwlock.c: revision 1.50
sys/arch/x86/x86/db_memrw.c: revision 1.5,1.6
sys/ddb/db_command.c: revision 1.150-1.153
share/man/man4/ddb.4: revision 1.175 (via patch),1.176-1.178
sys/kern/kern_mutex_obj.c: revision 1.6
sys/kern/subr_lockdebug.c: revision 1.61-1.64
sys/sys/lockdebug.h: revision 1.17
sys/kern/kern_mutex.c: revision 1.71
sys/sys/lockdebug.h: revision 1.18,1.19
sys/kern/subr_xcall.c: revision 1.26

Obtain proper initialized addresses of locks allocated by mutex_obj_alloc or rw_obj_alloc

Initialized addresses of locks allocated by mutex_obj_alloc or rw_obj_alloc
were not useful because the addresses were mutex_obj_alloc or rw_obj_alloc
itself. What we want to know are callers of them.

Spinkle ASSERT_SLEEPABLE to xcall functions

Use db_printf instead of printf in ddb

Add a new command, show lockstat, which shows statistics of locks
Currently the command shows the number of allocated locks.
The command is useful only if LOCKDEBUG is enabled.

Add a new command, show all locks, which shows information of active locks

The command shows information of all active (i.e., being held) locks that are
tracked through either of LWPs or CPUs by the LOCKDEBUG facility. The /t
modifier additionally shows a backtrace for each LWP additionally. This
feature is useful for debugging especially to analyze deadlocks.
The command is useful only if LOCKDEBUG is enabled.

Don't pass a unset address to lockdebug_lock_print

x86: avoid accessing invalid addresses in ddb like arm32
This avoids that a command stops in the middle of an execution if
a fault occurs due to an access to an invalid address.

Get rid of a redundant output

Improve wording. Fix a Cm argument.

ddb: rename "show lockstat" to "show lockstats" to avoid conflicting with lockstat(8)
Requested by mrg@
 1.74.2.1  13-Jan-2018  snj Pull up following revision(s) (requested by ozaki-r in ticket #495):
lib/librumpuser/rumpfiber.c: revision 1.13
lib/librumpuser/rumpuser_pth.c: revision 1.46
lib/librumpuser/rumpuser_pth_dummy.c: revision 1.18
sys/kern/kern_condvar.c: revision 1.40
sys/kern/kern_lock.c: revision 1.161
sys/kern/kern_mutex.c: revision 1.68
sys/kern/kern_rwlock.c: revision 1.48
sys/rump/include/rump/rumpuser.h: revision 1.115
sys/rump/librump/rumpkern/locks.c: revision 1.76-1.79
Apply C99-style struct initialization to lockops_t
--
Tweak LOCKDEBUG macros (NFC)
--
Distinguish spin mutex and adaptive mutex on rump kernels for LOCKDEBUG
Formerly rump kernels treated the two types of mutexes as both adaptive for
LOCKDEBUG for some reasons.
Now we can detect violations of mutex restrictions on rump kernels such as
taking an adaptive mutex with holding a spin mutex as well as normal kernels.
--
rump: check if the mutex is surely owned by the caller in mutex_exit
Unlocking a not-owned mutex wasn't detected well (it could detect if the mutex
is not held by anyone but that's not enough). Let's check it (the check is the
same as normal kernel's mutex).
If LOCKDEBUG is enabled, give the check over LOCKDEBUG because it can provide
better debugging information.
 1.80.10.1  29-Feb-2020  ad Sync with head.
 1.80.4.1  08-Apr-2020  martin Merge changes from current as of 20200406

RSS XML Feed