The branch main has been updated by mjg:

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

commit c9f8dcda856c50325190326a618dc251311bc43a
Author:     Mateusz Guzik <[email protected]>
AuthorDate: 2021-06-02 15:14:58 +0000
Commit:     Mateusz Guzik <[email protected]>
CommitDate: 2021-06-02 15:14:58 +0000

    kqueue: replace kq_ncallouts loop with atomic_fetchadd
---
 sys/kern/kern_event.c | 12 +++++-------
 1 file changed, 5 insertions(+), 7 deletions(-)

diff --git a/sys/kern/kern_event.c b/sys/kern/kern_event.c
index b224ce87087e..63b28cd6024f 100644
--- a/sys/kern/kern_event.c
+++ b/sys/kern/kern_event.c
@@ -206,7 +206,7 @@ static struct filterops user_filtops = {
 };
 
 static uma_zone_t      knote_zone;
-static unsigned int    kq_ncallouts = 0;
+static unsigned int __exclusive_cache_line     kq_ncallouts;
 static unsigned int    kq_calloutmax = 4 * 1024;
 SYSCTL_UINT(_kern, OID_AUTO, kq_calloutmax, CTLFLAG_RW,
     &kq_calloutmax, 0, "Maximum number of callouts allocated for kqueue");
@@ -813,18 +813,16 @@ filt_timerattach(struct knote *kn)
 {
        struct kq_timer_cb_data *kc;
        sbintime_t to;
-       unsigned int ncallouts;
        int error;
 
        error = filt_timervalidate(kn, &to);
        if (error != 0)
                return (error);
 
-       do {
-               ncallouts = kq_ncallouts;
-               if (ncallouts >= kq_calloutmax)
-                       return (ENOMEM);
-       } while (!atomic_cmpset_int(&kq_ncallouts, ncallouts, ncallouts + 1));
+       if (atomic_fetchadd_int(&kq_ncallouts, 1) + 1 > kq_calloutmax) {
+               atomic_subtract_int(&kq_ncallouts, 1);
+               return (ENOMEM);
+       }
 
        if ((kn->kn_sfflags & NOTE_ABSTIME) == 0)
                kn->kn_flags |= EV_CLEAR;       /* automatically set */
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/dev-commits-src-main
To unsubscribe, send any mail to "[email protected]"

Reply via email to