summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2015-04-23 15:42:58 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2015-05-20 09:58:22 +0200
commitc2f23920283dd57acf375d5b5ff2fd5bbf9f5e2d (patch)
treecc4a64547fffd2486a25f43cf81ff8b38859f4cb
parentrtems-bsd-mutex: Use standard thread queues (diff)
downloadrtems-libbsd-c2f23920283dd57acf375d5b5ff2fd5bbf9f5e2d.tar.bz2
SLEEPQUEUE(9): Avoid Giant lock
-rw-r--r--freebsd/sys/kern/subr_sleepqueue.c8
1 files changed, 0 insertions, 8 deletions
diff --git a/freebsd/sys/kern/subr_sleepqueue.c b/freebsd/sys/kern/subr_sleepqueue.c
index 8376c47b..1af1c825 100644
--- a/freebsd/sys/kern/subr_sleepqueue.c
+++ b/freebsd/sys/kern/subr_sleepqueue.c
@@ -638,9 +638,7 @@ sleepq_switch(void *wchan, int pri)
cpu_self = _Thread_Dispatch_disable_critical();
_Thread_Lock_release_default(executing, &lock_context);
- _Giant_Acquire(cpu_self);
_Thread_Set_state(executing, STATES_WAITING_FOR_BSD_WAKEUP);
- _Giant_Release(cpu_self);
_Thread_Lock_acquire_default(executing, &lock_context);
@@ -666,10 +664,8 @@ sleepq_switch(void *wchan, int pri)
_Thread_Lock_release_default(executing, &lock_context);
if (unblock) {
- _Giant_Acquire(cpu_self);
_Watchdog_Remove(&executing->Timer);
_Thread_Clear_state(executing, STATES_WAITING_FOR_BSD_WAKEUP);
- _Giant_Release(cpu_self);
}
_Thread_Dispatch_enable(cpu_self);
@@ -971,12 +967,10 @@ sleepq_resume_thread(struct sleepqueue *sq, struct thread *td, int pri)
cpu_self = _Thread_Dispatch_disable_critical();
_Thread_Lock_release_default(thread, &lock_context);
- _Giant_Acquire(cpu_self);
_Watchdog_Remove(&thread->Timer);
_Thread_Clear_state(thread, STATES_WAITING_FOR_BSD_WAKEUP);
- _Giant_Release(cpu_self);
_Thread_Dispatch_enable(cpu_self);
} else {
_Thread_Lock_release_default(thread, &lock_context);
@@ -1201,11 +1195,9 @@ sleepq_timeout(Objects_Id id, void *arg)
cpu_self = _Thread_Dispatch_disable_critical();
_Thread_Lock_release_default(thread, &lock_context);
- _Giant_Acquire(cpu_self);
_Thread_Clear_state(thread, STATES_WAITING_FOR_BSD_WAKEUP);
- _Giant_Release(cpu_self);
_Thread_Dispatch_enable(cpu_self);
} else {
_Thread_Lock_release_default(thread, &lock_context);