The branch main has been updated by kib:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=c31580080e055573a32d886b1ea83bebd9ef4e77

commit c31580080e055573a32d886b1ea83bebd9ef4e77
Author:     Konstantin Belousov <[email protected]>
AuthorDate: 2023-10-04 18:55:49 +0000
Commit:     Konstantin Belousov <[email protected]>
CommitDate: 2024-08-06 04:05:58 +0000

    Microoptimize rangelock_unlock_int()
    
    Only broadcast if there are sleepers.
    
    Suggested by:   markj
    Reviewed by:    markj, Olivier Certner <[email protected]>
    Tested by:      pho
    Sponsored by:   The FreeBSD Foundation
    Differential revision:  https://reviews.freebsd.org/D41787
---
 sys/kern/kern_rangelock.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/sys/kern/kern_rangelock.c b/sys/kern/kern_rangelock.c
index 9c6b7fb871f9..355b2125dd9b 100644
--- a/sys/kern/kern_rangelock.c
+++ b/sys/kern/kern_rangelock.c
@@ -160,13 +160,17 @@ rl_e_is_rlock(const struct rl_q_entry *e)
 static void
 rangelock_unlock_int(struct rangelock *lock, struct rl_q_entry *e)
 {
+       bool sleepers;
+
        MPASS(lock != NULL && e != NULL);
        MPASS(!rl_e_is_marked(rl_q_load(&e->rl_q_next)));
        MPASS(e->rl_q_owner == curthread);
 
        rl_e_mark(e);
+       sleepers = lock->sleepers;
        lock->sleepers = false;
-       sleepq_broadcast(&lock->sleepers, SLEEPQ_SLEEP, 0, 0);
+       if (sleepers)
+               sleepq_broadcast(&lock->sleepers, SLEEPQ_SLEEP, 0, 0);
 }
 
 void

Reply via email to