[rtems-libbsd commit] SLEEPQUEUE(9): Optimize sleepq_set_timeout_sbt()
Sebastian Huber
sebh at rtems.org
Mon Aug 26 06:31:30 UTC 2019
Module: rtems-libbsd
Branch: 5-freebsd-12
Commit: c0dc524614461e3b730b14d136138f8b05faf4db
Changeset: http://git.rtems.org/rtems-libbsd/commit/?id=c0dc524614461e3b730b14d136138f8b05faf4db
Author: Sebastian Huber <sebastian.huber at embedded-brains.de>
Date: Mon Aug 26 07:27:35 2019 +0200
SLEEPQUEUE(9): Optimize sleepq_set_timeout_sbt()
Avoid an extra ISR disable/enable in SMP configurations.
---
freebsd/sys/kern/subr_sleepqueue.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/freebsd/sys/kern/subr_sleepqueue.c b/freebsd/sys/kern/subr_sleepqueue.c
index 537206f..1a1044e 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;
More information about the vc
mailing list