diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2019-08-26 07:27:35 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2019-08-26 08:18:13 +0200 |
commit | abbce3f757340930a737f1e8da529443ce88e9c6 (patch) | |
tree | ed72a4f824d869afafb910617fdcbe8bc5d66d7c /freebsd/sys/kern/subr_sleepqueue.c | |
parent | media01: Enable event recording (diff) | |
download | rtems-libbsd-abbce3f757340930a737f1e8da529443ce88e9c6.tar.bz2 |
SLEEPQUEUE(9): Optimize sleepq_set_timeout_sbt()
Avoid an extra ISR disable/enable in SMP configurations.
Diffstat (limited to '')
-rw-r--r-- | freebsd/sys/kern/subr_sleepqueue.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/freebsd/sys/kern/subr_sleepqueue.c b/freebsd/sys/kern/subr_sleepqueue.c index 118e1aaf..57681cce 100644 --- a/freebsd/sys/kern/subr_sleepqueue.c +++ b/freebsd/sys/kern/subr_sleepqueue.c @@ -465,12 +465,13 @@ sleepq_set_timeout_sbt(void *wchan, sbintime_t sbt, sbintime_t pr, sbintime_t sbt_per_tick; uint64_t expire; - cpu_self = _Thread_Dispatch_disable(); + _ISR_lock_ISR_disable(&lock_context); + cpu_self = _Thread_Dispatch_disable_critical(&lock_context); executing = _Per_CPU_Get_executing(cpu_self); BSD_ASSERT(_Watchdog_Get_state(&executing->Timer.Watchdog) == WATCHDOG_INACTIVE); - _ISR_lock_ISR_disable_and_acquire(&executing->Timer.Lock, &lock_context); + _ISR_lock_Acquire(&executing->Timer.Lock, &lock_context); header = &cpu_self->Watchdog.Header[PER_CPU_WATCHDOG_TICKS]; executing->Timer.header = header; |