kernel: Add checks for interrupts in rwlocks.
recursive_locks, mutexes, and semaphores already have them.
This commit is contained in:
@@ -84,12 +84,14 @@ recursive_lock_destroy(recursive_lock *lock)
|
|||||||
status_t
|
status_t
|
||||||
recursive_lock_lock(recursive_lock *lock)
|
recursive_lock_lock(recursive_lock *lock)
|
||||||
{
|
{
|
||||||
thread_id thread = thread_get_current_thread_id();
|
#if KDEBUG
|
||||||
|
|
||||||
if (!gKernelStartup && !are_interrupts_enabled()) {
|
if (!gKernelStartup && !are_interrupts_enabled()) {
|
||||||
panic("recursive_lock_lock: called with interrupts disabled for lock "
|
panic("recursive_lock_lock: called with interrupts disabled for lock "
|
||||||
"%p (\"%s\")\n", lock, lock->lock.name);
|
"%p (\"%s\")\n", lock, lock->lock.name);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
thread_id thread = thread_get_current_thread_id();
|
||||||
|
|
||||||
if (thread != RECURSIVE_LOCK_HOLDER(lock)) {
|
if (thread != RECURSIVE_LOCK_HOLDER(lock)) {
|
||||||
mutex_lock(&lock->lock);
|
mutex_lock(&lock->lock);
|
||||||
@@ -108,9 +110,12 @@ recursive_lock_trylock(recursive_lock *lock)
|
|||||||
{
|
{
|
||||||
thread_id thread = thread_get_current_thread_id();
|
thread_id thread = thread_get_current_thread_id();
|
||||||
|
|
||||||
if (!gKernelStartup && !are_interrupts_enabled())
|
#if KDEBUG
|
||||||
|
if (!gKernelStartup && !are_interrupts_enabled()) {
|
||||||
panic("recursive_lock_lock: called with interrupts disabled for lock "
|
panic("recursive_lock_lock: called with interrupts disabled for lock "
|
||||||
"%p (\"%s\")\n", lock, lock->lock.name);
|
"%p (\"%s\")\n", lock, lock->lock.name);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if (thread != RECURSIVE_LOCK_HOLDER(lock)) {
|
if (thread != RECURSIVE_LOCK_HOLDER(lock)) {
|
||||||
status_t status = mutex_trylock(&lock->lock);
|
status_t status = mutex_trylock(&lock->lock);
|
||||||
@@ -302,6 +307,13 @@ rw_lock_destroy(rw_lock* lock)
|
|||||||
status_t
|
status_t
|
||||||
_rw_lock_read_lock(rw_lock* lock)
|
_rw_lock_read_lock(rw_lock* lock)
|
||||||
{
|
{
|
||||||
|
#if KDEBUG
|
||||||
|
if (!gKernelStartup && !are_interrupts_enabled()) {
|
||||||
|
panic("_rw_lock_read_lock(): called with interrupts disabled for lock %p",
|
||||||
|
lock);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
InterruptsSpinLocker locker(lock->lock);
|
InterruptsSpinLocker locker(lock->lock);
|
||||||
|
|
||||||
// We might be the writer ourselves.
|
// We might be the writer ourselves.
|
||||||
@@ -334,6 +346,13 @@ status_t
|
|||||||
_rw_lock_read_lock_with_timeout(rw_lock* lock, uint32 timeoutFlags,
|
_rw_lock_read_lock_with_timeout(rw_lock* lock, uint32 timeoutFlags,
|
||||||
bigtime_t timeout)
|
bigtime_t timeout)
|
||||||
{
|
{
|
||||||
|
#if KDEBUG
|
||||||
|
if (!gKernelStartup && !are_interrupts_enabled()) {
|
||||||
|
panic("_rw_lock_read_lock_with_timeout(): called with interrupts "
|
||||||
|
"disabled for lock %p", lock);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
InterruptsSpinLocker locker(lock->lock);
|
InterruptsSpinLocker locker(lock->lock);
|
||||||
|
|
||||||
// We might be the writer ourselves.
|
// We might be the writer ourselves.
|
||||||
@@ -418,6 +437,13 @@ _rw_lock_read_lock_with_timeout(rw_lock* lock, uint32 timeoutFlags,
|
|||||||
void
|
void
|
||||||
_rw_lock_read_unlock(rw_lock* lock)
|
_rw_lock_read_unlock(rw_lock* lock)
|
||||||
{
|
{
|
||||||
|
#if KDEBUG
|
||||||
|
if (!gKernelStartup && !are_interrupts_enabled()) {
|
||||||
|
panic("_rw_lock_read_unlock(): called with interrupts disabled for lock %p",
|
||||||
|
lock);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
InterruptsSpinLocker locker(lock->lock);
|
InterruptsSpinLocker locker(lock->lock);
|
||||||
|
|
||||||
// If we're still holding the write lock or if there are other readers,
|
// If we're still holding the write lock or if there are other readers,
|
||||||
@@ -446,6 +472,13 @@ _rw_lock_read_unlock(rw_lock* lock)
|
|||||||
status_t
|
status_t
|
||||||
rw_lock_write_lock(rw_lock* lock)
|
rw_lock_write_lock(rw_lock* lock)
|
||||||
{
|
{
|
||||||
|
#if KDEBUG
|
||||||
|
if (!gKernelStartup && !are_interrupts_enabled()) {
|
||||||
|
panic("_rw_lock_write_lock(): called with interrupts disabled for lock %p",
|
||||||
|
lock);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
InterruptsSpinLocker locker(lock->lock);
|
InterruptsSpinLocker locker(lock->lock);
|
||||||
|
|
||||||
// If we're already the lock holder, we just need to increment the owner
|
// If we're already the lock holder, we just need to increment the owner
|
||||||
@@ -484,6 +517,13 @@ rw_lock_write_lock(rw_lock* lock)
|
|||||||
void
|
void
|
||||||
_rw_lock_write_unlock(rw_lock* lock)
|
_rw_lock_write_unlock(rw_lock* lock)
|
||||||
{
|
{
|
||||||
|
#if KDEBUG
|
||||||
|
if (!gKernelStartup && !are_interrupts_enabled()) {
|
||||||
|
panic("_rw_lock_write_unlock(): called with interrupts disabled for lock %p",
|
||||||
|
lock);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
InterruptsSpinLocker locker(lock->lock);
|
InterruptsSpinLocker locker(lock->lock);
|
||||||
|
|
||||||
if (thread_get_current_thread_id() != lock->holder) {
|
if (thread_get_current_thread_id() != lock->holder) {
|
||||||
|
|||||||
Reference in New Issue
Block a user