[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