#
6157b69f |
| 28-Apr-2001 |
Alfred Perlstein <alfred@FreeBSD.org> |
Instead of asserting that a mutex is not still locked after unlocking it, assert that the mutex is owned and not recursed prior to unlocking it.
This should give a clearer diagnostic when a programm
Instead of asserting that a mutex is not still locked after unlocking it, assert that the mutex is owned and not recursed prior to unlocking it.
This should give a clearer diagnostic when a programming error is caught.
show more ...
|
Revision tags: release/4.3.0_cvs, release/4.3.0 |
|
#
98689e1e |
| 21-Apr-2001 |
Alfred Perlstein <alfred@FreeBSD.org> |
Assert that when using an interlock mutex it is not recursed when lockmgr() is called.
Ok'd by: jhb
|
#
1375ed7e |
| 13-Apr-2001 |
Alfred Perlstein <alfred@FreeBSD.org> |
convert if/panic -> KASSERT, explain what triggered the assertion
|
#
1681b00a |
| 08-Apr-2001 |
Jake Burkholder <jake@FreeBSD.org> |
Fix a precedence bug. ! has higher precedence than &.
|
#
635962af |
| 09-Feb-2001 |
John Baldwin <jhb@FreeBSD.org> |
Proc locking.
|
#
9ed346ba |
| 09-Feb-2001 |
Bosko Milekic <bmilekic@FreeBSD.org> |
Change and clean the mutex lock interface.
mtx_enter(lock, type) becomes:
mtx_lock(lock) for sleep locks (MTX_DEF-initialized locks) mtx_lock_spin(lock) for spin locks (MTX_SPIN-initialized)
simil
Change and clean the mutex lock interface.
mtx_enter(lock, type) becomes:
mtx_lock(lock) for sleep locks (MTX_DEF-initialized locks) mtx_lock_spin(lock) for spin locks (MTX_SPIN-initialized)
similarily, for releasing a lock, we now have:
mtx_unlock(lock) for MTX_DEF and mtx_unlock_spin(lock) for MTX_SPIN. We change the caller interface for the two different types of locks because the semantics are entirely different for each case, and this makes it explicitly clear and, at the same time, it rids us of the extra `type' argument.
The enter->lock and exit->unlock change has been made with the idea that we're "locking data" and not "entering locked code" in mind.
Further, remove all additional "flags" previously passed to the lock acquire/release routines with the exception of two:
MTX_QUIET and MTX_NOSWITCH
The functionality of these flags is preserved and they can be passed to the lock/unlock routines by calling the corresponding wrappers:
mtx_{lock, unlock}_flags(lock, flag(s)) and mtx_{lock, unlock}_spin_flags(lock, flag(s)) for MTX_DEF and MTX_SPIN locks, respectively.
Re-inline some lock acq/rel code; in the sleep lock case, we only inline the _obtain_lock()s in order to ensure that the inlined code fits into a cache line. In the spin lock case, we inline recursion and actually only perform a function call if we need to spin. This change has been made with the idea that we generally tend to avoid spin locks and that also the spin locks that we do have and are heavily used (i.e. sched_lock) do recurse, and therefore in an effort to reduce function call overhead for some architectures (such as alpha), we inline recursion for this case.
Create a new malloc type for the witness code and retire from using the M_DEV type. The new type is called M_WITNESS and is only declared if WITNESS is enabled.
Begin cleaning up some machdep/mutex.h code - specifically updated the "optimized" inlined code in alpha/mutex.h and wrote MTX_LOCK_SPIN and MTX_UNLOCK_SPIN asm macros for the i386/mutex.h as we presently need those.
Finally, caught up to the interface changes in all sys code.
Contributors: jake, jhb, jasone (in no particular order)
show more ...
|
#
1b367556 |
| 24-Jan-2001 |
Jason Evans <jasone@FreeBSD.org> |
Convert all simplelocks to mutexes and remove the simplelock implementations.
|
#
d1c1b841 |
| 21-Jan-2001 |
Jason Evans <jasone@FreeBSD.org> |
Remove MUTEX_DECLARE() and MTX_COLD. Instead, postpone full mutex initialization until after malloc() is safe to call, then iterate through all mutexes and complete their initialization.
This chang
Remove MUTEX_DECLARE() and MTX_COLD. Instead, postpone full mutex initialization until after malloc() is safe to call, then iterate through all mutexes and complete their initialization.
This change is necessary in order to avoid some circular bootstrapping dependencies.
show more ...
|
#
96fde7da |
| 01-Dec-2000 |
Jake Burkholder <jake@FreeBSD.org> |
Use msleep instead of mtx_exit; tsleep; mtx_enter, which is not safe.
|
Revision tags: release/4.2.0 |
|
#
d8881ca3 |
| 20-Oct-2000 |
John Baldwin <jhb@FreeBSD.org> |
- machine/mutex.h -> sys/mutex.h - The initial lock_mtx mutex used in the lockmgr code is initialized very early, so use MUTEX_DECLARE() and MTX_COLD.
|
#
9722d88f |
| 13-Oct-2000 |
Jason Evans <jasone@FreeBSD.org> |
For lockmgr mutex protection, use an array of mutexes that are allocated and initialized during boot. This avoids bloating sizeof(struct lock). As a side effect, it is no longer necessary to enforce
For lockmgr mutex protection, use an array of mutexes that are allocated and initialized during boot. This avoids bloating sizeof(struct lock). As a side effect, it is no longer necessary to enforce the assumtion that lockinit()/lockdestroy() calls are paired, so the LK_VALID flag has been removed.
Idea taken from: BSD/OS.
show more ...
|
#
a18b1f1d |
| 04-Oct-2000 |
Jason Evans <jasone@FreeBSD.org> |
Convert lockmgr locks from using simple locks to using mutexes.
Add lockdestroy() and appropriate invocations, which corresponds to lockinit() and must be called to clean up after a lockmgr lock is
Convert lockmgr locks from using simple locks to using mutexes.
Add lockdestroy() and appropriate invocations, which corresponds to lockinit() and must be called to clean up after a lockmgr lock is no longer needed.
show more ...
|
Revision tags: release/4.1.1_cvs |
|
#
92b123a0 |
| 23-Sep-2000 |
Paul Saab <ps@FreeBSD.org> |
Move MAXCPU from machine/smp.h to machine/param.h to fix breakage with !SMP kernels. Also, replace NCPUS with MAXCPU since they are redundant.
|
#
c866ec47 |
| 16-Sep-2000 |
Poul-Henning Kamp <phk@FreeBSD.org> |
Make LINT compile.
|
Revision tags: release/4.1.0, release/3.5.0_cvs, release/4.0.0_cvs |
|
#
db5f635a |
| 16-Mar-2000 |
Poul-Henning Kamp <phk@FreeBSD.org> |
Eliminate the undocumented, experimental, non-delivering and highly dangerous MAX_PERF option.
|
Revision tags: release/3.4.0_cvs |
|
#
6bdfe06a |
| 11-Dec-1999 |
Eivind Eklund <eivind@FreeBSD.org> |
Lock reporting and assertion changes. * lockstatus() and VOP_ISLOCKED() gets a new process argument and a new return value: LK_EXCLOTHER, when the lock is held exclusively by another process. * T
Lock reporting and assertion changes. * lockstatus() and VOP_ISLOCKED() gets a new process argument and a new return value: LK_EXCLOTHER, when the lock is held exclusively by another process. * The ASSERT_VOP_(UN)LOCKED family is extended to use what this gives them * Extend the vnode_if.src format to allow more exact specification than locked/unlocked.
This commit should not do any semantic changes unless you are using DEBUG_VFS_LOCKS.
Discussed with: grog, mch, peter, phk Reviewed by: peter
show more ...
|
#
99c9d349 |
| 11-Nov-1999 |
Alan Cox <alc@FreeBSD.org> |
Correct a locking error in apause: It should always hold the simple lock when it returns.
Also, eliminate spinning on a uniprocessor. It's pointless.
Submitted by: bde, Assar Westerlund <assar@s
Correct a locking error in apause: It should always hold the simple lock when it returns.
Also, eliminate spinning on a uniprocessor. It's pointless.
Submitted by: bde, Assar Westerlund <assar@sics.se>
show more ...
|
#
e701df7d |
| 27-Sep-1999 |
Matthew Dillon <dillon@FreeBSD.org> |
Fix process p_locks accounting. Conversions of the owner to LK_KERNPROC caused p_locks to be improperly accounted.
Submitted by: Tor.Egge@fast.no
|
Revision tags: release/3.3.0_cvs |
|
#
c3aac50f |
| 28-Aug-1999 |
Peter Wemm <peter@FreeBSD.org> |
$Id$ -> $FreeBSD$
|
#
33638e93 |
| 28-Jun-1999 |
Kirk McKusick <mckusick@FreeBSD.org> |
When requesting an exclusive lock with LK_NOWAIT, do not panic if LK_RECURSIVE is not set, as we will simply return that the lock is busy and not actually deadlock. This allows processes to use polli
When requesting an exclusive lock with LK_NOWAIT, do not panic if LK_RECURSIVE is not set, as we will simply return that the lock is busy and not actually deadlock. This allows processes to use polling locks against buffers that they may already hold exclusively locked.
show more ...
|
#
67812eac |
| 26-Jun-1999 |
Kirk McKusick <mckusick@FreeBSD.org> |
Convert buffer locking from using the B_BUSY and B_WANTED flags to using lockmgr locks. This commit should be functionally equivalent to the old semantics. That is, all buffer locking is done with LK
Convert buffer locking from using the B_BUSY and B_WANTED flags to using lockmgr locks. This commit should be functionally equivalent to the old semantics. That is, all buffer locking is done with LK_EXCLUSIVE requests. Changes to take advantage of LK_SHARED and LK_RECURSIVE will be done in future commits.
show more ...
|
Revision tags: release/3.2.0 |
|
#
50d3b68c |
| 15-Mar-1999 |
Julian Elischer <julian@FreeBSD.org> |
fix breakage for alphas. Submitted by: Andrew Gallatin <gallatin@cs.duke.edu>
|
#
beef8a36 |
| 12-Mar-1999 |
Julian Elischer <julian@FreeBSD.org> |
This solves a deadlock that can occur when read()ing into a file-mmap() space. When doing this, it is possible to for another process to attempt to get an exclusive lock on the vnode and deadlock the
This solves a deadlock that can occur when read()ing into a file-mmap() space. When doing this, it is possible to for another process to attempt to get an exclusive lock on the vnode and deadlock the mmap/read combination when the uiomove() call tries to obtain a second shared lock on the vnode. There is still a potential deadlock situation with write()/mmap(). Submitted by: Matt Dillon <dillon@freebsd.org> Reviewed by: Luoqi Chen <luoqi@freebsd.org> Delimmitted by tag PRE_MATT_MMAP_LOCK and POST_MATT_MMAP_LOCK in kern/kern_lock.c kern/kern_subr.c
show more ...
|
Revision tags: release/3.1.0, release/3.0.0, release/2.2.8 |
|
#
15a1057c |
| 20-Jan-1999 |
Eivind Eklund <eivind@FreeBSD.org> |
Add 'options DEBUG_LOCKS', which stores extra information in struct lock, and add some macros and function parameters to make sure that the information get to the point where it can be put in the loc
Add 'options DEBUG_LOCKS', which stores extra information in struct lock, and add some macros and function parameters to make sure that the information get to the point where it can be put in the lock structure.
While I'm here, add DEBUG_VFS_LOCKS to LINT.
show more ...
|
#
219cbf59 |
| 10-Jan-1999 |
Eivind Eklund <eivind@FreeBSD.org> |
KNFize, by bde.
|